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

目录
  • 请求转发的三种方式
    • 1、传统的请求转发
    • 2、SpringMVC中不经过视图解析器的请求转发
    • 3、请求转发经过视图解析器
  • 重定向
    • 1、传统的重定向
    • 2、SpringMVC中不带参数的重定向
    • 3、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";
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 简单谈谈SpringMVC转发和重定向的区别

    在servlet中,转发和重定向是由request和response完成的.两者之间的区别请看我之前的文章.那么在springMVC中是如何完成的呢? /**转发**/ @RequestMapping("/login.do") public String login(HttpServletRequest request,HttpServletResponse response){ request.setAttribute("message", "hello

  • SpringMVC中转发与重定向的区别浅析

    转发和重定向 相同点 都是web开发中资源跳转的方式. 不同点 转发:是服务器内部的跳转,浏览器的地址栏不会发生变化.从一个页面到另一个页面的跳转还是同一个请求,也即是只有一个请求响应.可以通过request域来传递对象. 重定向:是浏览器自动发起对跳转目标的请求,浏览器的地址栏会发生变化.从一个页面到另一个页面的跳转是不同的请求,也即是有两个或两个以上的不同的请求的响应.无法通过request域来传递对象. 在SpringMVC中实现转发和重定向 (1)在SpringMVC中仍然以传统方式进行

  • 详解spring mvc 请求转发和重定向

    请求重定向与请求转发的比较,HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有很大的区别. 1.RequestDispatcher.forward方法只能将请求转发给同一个Web应用中的组件,HttpServletResponse.sendRedirect不仅可以重定向到当前应用程序的其他资源,还可以重定向到同一个站点上的其他应用程序的资源,甚至是使用绝对

  • 一文彻底吃透SpringMVC中的转发和重定向

    目录 项目案例(共用资源) 1.请求转发到其他页面 2.请求转发到其他控制器 3.返回 String 时的请求转发 4.返回 void 时的请求转发 5.请求重定向到其他页面 [1]通过 ModelAndView 中的 Model 携带参数 [2]使用 HttpSession 携带参数 6.请求重定向到其他控制器 [1]通过 ModelAndView 的 Model 携带参数 [2]使用 HttpSession 携带参数 7.返回 String 时的重定向 8.返回 void 时的重定向 总结

  • 详细聊聊Spring MVC重定向与转发

    目录 重定向和转发 常用处理方式 String 重定向 ModelAndView 重定向 RedirectView 重定向 带参跳转 redirect 和 forward 的区别 附:请求转发与重定向的区别图例 总结 重定向和转发 重定向经过客户端,而转发没有,因此相对来说转发更快速.但有时采用重定向更方便,如: 重定向到外部网站: 避免用户重新加载页面时再次调用同样的动作. return "redirect:/view/"+saveUser.getId(); 这里使用重定向来防止当前

  • SpringMVC视图转发重定向区别及控制器示例详解

    目录 SpringMVC视图 一.ThymeleafView 二.转发视图 三.重定向视图 四.转发和重定向区别 五.视图控制器 view-controller SpringMVC视图 SpringMVC 中的视图是 View 接口,视图的作用是渲染数据,将模型 Model 中的数据展示给用户. 视图的种类很多,默认有:转发视图和重定向视图. 若使用的视图技术为 Thymeleaf,在 SpringMVC 的配置文件中配置了 Thymeleaf 的视图解析器,由此视图解析器解析之后所得到的是 T

  • Springmvc中的转发重定向和拦截器的示例

    本文介绍了Springmvc中的转发重定向和拦截器的示例,分享给大家,具体如下: 可变参数在设计方法时,使用 数据类型... 来声明参数类型,例如: public static void function(int... numbers) 在实现方法体时,可变参数是作为数组来处理 public class Test{ public static void main(String[] args){ System.out.println(Test.sum(1,2,3)); System.out.pri

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

    目录 请求转发的三种方式 1.传统的请求转发 2.SpringMVC中不经过视图解析器的请求转发 3.请求转发经过视图解析器 重定向 1.传统的重定向 2.SpringMVC中不带参数的重定向 3.SpringMVC中带参数的重定向 请求转发的三种方式 SpringMVC请求转发区别于重定向,请求转发地址栏不会发生改变.只发送一次请求.能携带原有的参数,但只可以在同一个服务器中进行转发. 1.传统的请求转发 @RequestMapping("/forwardCommon") publi

  • Javaweb请求转发及重定向实现详解

    请求转发:在同一个controller将请求转发到另一个请求映射,请求地址不会发生改变 //请求转发 @RequestMapping("/testFoeward") //@ResponseBody public String testforWard1() { System.out.println("testforWard1执行了"); return"forward:/test";// 请求转发到/test } @RequestMapping(&q

  • 使用springboot跳转到指定页面和(重定向,请求转发的实例)

    目录 springboot跳转到指定页面 controller的写法 springboot重定向和请求转发 springboot重定向 springboot的请求转发 springboot转发和重定向 springmvc重定向写法 转发的特点 重定向的特点 springboot跳转到指定页面 controller的写法 必须是templates下面的页面,不经过配置,无法直接跳转到public,static,等目录下的页面 package com.ljf.spring.boot.demo.con

  • 请求转发jsp页面乱码问题的快速解决方法

    •在最近的项目中 使用了jsp+servlet来开发项目,但是由于后台的不太熟练 导致了困难重重.所幸 学习能力还可以 一边做一遍学吧. •今天的问题:请求转发后页面的乱码问题 •由于特殊原因--图片上传的form表单无法通过ajax提交 因此必须使用form表单直接提交.但是这样会导致一个问题:前后台交互的时候效果不好.为什么效果不好?这里说的不是功能的问题.作为web开发者,客户的体验我们要放在第一位.因此,我们必须将对客户的信息反馈放在一个比较重要的地位.说白了,就是上传个图片成没成功?我

  • SpringMVC请求参数的使用总结

    本次数据请求使用postman, postman下载地址:https://www.getpostman.com/ 一.页面跳转 1. 页面跳转 @Controller public class IndexController { /** * 进入首页 * * @return 首页页面 */ @RequestMapping("/") public String index(){ return "/index"; } } 2. 请求转发 @Controller publ

  • JavaWeb中请求转发和请求重定向的区别以及使用

    什么是请求转发? 请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作. 请求转发的特点 1.浏览器地址栏不会发生变化 2.他们一次请求,服务器完成转发操作 3.共享Request域中的数据 4.可以转发到WEB-INF目录下 5.不可以访问工程以外的资源 举个例子: 1.一个公司有多个部门,其中部门1(Servlet1)向客户提供了自己能够提供的服务,但是还有一部分服务自己提供不了,需要其他部门的服务: 2.所以部门1(Servlet1)将客户的文件盖一个章,证明部门1已经提供了服

随机推荐