【你不知道的那些事】SpringMVC之请求转发与重定向以及视图与数据的返回
正文:
什么是请求转发和重定向呢?
请求转发(forward):是一种服务器端的行为,当客户端请求发送到服务器后,服务器进行转发,此时会将请求对象进行保存,地址栏中的 URL 不会改变,得到响应后,服务器端再将响应发送给客户端,这个过程中只有一个请求发出。
重定向(redirect):是一种客户端的行为,重定向之后地址栏上的地址栏中的URL会发生变化,变化成第二次请求的地址,这个过程中向服务器端发送了两次请求。
SpringMVC怎么进行请求转发和重定向呢?
返回值是String类型:
-
forward请求转发:
//请求路径 @RequestMapping(value = "testforward") public String testForward() { // 业务代码 System.out.println("testForward被执行了"); // 请求转发到/WEB-INF/pages/目录下的forward.jsp页面 return "forward:/WEB-INF/pages/forward.jsp"; }
2.redirect重定向:
//请求路径
@RequestMapping(value = "testredirect")
public String testRedirect() {
// 业务代码
System.out.println("testRedirect被执行了");
// 请求转发到/webapp/目录下的redirect.jsp页面
return "redirect:/redirect.jsp";
}
注意:这两种方式的放回值都是String类型。在重定向中,重定向的页面不能放置在WEB-INF目录下,否则会访问不到。
3.返回视图:
//请求路径
@RequestMapping(value = "view")
public String testView() {
// 业务代码
System.out.println("testView被执行了");
// 根据视图解析器,将视图解析到/WEB-INF/page/view.jsp
return "view";
}
这个在我的上个博客中有详细的说明,感兴趣的小伙伴可以看看:传送门
返回值是ModelAndView:
ModelAndView 是 SpringMVC 为我们提供的一个对象,该对象可以用作控制器方法的返回值,也可以用来调整具体的JSP视图 。
ModelAndView里给我们提供了两个常用的方法:
setViewName(@Nullable String viewName)
addObject(String attributeName, @Nullable Object attributeValue)
setViewName(“视图名称”),这个用法类似于上面放回String类型的第三点返回视图,只要在括号内部写视图对应的名称,会结果视图解析器,解析到对应的页面。
addObject(“key”, “value”),这个方法可以让我们添加模型到该对象,我们在页面上可以用EL表达式对它进行获取。用法类似于request.setAttribute();
//请求路径
@RequestMapping(value = "view")
public ModelAndView testModelAndView() {
// 初始化视图对象
ModelAndView mv = new ModelAndView();
// 添加模型
mv.addObject("name", "zhangsan");
// 添加视图
mv.setViewName("viewpage");
// 返回视图对象
return mv;
}
数据使用EL表达式获取
${name}
返回值是void:
1、请求转发:
//请求路径
@RequestMapping(value = "void")
public void testVoid(HttpServletRequest request, HttpServletResponse response){
// 业务代码
System.out.println("testVoid被执行了");
// 请求转发
request.getRequestDispatcher("/WEB-INF/pages/forward.jsp").forward(request, response);
}
2、重定向:
//请求路径
@RequestMapping(value = "void")
public void testVoid(HttpServletRequest request, HttpServletResponse response){
// 业务代码
System.out.println("testVoid被执行了");
// 重定向
response.sendRedirect(request.getContextPath()+ "/redirect.jsp");
}
总结:
在SpringMVC中给我们提供了ModelAndView对象,使我们对数据操作变得简单。
还是那句话:Spring真香!
点关注,不迷路
如果你觉得好看,对你有帮助,请给博zhu点点大拇指。你的支持是对我最大的肯定,也是我不懈努力的动力。
感觉我还有什么地方写的不足,需要修改的地方,请在评论区留言。关注,即可提高学习效率,让我们一起努力!