请求重定向原理
当客户端浏览器请求服务端的Servlet时,如果在此Servlet当中,能通过HttpServlet对象调用其sendRedirect方法(sendRedirect方法需要一个字符串型的标准url),那么服务端在为客户端产生响应时,会在响应头中添加一个键值对,键值对的key为location,value为url。
同时,响应的状态码由200变为302。当浏览器发现响应状态码为302时,会自动向location请求新资源。此时浏览器发送第二次请求,去请求location中url指定的资源。服务器请求到url资源后再重新响应回去给浏览器。于是,浏览器中展示的就是重定向后的资源。
方法
在JavaWeb中,通常使用response.sendRedirect(String location)方法用于重定向,此处写一个案例便于理解。
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 重定向响应
*/
@WebServlet(urlPatterns = "/redirect.do")
public class RedirectServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//产生重定向响应,将CSDN官网设置为重定向的location
resp.sendRedirect("https://www.csdn.net/");
}
}
运行后输入/redirect.do,回车即可进入CSDN官网,此时就完成了使用resp.sendRedirect()方法进行重定向响应的功能。
特点总结
1.重定向会产生两次请求和两次响应
2.重定向的URL是由客户端浏览器发送的
3.重定向后浏览器的地址栏会变化