18/1/15

    SpringMVC 通过 HandlerExceptionResolver 处理程序异常,包括:处理器异常、数据绑定异常、处理器执行发生的异常。HandlerExceptionResolver 仅仅只有一个接口方法。当发送异常时,SpringMVC 调用 resolveException () 方法,并转到ModelAndView 对应的视图中,作为一个异常报告页面反馈给用户。对于异常,一般分为局部和全局。

一、局部异常处理

【1】修改UserController.java,添加以下方法:

//局部异常
@RequestMapping(value="exlogin",method=RequestMethod.GET)
public String exlogin(@RequestParam String userName,@RequestParam String userPassword) throws SQLException{
User user = userService.login(userName, userPassword);
if(null == user){
throw new RuntimeException("用户名或者密码不正确!");
}
return "redirect:frame";
}

//局部异常
@ExceptionHandler(value={RuntimeException.class})
public String handlerException(RuntimeException e, HttpServletRequest req){
req.setAttribute("e", e);
return "error";
}

exlogin方法处理用户登录请求,若登录失败,则抛出一个RuntimeException ,它会被处于同一个处理器类中的handlerException 方法捕获。@ExceptionHandler 可以指定多个异常,这里示例指定一个。handlerException 方法:把异常提示信息放入HttpServletRequest 对象中,并返回逻辑视图名error。

 

【2】在login.jsp 添加${e.message};

 

二、全局异常处理

【1】注释掉局部异常,然后在springmvc-servlet.xml 配置文件配置全局异常:

 

<!-- 全局异常处理 -->
<bean class="org.springframework.web.servlet.handler
.SimpleMapperExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.RuntimeException">error</prop>
</props>
</property>
</bean>

全局异常用 SimpleMapperExceptionResolver 来实现,它将异常类名映射为视图名,即发生异常时,会使用对应的视图报告异常。

 

【2】在login.jsp 添加${exception.message};

 

【3】运行结果:

SpringMVC(12):异常处理(局部异常和全局异常)_异常处理

 


SpringMVC(12):异常处理(局部异常和全局异常)_异常处理_02

欢迎扫二维码关注公众号,获取技术干货