SpringMVC学习记录
注意:以下内容是学习 北京动力节点 的SpringMVC视频后所记录的笔记、源码以及个人的理解等,记录下来仅供学习
第4章 SpringMVC 核心技术 4.2异常处理SpringMVC框架处理异常的常用方式:使用@ExceptionHandler注解处理异常。
异常处理步骤:
新建maven web项目
加入依赖
新建一个自定义异常类 MyUserException , 再定义它的子类NameException ,AgeException
在controller抛出NameException , AgeException
创建一个普通类,作用全局异常处理类
(1). 在类的上面加入@ControllerAdvice
(2). 在类中定义方法,方法的上面加入@ExceptionHandler
创建处理异常的视图页面
.创建springmvc的配置文件
(1).组件扫描器 ,扫描@Controller注解
(2).组件扫描器,扫描@ControllerAdvice所在的包名
(3).声明注解驱动
项目结构:
使用注解@ExceptionHandler可以将一个方法指定为异常处理方法。该注解只有一个可 选属性value,为一个Class<?>数组,用于指定该注解的方法所要处理的异常类,即所要匹 配的异常。
而被注解的方法,其返回值可以是ModelAndView、String,或void,方法名随意,方法 参数可以是 Exception 及其子类对象、HttpServletRequest、HttpServletResponse 等。系统会 自动为这些方法参数赋值。
对于异常处理注解的用法,也可以直接将异常处理方法注解于Controller之中。
定义三个异常类:NameException、AgeException、MyUserException。其中 MyUserException 是另外两个异常的父类。
MyUserException.java
AgeException.java
package com.bjpowernode.exception; //当年龄有问题时,抛出的异常 public class AgeException extends MyUserException { public AgeException() { super(); } public AgeException(String message) { super(message); } }NameException.java
package com.bjpowernode.exception; //表示当用户的姓名有异常,抛出NameException public class NameException extends MyUserException { public NameException() { super(); } public NameException(String message) { super(message); } } (2) 修改 Controller 抛出异常MyController.java
package com.bjpowernode.controller; import com.bjpowernode.exception.AgeException; import com.bjpowernode.exception.MyUserException; import com.bjpowernode.exception.NameException; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.xml.ws.RequestWrapper; /** * @RequestMapping: * value : 所有请求地址的公共部分,叫做模块名称 * 位置: 放在类的上面 */ @Controller public class MyController { @RequestMapping(value = "/some.do") public ModelAndView doSome(String name,Integer age) throws MyUserException { //处理some.do请求了。 相当于service调用处理完成了。 ModelAndView mv = new ModelAndView(); //try { //根据请求参数抛出异常 if (!"zs".equals(name)) { throw new NameException("姓名不正确!!!"); } if (age == null || age > 80) { throw new AgeException("年龄比较大!!!"); } //}catch(Exception e){ // e.printStackTrace(); //} mv.addObject("myname",name); mv.addObject("myage",age); mv.setViewName("show"); return mv; } } (3) 定义异常请求以及响应页面请求页面:
index.jsp
响应页面
ageError.jsp