当 http 请求被自定义的 controller 处理时,如何指定响应的页面呢?
这个就是我们本文需要讨论的问题。
在 controller 中响应页面有很多种方式,稍后我们会一一介绍,大家需要掌握每种方式的用法以及这些方式之间的区别,以后能够灵活使用。
本文用到的页面都以 jsp 为例,其他页面模板技术,比如 freemarker、velocity、thymeleaf、enjoy,这些我们后面专门再开篇讲解。
1、本文内容
- SpringMVC 返回页面的3种方式及区别
- SpringMVC 重定向的2种方式及区别
2、软件版本
- idea 2020.3.3
- jdk1.8
- ≥maven3.6.1
- spring5.3.6
- apache-tomcat-9.0.46
3、先来回顾下 servlet 中响应页面的 2 种方式
SpringMVC 底层是依靠 servlet 来实现的,所以我们先回顾下 servlet 中响应页面是如何实现的。
servlet 中响应页面有 2 种常见的方式,而 springmvc 中通常也是依靠这 2 种方式实现的。
方式 1:转向
request.getRequestDispatcher(path).forward(request,response);
1、path 为转向的地址
2、发生在服务器端,浏览器的地址栏不会发生变化
3、path 指定的页面,可以共享 request 请求中的数据
4、path 必须是服务器端的资源
方式 2:重定向
response.sendRedirect(location);
1、location 为重定向的地址
2、重定向发生在客户端(浏览器端),所以会导致浏览器地址栏发生变化,变为 location 指定的地址
3、重定向会导致浏览器重新向服务器端发生一次请求,请求地址为 location 指定的地址
4、location 可以为本服务器端的资源,也可以为外网可以访问的任意资源,比如:http://www.baidu.com
下面来详解 springmvc 中响应页面的 5 种方式。
4、方式 1:返回 ModelAndView
需求
通过 springmvc 实现用户列表功能,如下图
如何实现?
我们先来看一下如果用 servlet 是如何实现的,代码如下:
1、List<UserDto> userList = new ArrayList();2、request.setAttribute("userList",userList);3、request.getRequestD