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;
}

springmvc请求转发和重定向问题(携带参数和不携带参数)

我们可以发现请求转发后的地址和第一次请求的地址一样, 连地址后面携带的参数都一样。所以请求转发不仅可以在请求体中携带参数(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
  • asp之家 软件编程 m.aspxhome.com