- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
请求重定向和转发
当处理器对请求处理完毕后,向其它资源进行跳转时,有两种跳转方式: 请求转发与重定向。而根据所要跳转的资源类型,又可分为两类:跳转到页面与跳转到其它处理器。
注意,对于请求转发的页面,可以是WEB-INF 中页面;而重定向的页面, 是不能为WEB-INF 中页的。因为重定向相当于用户再次发出一次请求,而用户是不能直接访问WEB-INF 中资源的。
SpringMVC 框架把原来 Servlet 中的请求转发和重定向操作进行了封装。现在可以使用简单的方式实现转发和重定向。
forward:表示转发,实现request.getRequestDispatcher("xx.jsp").forward()
redirect:表示重定向,实现 response.sendRedirect("xxx.jsp")
请求转发
处理器方法返回 ModelAndView 时,需在setViewName()指定的视图前添加forward:,且此时的视图不再与视图解析器一同工作,这样可以在配置了解析器时指定不同位置的视图。视图页面必须写出相对于项目根的路径。forward 操作不需要视图解析器。
处理器方法返回String,在视图路径前面加入forward: 视图完整路径。
请求重定向
在处理器方法返回的视图字符串的前面添加redirect:,则可实现重定向跳转。
处理器方法定义:
异常处理
SpringMVC 框架处理异常的常用方式:使用@ExceptionHandler 注解处理异常。
@ExceptionHandler 注解
使用注解@ExceptionHandler 可以将一个方法指定为异常处理方法。该注解只有一个可选属性value,为一个 Class<?>数组,用于指定该注解的方法所要处理的异常类,即所要匹配的异常。
而被注解的方法,其返回值可以是 ModelAndView、String,或 void,方法名随意,方法参数可以是Exception 及其子类对象、HttpServletRequest、HttpServletResponse 等。系统会自动为这些方法参数赋值。
对于异常处理注解的用法,也可以直接将异常处理方法注解于 Controller 之中。
(1)自定义异常类
定义三个异常类:NameException、AgeException、MyUserException。其中 MyUserException 是另外两个异常的父类。
(2) 修改 Controller 抛出异常
(3) 定义异常响应页面
定义三个异常响应页面。
不过,一般不这样使用。而是将异常处理方法专门定义在一个类中,作为全局的异常处理类。
需要使用注解@ControllerAdvice,字面理解就是“控制器增强”,是给控制器对象增强功能的。使用@ControllerAdvice 修饰的类中可以使用@ExceptionHandler。
当使用@RequestMapping 注解修饰的方法抛出异常时,会执行@ControllerAdvice 修饰的类中的异常处理方法。
@ControllerAdvice 是使用@Component 注解修饰的,可以context:component-scan扫描到@ControllerAdvice 所在的类路径(包名), 创建对象。
(4) 定义全局异常处理类
(5) 定义 Spring 配置文件