springmvc重定向传值,springmvc实现重定向

  springmvc重定向传值,springmvc实现重定向

  00-1010,重定向时携带参数。1.添加属性2。添加FlashAttributeredirect重定向3路(带参数)。重定向重定向过程1。response.sendRedirect重定向重定向跳转2。ViewResolver直接跳转。3.ModelAndView重定向

  00-1010重定向是Spring MVC中常用的实现重定向的方法。但是,每个使用场景都有自己的要求。如果只是简单的页面跳转,显然不能满足所有要求。例如,重定向时,需要拼接url中的参数,或者返回的页面需要传递模型。SpringMVC用RedirectAttributes解决了这两个需求。

  首先,重定向在控制器中可以通过以下方式实现:

  返回新的modeland view(" redirect :/index ");或者

  返回“redirect :/index”;此时,如果只重定向到一个URL或者一个简单的地址,可以直接拼接,不需要RedirectAttributes,比如返回“redirect :/index?”param1=value1 ";

  但这似乎有点太简单粗暴了,参数太多很容易让代码可读性差。使用RedirectAttributes设置重定向页面的参数,SpringMVC会自动拼接url。

  接下来,我们主要介绍这个对象的两个方法:

  

目录

@RequestMapping(/save )公共字符串save(User user,redirect attributes redirect attributes){ redirect attributes . add attribute( param , value 1 );返回“redirect :/index”;}请求/保存后跳转到/index,会在url处拼接?param=value1 .

 

  

在redirect重定向的时候携带参数问题

@RequestMapping(/save )公共字符串save(User user,redirect attributes redirect attributes){ redirect attributes . addflashattribute( param , value 1 );返回“redirect :/index”;}请求/save后跳转到/index,可以通过index对应的模板中的一个表达式得到返回值,比如jsp中的jstl使用${param}。该值实际上保存在会话中,并将在下次重定向请求时被删除。

 

  这是对RedirectAttributes中两种方法的简单介绍。

  00-1010在Spring MVC中提交表单form函数时,需要在服务器端进行重定向和跳转,防止用户的客户端在后退或刷新时重复提交,其中重定向就是直接跳转到其他页面。重定向有以下三种方式。

  00-1010客户向服务器发送请求,服务器匹配servlet,与请求转发相同。servlet完成处理后,它调用sendRedirect()方法,这是响应方法。因此,当servlet完成处理时,它会看到response.senRedirect()方法,并立即将该响应返回给客户机。响应行告诉客户端,您必须发送另一个访问test.jsp的请求。客户端收到这个请求后,会立即发送一个新的请求来请求test.jsp。在这里,这两个请求互不干扰,相互独立。前一个请求中setAttribute()的任何东西都不能在后续的请求中获得。可以看到,sendRedirect()中有两个请求和两个响应。

  

1. addAttribute

@ request mapping(value=/test redirect ,method={ RequestMethod。POST,RequestMethod。GET }) public ModelAndView testr

 

  edirect(HttpServletResponse response){      response.sendRedirect("/index");    return null; }

 

  

2. ViewResolver直接跳转

不带参数

 

  

@RequestMapping(value="/testredirect",method = { RequestMethod.POST, RequestMethod.GET })  public  String testredirect(HttpServletResponse response){      return "redirect:/index";  }

带参数

 

  

@RequestMapping("/testredirect")public String testredirect(Model model, RedirectAttributes attr) {    attr.addAttribute("test", "51gjie");//跳转地址带上test参数    attr.addFlashAttribute("u2", "51gjie");//跳转地址不带上u2参数    return "redirect:/user/users";}

使用RedirectAttributes的addAttribute方法传递参数会跟随在URL后面,如上代码即为http:/index.action?test=51gjie

 

  使用addFlashAttribute不会跟随在URL后面,会把该参数值暂时保存于session,待重定向url获取该参数后从session中移除,这里的redirect必须是方法映射路径,jsp无效。你会发现redirect后的jsp页面中b只会出现一次,刷新后b再也不会出现了,这验证了上面说的,b被访问后就会从session中移除。对于重复提交可以使用此来完成.

  spring mvc设置下RequestMappingHandlerAdapter 的ignoreDefaultModelOnRedirect=true,这样可以提高效率,避免不必要的检索。

  

 

  

3. ModelAndView重定向

不带参数

 

  

@RequestMapping(value="/restredirect",method = { RequestMethod.POST, RequestMethod.GET })  public  ModelAndView restredirect(String userName){      ModelAndView  model = new ModelAndView("redirect:/main/index");        return model;  }

带参数

 

  

@RequestMapping(value="/toredirect",method = { RequestMethod.POST, RequestMethod.GET })  public  ModelAndView toredirect(String userName){      ModelAndView  model = new ModelAndView("/main/index");       model.addObject("userName", userName);  //把userName参数带入到controller的RedirectAttributes    return model;  }

小结一下:

 

  1.redirect重定向可以跳转到任意服务器,可以用在系统间的跳转。

  2.Spring MVC中redirect重定向,参数传递可以直接拼接url也可以使用RedirectAttributes来处理,由于是不同的请求,重定向传递的参数会在地址栏显示,所以传递时要对中文编码进行处理。

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

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: