SpringMvc(注解)自定义异常处理

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程序使用过程中,若抛出异常,会跳转到自定义的错误界面。

猜你喜欢

转载自www.cnblogs.com/ygfcoder/p/13404836.html