在实际开发中,我们需要对异常单独处理,当发生异常了,不能让用户看到404、500等的异常,所以我们要对异常做特殊处理,当发生异常之后跳转到一个指定的页面去
1、controller类
package com.zhouym.databack;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class ResolverException {
@RequestMapping("/query")
public String query(Integer num) throws NullPointerException{
if (num == 1) {
throw new NullPointerException();
}
return "/success.jsp";
}
@RequestMapping("/query1")
public String query1(Integer num) throws ArithmeticException{
if (num == 1) {
throw new ArithmeticException();
}
return "/success.jsp";
}
//将异常信息最好单独写到一个异常类中,方便管理
// @ExceptionHandler(value= {NullPointerException.class})
// public ModelAndView resolverNullPointException() {
// ModelAndView mv = new ModelAndView();
// mv.setViewName("/error.jsp");
// mv.addObject("msg","空指针异常");
// return mv;
// }
//
// @ExceptionHandler(value= {ArithmeticException.class})
// public ModelAndView resolverArithmeticException() {
// ModelAndView mv = new ModelAndView();
// mv.setViewName("/error.jsp");
// mv.addObject("msg","计算错误异常");
// return mv;
// }
}
2、异常类
package com.zhouym.exception;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
//@ControllerAdvice结合@ExceptionHandler作全局异常处理
@ControllerAdvice
@Component
public class MyExceptionResolver {
//空指针异常
@ExceptionHandler(value= {NullPointerException.class})
public ModelAndView resolverNullPointException(){
ModelAndView mv = new ModelAndView();
mv.setViewName("/error.jsp");
mv.addObject("msg","空指针异常");
return mv;
}
//计算错误异常
@ExceptionHandler(value= {ArithmeticException.class})
public ModelAndView resovlerArithmeticException() {
ModelAndView mv = new ModelAndView();
mv.setViewName("/error.jsp");
mv.addObject("msg","计算错误异常");
return mv;
}
}
3、applicationContext.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 开启扫描 -->
<context:component-scan base-package="com.zhouym.databack,com.zhouym.exception"></context:component-scan>
<!-- 开启mvc -->
<mvc:annotation-driven></mvc:annotation-driven>
</beans>
4、web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>springmvc-databack</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<!-- 加载执行顺序 -->
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 设置过滤器 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置防止springmvc拦截的静态资源 -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>
5、定义错误页面和成功页面
测试结果