Spring(十九)之异常处理
异常处理,对于项目开发至关重要,总不能用户点击一个页面出错了,直接报500,那样用户体验多不好啊! 所以这里讲的是SpringMVC对异常的处理,希望能给大家带来一定的 帮助和启发。 ? 一、编写实体 package com.tutorialspoint; public class Student { private Integer age; String name; Integer id; void setAge(Integer age) { this.age = age; } public Integer getAge() { return setName(String name) { this.name = name; } String getName() { setId(Integer id) { this.id = id; } Integer getId() { id; } } ? 二、编写异常 SpringException extends RuntimeException{ String exceptionMsg; SpringException(String exceptionMsg) { this.exceptionMsg = exceptionMsg; } String getExceptionMsg(){ return this.exceptionMsg; } setExceptionMsg(String exceptionMsg) { exceptionMsg; } } ? 三、编写Controller package com.tutorialspoint; import org.springframework.stereotype.Controller; org.springframework.web.bind.annotation.ExceptionHandler; org.springframework.web.bind.annotation.ModelAttribute; org.springframework.web.bind.annotation.RequestMapping; org.springframework.web.bind.annotation.RequestMethod; org.springframework.web.servlet.ModelAndView; org.springframework.ui.ModelMap; @Controller StudentController { @RequestMapping(value = "/student",method = RequestMethod.GET) ModelAndView student() { new ModelAndView("student","command",new Student()); } @RequestMapping(value = "/addStudent",1)"> RequestMethod.POST) @ExceptionHandler({SpringException.}) public String addStudent( @ModelAttribute("HelloWeb")Student student,ModelMap model) { if(student.getName().length() < 5 ){ throw new SpringException("Given name is too short"); }else{ model.addAttribute("name",student.getName()); } if( student.getAge() < 10new SpringException("Given age is too low"{ model.addAttribute("age"return "result"; } } ? 四、修改web.xml <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Spring Exception Handling</display-name> <servlet> <servlet-name>HelloWeb</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>HelloWeb</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> ? 五、添加HelloWeb-servlet.xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http:www.springframework.org/schema/beans http:www.springframework.org/schema/beans/spring-beans-3.0.xsd http:www.springframework.org/schema/context http:www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="com.tutorialspoint" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="com.tutorialspoint.SpringException"> ExceptionPage </prop> </props> </property> <property name="defaultErrorView" value="error"/> </bean> </beans> ? 六、编写相应的jsp student.jsp <%@taglib uri="http://www.springframework.org/tags/form prefixform"%> <html> head> title>Spring MVC Exception Handling</body> h2>Student Informationform:form method="POST" action="/HelloWeb/addStudent"> tabletrtd><form:label path="name">Nameform:label></form:input ="name" /></="age">Age="age" ="id">id="id" td colspan="2"input type="submit" value="Submit"/> > form:form> ? error.jsp >Spring Error Pagep>An error occured,please contact webmaster.> ? ExceptionPage.jsp h3>${exception.exceptionMsg}> result.jsp >Spring MVC Form Handling>Submitted Student Information>${name}>${age}>ID>${id}> ? 七、运行项目 出现如图所示,表示成功 ? ? ? 在SpringMVC中有两种处理异常的方式,那么就存在一个优先级的问题: ? 当发生异常的时候,SpringMVC会如下处理: (1)SpringMVC会先从配置文件找异常解析器HandlerExceptionResolver (2)如果找到了异常异常解析器,那么接下来就会判断该异常解析器能否处理当前发生的异常 (3)如果可以处理的话,那么就进行处理,然后给前台返回对应的异常视图 (4)如果没有找到对应的异常解析器或者是找到的异常解析器不能处理当前的异常的时候,就看当前的Controller中有没有提供对应的异常处理器,如果提供了就由Controller自己进行处理并返回对应的视图 (5)如果配置文件里面没有定义对应的异常解析器,而当前Controller中也没有定义的话,那么该异常就会被抛出来。 ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |