在开发中会经常用到客户端访问一个服务器地址,服务器内部将请求做了一个重定向,从而访问到另一个页面。
重定向流程
- 浏览器发送一个请求到服务器,服务端做了一次响应,响应头包含字段"location"对应的重定向地址。
- 浏览器内部会自动再次发送请求,访问重定向地址。
重定向特点
- 完成整个流程 浏览器发送了两次请求。
- 冲定向浏览器地址会变成重定向地址。
- 重定向可以跨域访问。
重定向示例
创建两个Servlet, locationServlet 、Location2与之对应的<url-pattern>分别是 location、location。
在locationServlet写入一下代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
/**
* 重定向
* 流程:
* 当浏览器请求服务器的时候 如果设置了重定向的链接地址 浏览器会自动再次发送请求到响应的重定向定制
*/
// 1. 重定向必须设置状态码为302 如果只设置 "location"没有作用
response.setStatus(302);
// 2. 注意重定向 跳转本项目的Servlet的路径写法 /项目名/servlet的url-pattern
response.setHeader("location", "/locationProj/location2");
}
当了浏览器访问/location 就会再次发送请求访问本项目的重定向的Servlet。
从上面可以看出,重定向需要两个步骤。比较繁琐。但是Respose已经帮我们做了封装。提供了sendRedirect
方法,来实现重定向。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
// 以上设置重定向比较麻烦 需要两个步骤 response内部已经帮我们封装好了
response.sendRedirect("/day10/location2");
}
网友评论