springmvc请求转发和重定向问题(携带参数和不携带参数)
作者:lxcoding 发布时间:2022-09-17 13:53:59
标签:springmvc,请求转发,重定向,参数
请求转发的三种方式
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


猜你喜欢
- 调用微信接口前需要准备的内容。1.微信公众平台的appid2.微信公众平台的secret3..获取tokenid4.获取ticket5.生成
- 一、表创建一、表创建//创建一个空表DataTable dt = new DataTable();//创建一个名为"Table_N
- 一)URL代理请求 该方式请求有两种代理方式。方式一:使用该方式代理之后,之后的所有接口都会使用代理请求// 对http开启全局代理Syst
- 前言: 哲学老师说,看待事物无非是了解它是什么,为什么,怎么做所以,首先,我们先了解一下什么是“内存泄漏”摘自百度的一段话:用动态存储分配函
- 本文实例讲述了C#中异步回调函数用法。分享给大家供大家参考。具体如下:static void Main(string[] args){ Fu
- 在Android中,用string-array是一种简单的提取XML资源文件数据的方法。例子如下:把相应的数据放到values文件夹的arr
- 前言LayoutInflater在开发中使用频率很高,但是一直没有太知道LayoutInflater.from(context).infla
- 前言在《C# wpf Canvas中实现控件动态调整大小》中我们实现了Canvas中的控件动态调整大小,由于Grid也是可层叠布局,在Gri
- 目录1 创建 xml 动画文件2 加载使用3 聊一聊 AnimationDrawable3.1 使用 ViewTreeObserver3.2
- 自定义注解+springAop参数非空校验自定义注解,来对对应的方法进行入参校验,为空返回参数错误新建注解类@interface Param
- 开发中经常需要将某个文件向另一个应用程序传递,如图片上传到另一个应用程序、文件在不同存储路径之间的复制粘贴等都需要共享文件,可以这样理解接收
- Web控件DropDownList和WinForm控件ComboBox机制不一样。ComboBox没有对应的ListItem需要自己写一个:
- 本文实例讲述了Android实现捕获TextView超链接的方法。分享给大家供大家参考,具体如下:这里分享一篇捕获TextView超链接的文
- 本文实例为大家分享了Java实现简单抽牌游戏的具体代码,供大家参考,具体内容如下Main类package com.company;impor
- 在平常工作中我们经常会遇到maven引用的jar包冲突的事情,这时候我们就需要找出冲突的包,并将低版本或者缺少某些方法的jar给剔除掉。这个
- 要求: * 对用户输入的每个字符的值进行加密,将解密后的字符串输出 * 对用户输入的已加密字符串进行解密并
- /// <summary>/// 应用程序的主入口点。/// </summary>[STAThread]static
- 猜数字游戏你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜
- 利用Javaweb开发的一个校园服务系统,通过发布自己的任务并设置悬赏金额,有些类似于赏金猎人,在这里分享给大家,有需要可以联系我:2186
- 最近JAVA和JSwing上手练习了一下贪吃蛇,供大家参考,具体内容如下欢迎交流和加入新的内容用到了JSwing,下面是一些具体的思路实现&