springmvc跳转到自定义404页面的三种方法
有时候我们并不想跳转到系统自定义的错误页面中,那么我们需要自定义页面并且实现它的跳转
有三种方法可以实现
方法一:最简单的实现,也是最快的
在<web-app>节点下配置
代码如下:
1 <error-page> 2 <error-code>404</error-code> 3 <location>/WEB-INF/errors/404.jsp</location> 4 </error-page>
若url匹配不到则会跳转到404.jsp页面
方法二:也很简单
1 @RequestMapping("*") 2 public String test3(){ 3 return "404"; 4 }
如果不能精确匹配上url,则返回404.jsp页面
方法三:重写noHandlerFound方法,实现自定义的DispatcherServlet
web.xml
1 <servlet> 2 <servlet-name>springmvc</servlet-name> 3 <servlet-class>com.exceptionpage.test</servlet-class> 4 <init-param> 5 <param-name>contextConfigLocation</param-name> 6 <param-value>classpath:spring-mvc.xml</param-value> 7 </init-param> 8 </servlet> 9 <servlet-mapping> 10 <servlet-name>springmvc</servlet-name> 11 <url-pattern>/</url-pattern> 12 </servlet-mapping>
controller类需要继承DispatcherServlet,并重写noHandlerFound方法
1 @Override 2 protected void noHandlerFound(HttpServletRequest request, 3 HttpServletResponse response) throws Exception { 4 System.out.println("successful execute..."); 5 response.sendRedirect(request.getContextPath() + "/notFound"); 6 } 7 8 @RequestMapping("/notFound") 9 public String test2(){ 10 System.out.println("successful..."); 11 return "404"; 12 }
若没有匹配上url,则调用noHandlerFound方法,并且重定向到一个新的方法
新的方法中跳转到404.jsp页面
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>com.exceptionpage.test</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>