怎样通过ServletContext获取RequestDispatcher对象实现页面跳?
Servlet的页面跳转有三种方法:
requestDispatcher
在ServletContext和ServletRequest中获取RequestDispatcher都是通过方法RequestDispatcher getRequestDispatcher(String path),但是需要注意这个方法在用不同的类调用的时候存在一些差异,使用ServletContext接口的对象调用时,String path的参数必须以”/”开头,也就是说从这个web项目的根开始。 而使用ServletRequest接口的对象调用这个方法时,path可以不以”/”开头,简单的说就是可以使用相对于当...全部
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对象不是同一个对象。
收起