SpringMVC(七)重定向和转发

一、概念

springMVC请求方式分为重定向、转发,分别用redirect、forward关键字在controller层进行处理。

重定向是将用户从当前处理请求定向到另一个视图(例如JSP)或者请求,以前的请求中存放的请求request全部失效,并进入一个新的request作用域;

转发是将用户对当前处理的请求转发给另一个视图或者请求,以前的request中存放的请求不会失效。

转发是服务器行为,重定向是客户端行为。

1.1、转发过程

客户端浏览器发送http请求,web服务器接收此请求,调用内部的一个方法在容器内完成请求处理和转发动作,将目标资源发送给客户。这里的转发路径必须是同一个web容器下的URL,不能转向到其他的web路径上,中间传递的是自己容器的request。

在客户端浏览器地址栏上显示的任然是第一次访问的路径,也就是说客户端感觉不到服务器做了转发,转发行为浏览器只做了一次请求。

1.2、重定向过程

客户端浏览器发送http请求,web服务器接收后发送302状态码及新的location给客户端浏览器,客户端浏览器发现是302响应,则自动再发送一个新的http请求,请求URL是新的location地址,服务器据此查找资源并返回给浏览器。

在这里location可以重定向到任意url,既然是浏览器重新发出的请求,以前的request就不存在了。在客户端浏览器地址栏显示的是重定向路径,用户可以观察到地址栏地址的变化,重定向行为是客户端浏览器至少做了两次访问请求。

在springMVC中,控制器类中处理方法的return语句默认实现的转发,只不过实现的是转发到视图。

    @RequestMapping("/register")
    public String register(){
        return "register";
    }

二、示例

@Controller
@RequestMapping("/index")
public class IndexController {

    @RequestMapping("/login")
    public String login(){
        //转发到一个请求
        return "forward:/index/isLogin";
    }

    @RequestMapping("/isLogin")
    public String isLogin(){
        //重定向到一个请求方法
        return "redirect:/index/isRegister";
    }

    @RequestMapping("/isRegister")
    public String isRegister(){
        //转发到一个视图
        return "register";
    } 
}

在springMVC中,不管是重定向还是转发,都需要复合视图解析器配置,如果直接转发到一个不需要DispatcherServlet的资源,需要使用mvc:resources配置

return "forward:/html/my.html";
<mvc:resources location="/html/" mapping="/html/**" />

你可能感兴趣的:(Spring,MVC,java,springmvc)