</pre>Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p><h3 style="margin:0px; padding:0px; color:rgb(51,51,51); font-family:Arial; line-height:26px; text-indent:28px">第三部分:显示全局异常信息,而不是局部异常信息。</h3><p></p><p> 当有很多异常时,光是UserController这个控制器中的异常通过局部异常信息处理,已经不能满足需求。在其他控制器中(包括UserController)中的异常,都可以使用全局异常处理异常信息。</p><p> 1. 在myhello-Servelet.xml文件中,添加SimpleMappingExceptionResolver</p><p> 2. 注入<property>标签,通过<prop>标签列出全局中所有需要处理的异常。</p><p> 3. 然后注释掉局部异常处理code,在UserController控制器的代码中。</p><p> 4. 在error.jsp视图中,使用 ${exception.message } 显示全局异常处理结果。 </p><p></p><p>在myhello-servelet.xml文件中:</p><pre code_snippet_id="526777" snippet_file_name="blog_20141120_1_7394166" name="code" class="html"><?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 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"> <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure --> <!-- Scans within the base package of the application for @Components to configure as beans --> <!-- @Controller, @Service, @Configuration, etc. --> <context:component-scan base-package="edu.bit.myhello" /> <!-- Enables the Spring MVC @Controller programming model --> <mvc:annotation-driven /> <!-- Resolve logical view names to .jsp resources in the /WEB-INF/views directory --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> <bean id = "exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key = "edu.bit.model.UserException">error</prop> <!--key值的是你要映射哪个类 ,value=error直接写 --> <!-- 这个的意思就是当在UserException中发现异常,就在error中处理,error中就要用exception对象 同样还可以: <prop key = "java.lang.NullPointer"> exception </prop> 处理空指针异常,在exception.jsp视图中处理 --> </props> </property> </bean> </beans>加入的部分:
<bean id = "exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key = "edu.bit.model.UserException">error</prop> <!--key值的是你要映射哪个类 ,value=error直接写 --> <!-- 这个的意思就是当在UserException中发现异常,就在error中处理,error中就要用exception对象 同样还可以: <prop key = "java.lang.NullPointer"> exception </prop> 处理空指针异常,在exception.jsp视图中处理 --> </props> </property> </bean>
在UserController.java中,注释掉局部异常处理代码:
/* * 显示局部的异常信息:仅仅只能处理这个控制器中的异常 * 写一个方法,HandlerException, 把 UserException传进来 */ // @ExceptionHandler(value={UserException.class}) //用ExceptionHandler来映射,要处理的value是一个数组 // //要处理一个对象就这样写,可处理多个对象。 // public String handlerException(UserException ue, HttpServletRequest req){ // //1.把 UserException传进来; // //2.不能用model来传值,因为不是RequestMapping,用HttpSeverletRequest req // //把异常对象存进去: // req.setAttribute("e", ue); //req 的 “e”参数,被set为 ue // return "error"; // }
在error.jsp中,改为:
<h1> <!-- ${e.message} --> ${exception.message } </h1>