面试官:SpringMVC返回视图常见的 5 种方式,你会几种?
来源:http://www.tudoupe.com时间:2022-07-24
当 http 请求被自定义的 controller 处理时,如何指定响应的页面呢?
这就是我们必须在本文中讨论的问题。
在控制器中,对页面的响应有多种方式,我们将马上解释,我们需要知道如何使用它们,以及它们之间的差异,以便我们更灵活地使用它们。
本文用到的页面都以 jsp 为例,其他页面模板技术,比如 freemarker、velocity、thymeleaf、enjoy,这些我们后面专门再开篇讲解。
1、本文内容
- SpringMVC返回页面的3种方法和差异
- SpringMVC的双向定位和差异
2、软件版本
- idea 2020.3.3
- jdk1.8
- ≥maven3.6.1
- spring5.3.6
- apache-tomcat-9.0.46
让我们首先回顾一下在服务器小册子中对页面的响应的两种方式
SpringMVC底层是使用servlet实现的,所以让我们先回顾servlet中的响应页面是如何实现的。
servlet 中响应页面有 2 种常见的方式,而 springmvc 中通常也是依靠这 2 种方式实现的。
方式 1:转向
转向路径的地址
在服务器侧,浏览器的地址栏不会改变
3、path 指定的页面,可以共享 request 请求中的数据
路径必须是服务器端的资源
方式 2:重定向
1、location 为重定向的地址
2、重定向发生在客户端(浏览器端),所以会导致浏览器地址栏发生变化,变为 location 指定的地址
3、重定向会导致浏览器重新向服务器端发生一次请求,请求地址为 location 指定的地址
位置可以为这个服务器端提供资源,也可以在外部网络上访问任何资源,例如: http://ww.Baidu.com
下面是五种方法来响应springmvc的页面。
4、方式 1:返回 ModelAndView
需求
用户列表功能通过springmvc实现,如下面所示

如何实现?
让我们先看看如何用servlet实现它。代码如下:
这些行的关键代码很简单。
对应的 jsp(/WEB-INF/view/user/list.jsp)关键代码如下,一个循环遍历用户列表 userList
使用弹簧vc的实现
这里主要是查看列表()方法,当调用此方法时,效果与上面的servlet效果相同,它在这里在ModelAndView中使用。
ModelAndView:模型&视图
通常我们的页面是动态的,客户端看到的页面基本上是模板(视图) + 数据(数据模型),这些数据在组装后向客户端输出。
因此,为了响应客户端的请求,您需要指定两个关键信息:页面和在页面中所需的数据。
在springmvc中使用ModelAndView存储这两个信息,通过模型和View.addObject方法添加在页面中使用的数据,通过Model and View.setViewName来设置显示的页面。
modelAndView.addObject(“key”,“value”)
添加在页面中使用的数据与 request.setAttribute(key, value)相同;
Model and View.setViewName
指定需要显示的视图名称,例如jsp地址
小结
如果在页面中需要一些动态数据,那么您可以使用ModelAndView作为返回值将动态数据置入ModelAndView中。
方法2:直接返回视图名称
当页面不需要使用后端数据时,它只是显示一个页面,其中可直接使用视图的名称作为返回值,例如

方法3:指定视图分析器
存在的问题
请看上面的两个方法,然后返回视图名称在/ WEB - INF/view/.jsp结束错误。
如果项目中我们规定所有的视图都符合这种规则,即都放在/WEB-INF/view/目录中,都是 jsp 文件,那么我们可以将视图的名称是不是可以简化一下,怎么做的呢?
具体 2 个步骤。
步骤1:注册视图分析器
在springmvc配置文件中添加下列配置,以指定视图分析器。
这个 bean 会对视图的名称进行处理,有 2 个参数需要指定
前缀:查看文件前缀
查看文件末尾
最终视图的名称 = prefix+controller 中指定的 viewname+suffix
step2:调整 controller 中视图的名称
viewName 旧值viewName 新值/WEB-INF/view/user/add.jspuser/add/WEB-INF/view/user/list.jspuser/list
现在代码是不是更简单了?
7.SpringMVC实现了两种重定位方式
需求
有时候,请求之后,需要做重定向操作,比如发送删除用户信息的请求/user/del/{用户id}.do,后端处理成功之后,需重定向到用户列表页面/user/list.do
这里您需要使用重新引导的操作,并且在服务器中间的相应的代码是
springmvc 中有好几种实现,这里我们主要掌握 2 种。
方法1:返回字符串类型
在springmvc中,重新定位相对简单,并且必须重新定位视图的名称: 例如,使用下面的代码启动,处理删除用户请求,并在成功删除后重新定位到用户列表页
方式 2:返回 ModelAndView 类型
如果我们需要重新定位页面以载入参数,我们通常可以这样做,代码如下:
比如
如果遇到这个请求,则根据上面的拼写,可用的参数会减少。
springmv提供了更简单的方法,代码如下: 最后,springmv指定将添加到ModelAndView的数据,并将其汇集到重新定位的url中
8、案例代码

案例说明
在此情况下,用户信息的添加和删除是实现的,并使用所有上述技术。
用户列表页
http://localhost:8080/chat05/user/list.do

新增用户页面
http://localhost:8080/chat05/user/add.do

修改用户信息页面

删除用户信息
删除用户信息后,它被重新分配到用户列表页面,在该情况下列出了两个删除,以模拟两个重新分配的效果。

9、总结
- 通常有两种响应页面的方法:第一个方法返回ModelAndView,更适合需要数据向后传递的页面;第二个方法直接返回视图的名称,更适合不需要数据向后传递的页面。
- springmvc 容器中配置 InternalResourceViewResolver 视图解析器,用来简化 controller 中视图的名称
- 掌握重新的 2 种方式,重定向的关键点是视图名称要以redirect:开头,这样 springmvc 才知道你需要 springmvc 来帮你执行重定向操作。
相关新闻
- 2023-04-16 2台电脑怎么共享(2台电脑怎么共享
- 2023-04-16 主板检测卡代码(电脑主板检测卡代
- 2023-04-16 dnf未响应(dnf未响应老是上不去)
- 2023-04-16 ppoe(pppoe拨号上网)
- 2023-04-16 网速不稳定(网速不稳定是路由器的
- 2023-04-16 wds状态(Wds状态成功)
- 2023-04-16 光标键(光标键不动了怎么办)
- 2023-04-16 电脑提速(电脑提速100倍的方法)
- 2023-04-16 切换用户(切换用户怎么切换回来
- 2023-04-16 数据包是什么(产品数据包是什么
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
