SpringMVC高能笔记,springmvc请求重定向和转发

455 阅读3分钟

请求重定向和转发

当处理器对请求处理完毕后,向其它资源进行跳转时,有两种跳转方式: 请求转发与重定向。而根据所要跳转的资源类型,又可分为两类:跳转到页面与跳转到其它处理器。

注意,对于请求转发的页面,可以是WEB-INF 中页面;而重定向的页面, 是不能为WEB-INF 中页的。因为重定向相当于用户再次发出一次请求,而用户是不能直接访问WEB-INF 中资源的。

image.png

SpringMVC 框架把原来 Servlet 中的请求转发和重定向操作进行了封装。现在可以使用简单的方式实现转发和重定向。

forward:表示转发,实现request.getRequestDispatcher("xx.jsp").forward()

redirect:表示重定向,实现 response.sendRedirect("xxx.jsp")

请求转发

处理器方法返回 ModelAndView 时,需在setViewName()指定的视图前添加forward:,且此时的视图不再与视图解析器一同工作,这样可以在配置了解析器时指定不同位置的视图。视图页面必须写出相对于项目根的路径。forward 操作不需要视图解析器。

处理器方法返回String,在视图路径前面加入forward: 视图完整路径。

image.png

请求重定向

在处理器方法返回的视图字符串的前面添加redirect:,则可实现重定向跳转。

处理器方法定义:

image.png

异常处理

SpringMVC 框架处理异常的常用方式:使用@ExceptionHandler 注解处理异常。

@ExceptionHandler 注解

使用注解@ExceptionHandler 可以将一个方法指定为异常处理方法。该注解只有一个可选属性value,为一个 Class<?>数组,用于指定该注解的方法所要处理的异常类,即所要匹配的异常。

而被注解的方法,其返回值可以是 ModelAndView、String,或 void,方法名随意,方法参数可以是Exception 及其子类对象、HttpServletRequest、HttpServletResponse 等。系统会自动为这些方法参数赋值。

对于异常处理注解的用法,也可以直接将异常处理方法注解于 Controller 之中。

(1)自定义异常类

定义三个异常类:NameException、AgeException、MyUserException。其中 MyUserException 是另外两个异常的父类。

image.png

image.png

image.png

(2) 修改 Controller 抛出异常

image.png

(3) 定义异常响应页面

定义三个异常响应页面。

image.png

不过,一般不这样使用。而是将异常处理方法专门定义在一个类中,作为全局的异常处理类。

需要使用注解@ControllerAdvice,字面理解就是“控制器增强”,是给控制器对象增强功能的。使用@ControllerAdvice 修饰的类中可以使用@ExceptionHandler。

当使用@RequestMapping 注解修饰的方法抛出异常时,会执行@ControllerAdvice 修饰的类中的异常处理方法。

@ControllerAdvice 是使用@Component 注解修饰的,可以context:component-scan扫描到@ControllerAdvice 所在的类路径(包名), 创建对象。

(4) 定义全局异常处理类

image.png

(5) 定义 Spring 配置文件

image.png