springmvc请求转发和重定向问题(携带参数和不携带参数)
作者:lxcoding 时间:2022-09-17 13:53:59
请求转发的三种方式
SpringMVC请求转发区别于重定向,请求转发地址栏不会发生改变、只发送一次请求、能携带原有的参数,但只可以在同一个服务器中进行转发。
1、传统的请求转发
@RequestMapping("/forwardCommon")
public forwardCommon(HttpServletRequest request,HttpServletResponse response){
request.getServletDispatcher("/WEBINF/pages/success.jsp").forward(request,response);
}
2、SpringMVC中不经过视图解析器的请求转发
@RequestMapping("/forwardView")
public String forwardView(){
return "forward:/WEB_INF/pages/success.jsp";
}
@RequestMapping("/forwardView")
public String forwardView(){
ModelAndView mv=new ModelAndView();
mv.setViewName("forward:/WEB_INF/pages/success.jsp");
}
3、请求转发经过视图解析器
其实很多人并不知道经过视图解析器的路由转发也是请求转发
@RequestMapping("/shopmanagement")
private String shopManagement(Model model) {
return "shop/shopmanagement";
}
@RequestMapping("/shopmanagement")
private ModelAndView shopManagement(Model model) {
ModelAndView mv=new ModelAndView();
mv.setViewName("shop/shopmanagement");//也是请求转发,会经过视图解析器
return mv;
}
上面的请求转发只要在浏览器地址栏中输入localhost:8080/o2o/shopadmin/shopmanagement?shopId=53,就可以访问shopmanagement.html这个页面,并且我们可以尝试在该页面中引入一个js文件,试图查看请求转发后的地址。
$(function(){
var shopId=getQueryString("shopId");//获取url中的参数
var url=window.location.href;//获得请求url
})
function getQueryString(name){
var reg=new RegExp("(^|&)"+name+"=([^&]*)(&|$)");
var r=window.location.search.substr(1).match(reg);
if(r!=null){
return decodeURIComponent(r[2]);
}
return null;
}
我们可以发现请求转发后的地址和第一次请求的地址一样, 连地址后面携带的参数都一样。所以请求转发不仅可以在请求体中携带参数(POST请求),也可以在地址栏中携带参数(GET请求),最后都可以在转发后的页面中获得该参数的值。
重定向
传统的重定向请求地址会改变(两次请求)、不能传递参数,但是利用SpringMVC的重定向可以携带和传递参数。
重定向相比于请求转发可以跨服,但是不能直接重定向访问WEB-INF下的资源(可重定向后再进行一次请求转发)。
1、传统的重定向
@RequestMapping(value="/testredirect",method = { RequestMethod.POST, RequestMethod.GET })
public void testredirect(HttpServletResponse response){
response.sendRedirect("/index");
}
2、SpringMVC中不带参数的重定向
@RequestMapping(value="/testredirect",method = { RequestMethod.POST, RequestMethod.GET })
public String testredirect(){
return "redirect:/index";
}
@RequestMapping(value="/testredirect",method = { RequestMethod.POST, RequestMethod.GET })
public ModelAndView testredirect(){
ModelAndView mv=new ModelAndView();
mv.setViewName("redirect:/index");
return mv;
}
3、SpringMVC中带参数的重定向
redirectAttributes.addAttributie("prama",value);
这种方法相当于在重定向链接地址上追加传递的参数
@RequestMapping("/test")
private String shopList(RedirectAttributes ra) {
ra.addAttribute("param", 1);
return "redirect:/shopadmin/shoplist";
}
//相当于请求 http://localhost:8080/o2o/shopadmin/shoplist?param=1
redirectAttributes.addFlashAttributie("prama",value);
这种方法是隐藏了参数,链接地址上不直接暴露,用(@ModelAttribute(value = "prama")String prama)的方式获取参数。
@RequestMapping("/test")
private String shopList(RedirectAttributes ra) {
ra.addFlashAttribute("param", 1);
return "redirect:/shopadmin/shoplist";
}
接收参数
@RequestMapping("/shoplist")
private String shopList(@ModelAttribute("param") String param) {
System.out.println(param);//输出1
return "shop/shoplist";
}
来源:https://blog.csdn.net/Lewis_lxc/article/details/103246827
标签:springmvc,请求转发,重定向,参数
0
投稿
猜你喜欢
详解SpringMVC重定向传参数的实现
2022-09-20 19:01:02
Java关键字instanceof用法及实现策略
2023-09-23 06:05:38
Java实现单向链表的基本功能详解
2022-12-18 10:57:02
SpringBoot结合JSR303对前端数据进行校验的示例代码
2022-09-15 03:22:55
Android中SeekBar和RatingBar用法实例分析
2023-07-28 00:13:59
Jenkins节点配置实现原理及过程解析
2023-02-14 11:53:30
SpringCloud:feign对象传参和普通传参及遇到的坑解决
2023-02-17 11:18:58
Spring Boot教程之必须了解的核心概念
2022-07-15 14:17:24
Java实现求二叉树的深度和宽度
2022-01-11 18:38:41
Springboot整合Freemarker的实现详细过程
2023-01-23 22:09:57
android TextView设置中文字体加粗实现方法
2023-08-06 02:32:03
Java 常见排序算法代码分享
2023-09-30 08:23:09
java实现文件夹解压和压缩
2022-06-07 03:00:39
Java8 Stream流的常用方法汇总
2023-07-17 17:56:59
spring boot 全局异常处理方法汇总
2021-07-06 22:44:04
Spring Boot调用 Shell 脚本实现看门狗功能
2023-09-14 18:52:07
C#实现简单合并word文档的方法
2022-10-27 10:50:00
JAVA并发图解
2023-03-26 03:11:41
java实现删除某条信息并刷新当前页操作
2022-06-26 07:12:12
Java中异常处理之try和catch代码块的使用
2021-11-21 13:30:23