
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 }

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 }

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 }

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>

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>

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>

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>