SpringMVC中使用RequestMapping自定义多个404页

一般来说,Java Web项目在自定义404页面时,直接在web.xml中增加一段<error-page>就可以实现,例如:

<error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location>
</error-page>

然而,使用这种方法,项目中所有的404页都只能指向同一个HTML页。若想让项目中PC端的404页和手机端的404页指向不同的页面,则使用该方法无法实现。

若想自定义多个404页,我们可以使用SpringMVC中@RequestMapping最精确匹配原则来实现。该原则的意思是,如果我们在Controller中有两个方法,一个拦截了admin/**,一个拦截了admin/login,则在访问admin/login时,SpringMVC会进入匹配最为精确的那个方法,即拦截了admin/login的那个方法。

利用这个原则,我们可以这样来自定义多个404页:假设项目中所有PC端页面的地址均为admin/开头,所有移动端页面的地址均为mobile/开头,那么我们可以写两个Controller方法,PC端404页拦截admin/**,移动端404页拦截mobile/**,即分别使用@RequestMapping(value = "admin/**")@RequestMapping(value = "mobile/**"),这样在admin/及mobile/下的所有未被其他Controller拦截的地址,都会分别被这两个方法拦截,我们只需要分别在这两个方法中return到对应的错误页面就可以了。

需要注意的是,我们需要写/**,而不是/*,若使用*,则只能拦截到第一级的页面(如admin/a),而对于admin/a/b、admin/a/b/c这种多级的页面,则无法拦截到。

发表评论

电子邮件地址不会被公开。 必填项已用*标注