SpringMVC异常处理

 1 package cn.itcast.controller;
 2 
 3 import cn.itcast.service.DemoService;
 4 import org.springframework.beans.factory.annotation.Autowired;
 5 import org.springframework.stereotype.Controller;
 6 import org.springframework.web.bind.annotation.RequestMapping;
 7 import org.springframework.web.bind.annotation.ResponseBody;
 8 
 9 import java.io.FileNotFoundException;
10 
11 @Controller
12 public class DemoController {
13 
14     @Autowired
15     DemoService demoService;
16 
17     @RequestMapping("/cast")
18     @ResponseBody
19     public void cast(){
20         demoService.cast();
21     }
22 
23     @RequestMapping("/nullPointer")
24     @ResponseBody
25     public void nullPointer(){
26         demoService.nullPointer();
27     }
28 
29     @RequestMapping("/io")
30     @ResponseBody
31     public void io() throws FileNotFoundException {
32         demoService.io();
33     }
34 
35     @RequestMapping("/zero")
36     @ResponseBody
37     public void zero(){
38         demoService.zero();
39     }
40 }
DemoController.java
 1 package cn.itcast.service;
 2 
 3 import org.springframework.stereotype.Service;
 4 
 5 import java.io.File;
 6 import java.io.FileInputStream;
 7 import java.io.FileNotFoundException;
 8 
 9 @Service
10 public class DemoService {
11 
12     public void cast(){
13         String s = (String) new Object();
14     }
15 
16     public void nullPointer(){
17         String s = null;
18         s.equals("");
19     }
20 
21     public void io() throws FileNotFoundException {
22         new FileInputStream("d:/x1/x2/x3");
23     }
24 
25     public void zero(){
26         int i = 1 / 0;
27     }
28 }
DemoService.java
 1 package cn.itcast.exception;
 2 
 3 import org.springframework.web.servlet.HandlerExceptionResolver;
 4 import org.springframework.web.servlet.ModelAndView;
 5 
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 import java.io.FileNotFoundException;
 9 
10 public class MyExceptionResolver implements HandlerExceptionResolver {
11     @Override
12     public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
13         ModelAndView modelAndView = new ModelAndView();
14         if(ex instanceof FileNotFoundException){
15             //对文件不存在异常进行特殊处理
16             modelAndView.setViewName("noFile");
17         }else if(ex instanceof  NullPointerException){
18             //对空指针异常进行特殊处理
19             modelAndView.setViewName("nullPointer");
20         }else{
21             //其他的异常,默认处理
22             modelAndView.setViewName("error");
23         }
24         return modelAndView;
25     }
26 }
MyExceptionResolver.java
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:mvc="http://www.springframework.org/schema/mvc"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 6        xsi:schemaLocation="
 7        http://www.springframework.org/schema/beans
 8        http://www.springframework.org/schema/beans/spring-beans.xsd
 9        http://www.springframework.org/schema/mvc
10        http://www.springframework.org/schema/mvc/spring-mvc.xsd
11        http://www.springframework.org/schema/context
12        http://www.springframework.org/schema/context/spring-context.xsd
13 ">
14 
15     <!--组件扫描-->
16     <context:component-scan base-package="cn.itcast"></context:component-scan>
17 
18     <!--注解驱动-->
19     <mvc:annotation-driven></mvc:annotation-driven>
20 
21     <!--静态资源处理-->
22     <mvc:default-servlet-handler></mvc:default-servlet-handler>
23 
24     <!--视图解析前后缀-->
25     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
26         <property name="prefix" value="/WEB-INF/jsp/"></property>
27         <property name="suffix" value=".jsp"></property>
28     </bean>
29 
30     <!--在SpringMVC中定义多个异常处理器的话,貌似只加载第1个。-->
31     <bean class="cn.itcast.exception.MyExceptionResolver"></bean>
32 
33     <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
34         <!--定义默认的异常处理页面,所有不在exceptionMappings中的异常,将由这个处理-->
35         <property name="defaultErrorView" value="error"></property>
36         <!--定义异常处理页面用来获取异常信息的变量名,默认为exception-->
37         <property name="exceptionAttribute" value="ex"></property>
38         <!--需要特殊处理的异常,key是异常的全类名,value是异常页面-->
39         <property name="exceptionMappings">
40             <map>
41                 <entry key="java.io.FileNotFoundException" value="noFile"></entry>
42                 <entry key="java.lang.ArithmeticException" value="zero"></entry>
43             </map>
44         </property>
45     </bean>
46 
47 </beans>
spring-mvc.xml
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
 5          version="3.1">
 6 
 7     <!--spring容器监听器-->
 8 <!--    <listener>
 9         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
10     </listener>
11 
12     <context-param>
13         <param-name>contextConfigLocation</param-name>
14         <param-value>classpath:applicationContext.xml</param-value>
15     </context-param>-->
16 
17 
18     <!--springmvc前端控制器-->
19     <servlet>
20         <servlet-name>app</servlet-name>
21         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
22         <init-param>
23             <param-name>contextConfigLocation</param-name>
24             <param-value>classpath:spring-mvc.xml</param-value>
25         </init-param>
26         <load-on-startup>1</load-on-startup>
27     </servlet>
28 
29     <servlet-mapping>
30         <servlet-name>app</servlet-name>
31         <url-pattern>/</url-pattern>
32     </servlet-mapping>
33 
34 
35     <!--编码过滤-->
36     <filter>
37         <filter-name>CharacterEncodingFilter</filter-name>
38         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
39         <init-param>
40             <param-name>encoding</param-name>
41             <param-value>UTF-8</param-value>
42         </init-param>
43     </filter>
44     <filter-mapping>
45         <filter-name>CharacterEncodingFilter</filter-name>
46         <url-pattern>/*</url-pattern>
47     </filter-mapping>
48 
49 </web-app>
web.xml
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
2 <html>
3 <head>
4     <title>Title</title>
5 </head>
6 <body>
7     出错啦!!${ex}
8 </body>
9 </html>
error.jsp
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>cn.itcast</groupId>
 8     <artifactId>spring_mvc_exception</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10     <packaging>war</packaging>
11 
12     <properties>
13         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
14     </properties>
15 
16     <dependencies>
17         <dependency>
18             <groupId>org.springframework</groupId>
19             <artifactId>spring-webmvc</artifactId>
20             <version>5.0.5.RELEASE</version>
21         </dependency>
22 
23         <dependency>
24             <groupId>javax.servlet.jsp</groupId>
25             <artifactId>javax.servlet.jsp-api</artifactId>
26             <version>2.3.1</version>
27             <scope>provided</scope>
28         </dependency>
29         <dependency>
30             <groupId>javax.servlet</groupId>
31             <artifactId>javax.servlet-api</artifactId>
32             <version>3.1.0</version>
33             <scope>provided</scope>
34         </dependency>
35 
36     </dependencies>
37 
38     <build>
39         <plugins>
40             <!--编译插件-->
41             <plugin>
42                 <groupId>org.apache.maven.plugins</groupId>
43                 <artifactId>maven-compiler-plugin</artifactId>
44                 <version>3.8.0</version>
45                 <configuration>
46                     <source>1.8</source>
47                     <target>1.8</target>
48                 </configuration>
49             </plugin>
50             <!--tomcat插件-->
51             <plugin>
52                 <groupId>org.apache.tomcat.maven</groupId>
53                 <!-- tomcat7的插件, 不同tomcat版本这个也不一样 -->
54                 <artifactId>tomcat7-maven-plugin</artifactId>
55                 <version>2.1</version>
56                 <configuration>
57                     <!-- 通过maven tomcat7:run运行项目时,访问项目的端口号 -->
58                     <port>80</port>
59                     <!-- 项目访问路径  本例:localhost:9090,  如果配置的aa, 则访问路径为localhost:9090/aa-->
60                     <path>/</path>
61                 </configuration>
62             </plugin>
63         </plugins>
64     </build>
65 
66 </project>
pom.xml

原文地址:https://www.cnblogs.com/mozq/p/11005015.html