目录
1.异常处理 @ExceptionHandler 注解
1.1 代码例子
1.1.1 MyController控制器类
1.1.2 springmvc配置文件
1.1.3 web.xml
1.1.4 三个异常类
1.1.5 一个异常处理类
1.1.6 首页(index.jsp)
1.1.7 数据正常页面(show.jsp)
1.1.8 姓名异常的页面(nameError.jsp)
1.1.9 年龄异常的页面(ageError.jsp)
1.1.10 其他异常的页面(otherError.jsp)
SpringMVC 框架处理异常的常用方式:使用@ExceptionHandler 注解处理异常。
使用注解@ExceptionHandler 可以将一个方法指定为异常处理方法。该注解只有一个可选属性 value,为一个 Class>数组,用于指定该注解的方法所要处理的异常类,即所要匹配的异常。
而被注解的方法,其返回值可以是 ModelAndView、String,或 void,方法名随意,方法参数可以是 Exception 及其子类对象、HttpServletRequest、HttpServletResponse 等。系统会自动为这些方法参数赋值。
对于异常处理注解的用法,也可以直接将异常处理方法注解于 Controller之中。
package com.liuhaiyang.controller;
import com.liuhaiyang.exception.AgeException;
import com.liuhaiyang.exception.MyUserException;
import com.liuhaiyang.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;
@Controller
public class MyController {
@RequestMapping(value = "/some.do")
public ModelAndView doforward(String name, Integer age)throws MyUserException {
System.out.println("执行了MyController的dosome方法");
//抛出异常
if (!"湛山".equals(name)){
throw new NameException("姓名不正确");
}
System.out.println(age.intValue());
if (age==null || age.intValue()>80){
throw new AgeException("年龄太大了");
}
ModelAndView mv=new ModelAndView();
mv.addObject("name",name);
mv.addObject("age",age);
mv.setViewName("show");
return mv;
}
}
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
springmvc
*.do
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
forceRequestEncoding
true
forceResponseEncoding
true
characterEncodingFilter
/*
package com.liuhaiyang.exception;
public class MyUserException extends Exception{
public MyUserException() {
super();
}
public MyUserException(String message) {
super(message);
}
}
package com.liuhaiyang.exception;
public class NameException extends MyUserException{
public NameException() {
super();
}
public NameException(String message) {
super(message);
}
}
package com.liuhaiyang.exception;
public class AgeException extends MyUserException{
public AgeException() {
super();
}
public AgeException(String message) {
super(message);
}
}
package com.liuhaiyang.myException;
import com.liuhaiyang.exception.AgeException;
import com.liuhaiyang.exception.NameException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
/**
* @ControllerAdvice :表示当前类是异常的处理类,给controller增加功能的 位置:在类的上面
*/
@ControllerAdvice
public class ExceptionHander {
//定义处理异常的方法,当异常发生后,执行这个方法, 方法的定义和Controller类中方法的定义
/*
处理NameException类型的异常 参数:Exception:表示Controller抛出的异常对象
@ExceptionHandler:表示此方法处理异常 属性:value 异常的类型。 位置:方法的上面
*/
@ExceptionHandler(value = NameException.class) //表示当NameException的异常被抛出时,执行此方法
public ModelAndView doNameException(Exception e){
System.out.println("我被抓写了"+e);
ModelAndView mv=new ModelAndView();
mv.addObject("tips","这个姓名只能是湛山");
mv.setViewName("nameError");
return mv;
}
@ExceptionHandler(value = AgeException.class) //表示当NameException的异常被抛出时,执行此方法
public ModelAndView doAgeException(Exception e){
System.out.println("年龄太大了"+e);
ModelAndView mv=new ModelAndView();
mv.addObject("tips","年龄不能大于80");
mv.setViewName("ageError");
return mv;
}
//未知异常
@ExceptionHandler
public ModelAndView dootherException(Exception e){
ModelAndView mv=new ModelAndView();
mv.addObject("tips","请稍后测试");
mv.setViewName("defaultError");
return mv;
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
第一个springmvc
异常的处理
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
/show.jsp,显示request作用域中的数据
name数据:<%=request.getAttribute("name")%>
age数据:${age}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
nameError.jsp,${tips}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
ageError.jsp,${tips}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
defaultError.jsp ${tips}