转载自:http://blog.youkuaiyun.com/Squall1009/archive/2008/04/14/2290724.aspx
Servlet的页面跳转有三种方法:
requestDispatcher
在ServletContext和ServletRequest中获取RequestDispatcher都是通过方法RequestDispatcher getRequestDispatcher(String path),但是需要注意这个方法在用不同的类调用的时候存在一些差异,使用ServletContext接口的对象调用时,String path的参数必须以”/”开头,也就是说从这个web项目的根开始。而使用ServletRequest接口的对象调用这个方法时,path可以不以”/”开头,简单的说就是可以使用相对于当前请求的相对路径
(1)void forward(ServletRequest request, ServletResponse response)
使用方法:
RequestDispatcher rd = this.getServletContext().getRequestDispatcher("/AfterForward");
rd.forward(req, resp);
相应说明:"AfterForward"为Servlet类名
相应总结:
1.forward会显示forward后的页面的内容
2.forward调用后浏览器的url不会变化
3.forward后的页面和原页面的request为同一对象
(2)void include(ServletRequest request, ServletResponse response)
使用方法:
RequestDispatcher rd = req.getRequestDispatcher("InInclude");
rd.include(req, resp);
相应总结:
1.include会显示原页面中include的地方显示include的Servlet输出的内容
2.forward调用后浏览器的url不会变化
3.forward后的页面和原页面的request为同一对象
InInclude无法输出一个完整的html页面,它只是输出一部分东西而已
HttpResponse
(3) void sendRedirect(String location)
使用方法:
resp.sendRedirect("AfterSendRedirect");
相应总结:
1、 html页面会显示location所输出的页面
2、 浏览器上的url也为location的绝对路径
3、 原servlet调用sendRedirect方法后,剩下的代码也会执行
4、 原servlet和跳转至的servlet的HttpServletRequest对象不是同一个对象。
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/tanlijun37/archive/2008/07/16/2661098.aspx