URL 重定向,也称为 URL 转发,是一种当实际资源,如单个页面、表单或者整个 Web 应用被迁移到新的 URL 下的时候,保持(原有)链接可用的技术。HTTP 协议提供了一种特殊形式的响应—— HTTP 重定向(HTTP redirects)来执行此类操作。
简单理解,重定向是指一个Web资源接收到客户端请求后,这个Web资源通知客户端去访问另外一个Web资源,客服端一共会发送2次Http请求。大概的流程如下
使用
HttpServletResponse可以使用2种方法进行重定向。
方法一:使用sendRedirect(String s)来进行重定向,直接输入重定向的url即可方法二:先设置http响应的状态码,setStatus(int i),设置状态码为302,然后再设置响应头中的location。setHeader(String s, String s1);
例如,下面的2种方式都是一样的,当访问这个Servlet时重定向到百度界面
response.setStatus(302);
response.setHeader("location","https://www.baidu.com");
response.sendRedirect("https://www.baidu.com");
上面是重定向到当前Web项目外的资源,如果要重定向到当前Web项目下的资源,那么在重定向的地方直接写入想要重定向的URI就行了。例如我们有一个Servlet的映射是/hello,那么要重定向到这个资源我们就需要写sendRedirect(自己配置的应用上下文+"/hello") ,例如我们Tomcat配置的应用上下文是/servlet,那么我们就需要写成sendRedirect("/servlet/hello");
response.sendRedirect("/servlet/hello");
通过 ServletContext可以动态的获取到我们配置的应用上下文,于是我们重定向的地址就可以这样写。
response.sendRedirect(getServletContext().getContextPath()+"/hello");
如果我们以后要重定向到某个Servlet,那么像上面这样写就行了。
注意事项
我们使用重定向,一共发送了2次http请求,游览器地址栏会发生变化不像请求转发那行可以共享Request,因为重定向会生成新的HttpServletRequest不能重定向到WEB-INF下的资源,因为Tomcat会进行拦截可以重定向到当前Web项目外面的资源



