Servlet间的跳转

时间:2021-05-23 15:46:08
 
 Forward
 
     转向(Forward)是通过RequestDispatcher对象的forward(HTTPServletRequest req, HttpSerletResponse res) 方法来实现的。RequestDispatcher可以通过HTTPServletRequest的getRequestDispatcher()方法获得。
 
RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet/LifeCycleServlet");
dispatcher.forward(request, response);
 
     Forward 是MVC框架中常用的技术。Forward可以跳转到本应用的另一个Servlet、JSP页面,也可以跳转到另一个文件,甚至WEB-INF文件夹下的文件。框架中常使用一个Servlet来集中处理请求然后跳转到响应的Servlet,或者在Servlet中处理业务逻辑,然后跳转到JSP页面中显示处理结果。
 
     当使用forward形式跳转Servlet时,地址栏会显示跳转前的Servlet访问地址。因为该跳转实在服务器端实现的,客户端浏览器并不知道该跳转动作,也就是说forward跳转对客户端浏览器是透明的。
 
     forward是最常用的方式,在struts、webwork等MVC框架中,都是用Servlet来处理用户请求,把结果通过request.setAttribute()放到request中,然后forward到JSP中显示。
 
当执行forward动作的时候不能有任何输出到达客户端,否则会抛出IllgalStateException。
 
 
 
 
 Redirect
 
     重定向是利用服务器返回的状态码来实现的。客户端浏览器请求服务器的时候,服务器端通过HTTPServletResponse的setStatus(int status)方法设置状态码。如果服务器返回301或者302,则浏览器会到新的网址重新请求该资源。
 
     HttpServletResponse把setStatus与setHeader方法封装成另一个方法sendRedirect(String location),只需要调用sedRedirection就能实现重定向。
 
     当使用Redirect跳转Servlet时,跳转实在客户端实现的,也就是说客户端浏览器实际上请求了2次服务器,第1次获取了重定向状态码与重定向的网址,第2次访问真实地址。
 
 
Refresh
 
     自动刷新不仅可以实现一段时间后自动跳转到另一个页面,还可以实现一段时间后自动刷新本页面。Servlet通过HttpServletResponse对象设置Header属性实现自动刷新效果。
 
     自动刷新与重定向原理类似,如果把自动刷新的时间设为0,把url设为另外一个网址,效果就是重定向。