目录

 

先来回顾一下,Servlet API中forward() 与redirect()的区别 :

spring MVC中的请求转发与重定向:

视图解析器 

基于返回mv对象

1:请求转发到jsp(默认的)

2:请求转发到controller(必须用forward) 

3:重定向到controller 

4:重定向到jsp 

基于返回字符串


我喜欢先放结论,如果能理解了,那么就可以简单过一遍这篇文章!!  忘了在哪看过下面这句话,

重定向让浏览器完成工作,而请求转发让服务器完成工作,这就是重定向与请求转发之间最大的区别!

我在写期末作业时,做了一个SSM的图书管理系统,由于第一次写,所以就把用到的总结一下,我在写admin管理员界面时,只要是从数据库查询信息的界面,就把数据(类似:ArrayList<Book> )放到ModelAndView里,然后返回相应的jsp页面;

而涉及到对数据库的增删改操作,就用重定向,因为, redirectAttributes.addFlashAttribute("succ", "图书借阅成功!");

这个操作;我的理解:当我的前端jsp页面请求lendbook.html这个url时,到对应Controller层方法中执行相应操作,该方法中redirectAttributes.addFlashAttribute("succ", "图书借阅成功!");通过这句话把相应的消息暂存在session的消息体中,然后返回前端页面,前端页面通过el表达式即可取出该消息并显示,然后重定向到相应的Controller方法(此时,session中的该消息已经被移除),再次返回相应页面。(看下面的图redirect即可明白)



@RequestMapping("admin_lend_books.html")
    public ModelAndView admin_lend_books(){
        return new ModelAndView("admin_lend_books");
    }
//借书  admin给reader办理图书借阅
    @RequestMapping("/lendbook.html")
    public String bookLend(HttpServletRequest request, RedirectAttributes redirectAttributes) {
        //BorrowBook(String ReaderID,String ISBN,String BookID)
        String ReaderID=request.getParameter("cardid");
        String ISBN=request.getParameter("ISBN");
        String BookID=request.getParameter("bookid");
        if (tReaderService.BorrowBook(ReaderID,ISBN,BookID)) {
            redirectAttributes.addFlashAttribute("succ", "图书借阅成功!");
        }else{
            redirectAttributes.addFlashAttribute("error", "库存量不足/您的借书量已超过5本,图书借阅失败");
        }
        return "redirect:/admin_lend_books.html";  
    }

 

 

回顾一下,Servlet API中forward() 与redirect()的区别 :

1、forward是服务器端的转向而redirect是客户端的跳转。 

2、使用forward浏览器的地址不会发生改变。而redirect会发生改变。

3、Forward是一次请求中完成。而redirect是重新发起请求。

4、Forward是在服务器端完成,而不用客户端重新发起请求,效率较高。

spring cloud gateway重定向地址_重定向

spring cloud gateway重定向地址_springMVC_02

spring MVC框架controller间跳转,需重定向。

有几种情况:

1. 不带参数跳转

2.带参数拼接url形式跳转

3.带参数不拼接参数跳转,页面也能显示

spring MVC中的请求转发与重定向:

视图解析器
 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

forward:请求转发(去前后缀)
redirect:重定向.

基于返回mv对象
 

mv.setViewName("str");

str=”forward : 路径”        请求转发到一个jsp中
str=”forward : controller的映射”  请求转发到一个controller方法中
str=”redirect: 路径”         请求转发到一个非WEB-INF的jsp

常用:

str=”redirect : controller的映射”  重定向到一个controller方法中
str=”XXX”            根据前后缀,请求转发到 前缀/XXX.后缀

1:请求转发到jsp(默认的)

@RequestMapping("/method1")
    public ModelAndView method1(HttpServletRequest req,ModelAndView mv) throws Exception{
        //请求转发到/WEB-INF/view/main.jsp
        mv.setViewName("main");  //默认加入前后缀
        return mv;
    }

    //访问非视图解析器的视图时,用forward
    @RequestMapping("/method3")
    public ModelAndView method3(HttpServletRequest req,ModelAndView mv) throws Exception{
        mv.setViewName("forward:WEB-INF/view/main.jsp");  //不添加前后缀
        return mv;
    }


2:请求转发到controller(必须用forward)
 

@RequestMapping("/method4")
    public ModelAndView method4(HttpServletRequest req,ModelAndView mv) throws Exception{
        mv.setViewName("forward:method1");  
        return mv;
    }


3:重定向到controller
 

@RequestMapping("/method5")
    public ModelAndView method5(HttpServletRequest req,ModelAndView mv) throws Exception{
        mv.setViewName("redirect:method3");  
        return mv;
    }


4:重定向到jsp
 

@RequestMapping("/method5")
    public ModelAndView method5(HttpServletRequest req,ModelAndView mv) throws Exception{
        mv.setViewName("redirect:index.jsp");  
        return mv;
    }

基于返回字符串

由于返回是字符串,所以ModelAndView的设置将没有作用,要用req来传送值

str=”forward : 路径”        请求转发到一个jsp中
str=”forward : controller的映射”  请求转发到一个controller方法中
str=”redirect: 路径”         请求转发到一个非WEB-INF的jsp

常用:

str=”redirect : controller的映射”  重定向到一个controller方法中
str=”XXX”            根据前后缀,请求转发到 前缀/XXX.后缀

 

@RequestMapping("method1")
    public String method1() throws Exception{
        return "redirect:method2";
    }

    @RequestMapping("method2")
    public String method2() throws Exception{
        return "forward:WEB-INF/view/main.jsp";
    }