Servlet之重定向(Redirect)
重定向是利用服务器返回的状态码来实现的。客户端浏览器请求服务器的时候,服务器端会返回一个状态码。服务器端通过HttpServletResponse的setStatus(int status)方法设置状态码。如果服务器返回301或者302,则浏览器会到新的网址重新请求该资源,下面我们看一下服务器返回的状态码的含义:
1XX:信息状态码。表示该请求已经被接收,正在被处理。
2XX:正确状态码。表示该请求已经被正确接收并处理,没有错误发生。例如200表示一切正确。
3XX:重定向状态码。例如301,302表示该资源已经不存在或者换了地址,客户端需要重新定向到一个新的资源。服务器响应中会附带这个新资源地址。其中301表示永久性重定向,302表示临时性重定向。
4XX:请求错误。例如401表示没有访问权限,404表示资源不存在,405表示访问方式错误(如Servlet只接受GET,POST方式访问但是客户端却以DELETE方式访问)
5XX:服务器错误。例如500表示程序出现异常而中途停止运行。
HttpServletResponse类中把常用的状态码封装成了静态常量。例如SC_MOVED_TEMPORARILY表示的就是302。HttpServletResponse把setStatus与setHeader方法封装成另一个方法sendRedirect(String location),只需要调用sendRedirection就能实现重定向。
当使用重定向跳转Servlet时,跳转实在客户端实现的。也就是说客户端浏览器实际上请求了2次服务器,第1次获取了重定向的状态码和重定向的网址,第2次访问真实地址。