SpringMvc注解自定义异常处理
环境准备
导入依赖
<dependencies>
<!--spring核心依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.0.RELEASE</version>
</dependency>
<!--springmvc核心依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.0.RELEASE</version>
</dependency>
<!--servlet依赖,provided是因为部署到tomcat后,tomcat本身提供servlet,本servlet就会被Tomcat自带的servlet替代-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!--jsp依赖,provided是因为部署到tomcat后,tomcat本身提供-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
springmvc异常处理机制
springmvc的请求:
客户端-->前端控制器(DispatcherServlet)-->表现层(controller)-->服务层(service)-->持久层(dao)
异常(一直抛出,不处理):
持久层(dao)-->服务层(service)-->表现层(controller)-->前端控制器(DispatcherServlet-->异常处理器(ExceptionResolver)
定义异常处理器
public class MyHandlerExceptionResolver implements HandlerExceptionResolver{
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("msg",e.getMessage());
modelAndView.setViewName("error");
return modelAndView;
}
}
在springmvc配置文件中配置异常处理器
@Configuration
@EnableWebMvc //相当于<aop:annotation-driven/>
@ComponentScan(basePackages = "com.offcn.controller") //相当于<context:component-scan base-package="com.offcn.controller"/>
public class MyWebConfig implements WebMvcConfigurer{
//配置视图解析器:前缀、后缀
@Bean
public InternalResourceViewResolver internalResourceViewResolver(){
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
//<!--servlet容器能处理的映射,springMvc不拦截-->
//<mvc:default-servlet-handler/>
//需要实现WebMvcConfigurer重写其中的configureDefaultServletHandling方法
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
//自定义异常处理器
@Bean
public MyHandlerExceptionResolver myHandlerExceptionResolver(){
MyHandlerExceptionResolver myHandlerExceptionResolver = new MyHandlerExceptionResolver();
return myHandlerExceptionResolver;
}
}
作用
在web程序使用过程中,若抛出异常,会跳转到自定义的错误界面。