SpringMVC 重定向和转发
# SpringMVC 重定向和转发
Spring MVC 请求方式 分为:转发、重定向 2种。在Servlet中 请求方式处理都是在 controller层 !!!
转发
客户浏览器发送 http 请求,在内部方法中完成请求处理和转发动作。在这里转发的路径必须是同一个 Web 容器下的 URL,其不能转向到其他的 Web 路径上,中间传递的是自己的容器内的 request
重定向
客户浏览器发送 http 请求,Web 服务器接受后发送 302 状态码响应及对应新的 URL地址 给客户浏览器,客户浏览器发现是 302 响应,则自动再发送一个新的 http 请求,请求 URL 是新的地址,服务器根据此请求寻找资源并发送给客户
重定向与转发的区别
重定向 会改变地址,requset存储的数据会丢失
转发 时地址会显示请求页面的地址,保存了页面的数据
重定向 两次请求 两次响应
转发 一次请求 一次响应
# 应用测试
应用前提&说明
NavigationController类 控制器
@Controller
@RequestMapping ("/navigation")
public class NavigationController {
····
}
navigationTest.jsp文件响应形式
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>navigationTest</title>
</head>
<body>
<h1> 跳转 & 重定向 测试</h1>
<h2>参数测试</h2>
<h3>requestScope 作用域</h3>
<div>
<span>id: ${requestScope.id}</span> <br>
<span>name: ${requestScope.name}</span>
</div>
<h3>pageScope 作用域</h3>
<div>
<span>id: ${pageScope.id}</span> <br>
<span>name: ${pageScope.name}</span>
</div>
<h3>sessionScope 作用域</h3>
<div>
<span>id: ${sessionScope.id}</span> <br>
<span>name: ${sessionScope.name}</span>
</div>
</body>
</html>
# 转发
/**
* String 形式转发
* 应用前提:前缀 需要 forward关键字
*/
@RequestMapping("forwardString")
public String forwardString(HttpServletRequest request) {
request.setAttribute("id" , 1);
request.setAttribute("name" , "柏竹");
//return "jsp/navigationTest.jsp"
return "forward:/jsp/navigationTest.jsp";
}
/**
* ModelAndView 形式转发
* 应用前提:前缀 需要 forward关键字
*/
@RequestMapping("forwardMAV")
public ModelAndView forwardMAV(){
ModelAndView mv = new ModelAndView();
mv.addObject("id",2);
mv.addObject("name","智乃");
mv.setViewName("forward:/jsp/navigationTest.jsp");
return mv;
}
/**
* String 形式转发 控制器
*/
@RequestMapping("forwardString2")
public String forwardString2(HttpServletRequest request) {
request.setAttribute("id" , 6);
request.setAttribute("name" , "纱雾");
return "forward:/navigation/forwardString";
}
/**
* ModelAndView 形式转发 控制器
*/
@RequestMapping("forwardMAV2")
public ModelAndView forwardMAV2(){
ModelAndView mv = new ModelAndView();
mv.addObject("id",7);
mv.addObject("name","琪露诺");
mv.setViewName("forward:/navigation/forwardMAV");
return mv;
}
# 重定向
/**
* String 重定向
*/
@RequestMapping("redirectString")
public String redirectString(HttpServletRequest request) {
request.setAttribute("id",4);
request.setAttribute("name","黑猫");
return "redirect:/jsp/navigationTest.jsp";
}
/**
* ModelAndView 重定向
*/
@RequestMapping("redirectMAV")
public ModelAndView redirectMAV() {
ModelAndView mv = new ModelAndView();
mv.addObject("id",5);
mv.addObject("name","蕾姆");
mv.setViewName("redirect:/jsp/navigationTest.jsp");
return mv;
}
//重定向 控制器
/**
* String 控制器重定向
*/
@RequestMapping("redirectString2")
public String redirectString2(HttpServletRequest request) {
request.setAttribute("id",8);
request.setAttribute("name","香子兰");
return "redirect:/navigation/redirectString";
}
/**
* ModelAndView 控制器重定向
*/
@RequestMapping("redirectMAV2")
public ModelAndView redirectMAV2() {
ModelAndView mv = new ModelAndView();
mv.addObject("id",9);
mv.addObject("name","黑子");
mv.setViewName("redirect:/navigation/redirectMAV");
return mv;
}
上次更新: 2023/03/12, 00:43:49