200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > SpringMVC重定向与请求转发

SpringMVC重定向与请求转发

时间:2024-07-29 16:48:39

相关推荐

SpringMVC重定向与请求转发

SpringMVC重定向与请求转发

一,请求转发

①请求转发地址栏不会发生改变②请求转发只发送一次请求、能携带原有的参数③请求转发只可以在同一个服务器中进行转发④实际上视图解析器的转发本质也是请求转发

SpringMVC中请求转发有三种方式:

Ⅰ,原生Selvlet请求转发:

@RequestMapping("/forward")public void toXXX(HttpServletRequest request,HttpServletResponse response){try {request.getRequestDispatcher("//WEB-INF/pages/test.jsp").forward(request,response);} catch (ServletException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}

Ⅱ,使用视图解析器

@RequestMapping("/forward")public ModelAndView toXXX(ModelAndView modelAndView){modelAndView.setViewName("test");return modelAndView;}@RequestMapping("/forward2")public String toXXX2(){return "test";}

Ⅲ,不使用视图解析器

@RequestMapping("/forward")public String toXXX(){return "forward:/WEB-INF/templates/test.jsp" ;}@RequestMapping("/forward2")public ModelAndView toXXX2(){ModelAndView modelAndView1 = new ModelAndView();modelAndView1.setViewName("forward:/WEB-INF/templates/test.jsp");return modelAndView1;}

二,重定向

重定向是两次请求、两次响应重定向前后,浏览器的地址栏地址会发生变化。(因为两次请求都是通过浏览器发起,浏览器知道这个跳转的过程,因此地址栏地址会变化)重定向前后的request对象不是同一个(因为重定向是两次请求,服务器会根据两次请求创建两个不同的request对象,request对象不是同一个,也就不能在重定向时通过request带数据到目的地。)重定向前后的两个资源可以是来自不同的web应用,甚至可以是来自不同的服务器。(进行跳转的两个资源之间没有限制)

Ⅰ,原生Servlet实现重定向

@RequestMapping(value="/testredirect")public void doRedirect(HttpServletResponse response){try {response.sendRedirect("/index");} catch (IOException e) {e.printStackTrace();}}

Ⅱ,SpringMVC整合后的不带参数的重定向

@RequestMapping(value="/testredirect")public String doRedirect(){return "redirect:/index";}@RequestMapping(value="/testredirect")public ModelAndView doRedirect2(){ModelAndView mv=new ModelAndView();mv.setViewName("redirect:/index");return mv;}

Ⅲ,SpringMVC整合后的带参数的重定向

-redirectAttributes.addAttributie(“prama”,value); 在重定向url上拼接参数

@RequestMapping("/test")private String doTest(RedirectAttributes ra) {ra.addAttribute("param", 1);return "redirect:/templates/test";}

-rectAttributes.addFlashAttributie(“prama”,value);这种方法不在url上拼接,可以使用@ModelAttribute注解接受。

@RequestMapping("/test")private String doTest(RedirectAttributes ra) {ra.addFlashAttribute("param", 1);return "redirect:/templates/test";}接受参数@RequestMapping("/test")private void doTest(@ModelAttribute("param") String param) {}

三,关于重定向带参数,是否隐藏问题

使用addAttribute方法传参,参数会自动拼接在URL后面。使用addFlashAttribute方法会把参数值暂存于session,待重定向URL获取该参数后从session中移除,这里的redirect必须是方法映射路径,jsp无效。重定向后参数值只会出现一次,刷新页面后不再出现。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。