Servlet中的转向
一般在Java web开发中会用到JSP和Servlet技术。Servlet控制业务流转,JSP则负责业务处理结果的显示。所以,经常会遇到页面的重定向。
重定向技术可以分为两类:一类是客户端重定向,另一类是服务器端重定向。Servlet中的重定向属于服务器端技术。
Servlet服务器端得重定向有两种方式,一是使用HttpServletResponse的sendRedirect()方法,另一个是使用RequestDispatcher的forward()方法。
HttpServletResponse接口定义转向的sendRedirect()方法代码如下:
public void sendRedirect(String url) throws java.io.IOException
其中url参数可以是一个绝对的URL,如response.sendRedirect(http://java.sun.com),也可以是一个相对的URL地址。如果url以“/”开始,则容器认为相对于当前Web应用的根。
RequestDispatcher是一个Web资源的包装器,可以用来把当前request传递到该资源,或者把新的资源包括到当前响应中。RequestDispatcher接口中定义了两个方法:
public interface RequestDispatcher {
void forward(ServletRequest request, ServletResponse response)
void include(ServletRequest request, ServletResponse response)
}
forward()方法将当前的request和response重定向到该RequestDispacher指定的资源。这在实际项目中大量使用。一个RequestDispatcher对象可以把请求发送到任意一个服务器资源,而不仅仅是另外一个Servlet。Include()方法将把Request Dispatcher资源的输出包含到当前输出中。
得到RequestDispatcher对象的三种方法:
A.javax.servlet. ServletRequest的getRequestDispatcher(String path)方法,其中path可以是相对路径,但不能越出当前Servlet上下文。如果path以“/”开头,则解析为相对于当前上下文的根。
B.javax.servlet. ServletContext的getRequestDispatcher(String path)方法,其中path必须以“/”开头,路径相对于当前的Servlet上下文。可以调用ServletContext的getContext(String uripath)得到另一个Servlet上下文,并可以转向到外部上下文的一个服务器资源链接。
C.javax.servlet. ServletContext的getNamedDispatcher(String name)得到名为name的一个Web资源,包括Servlet和JSP页面。这个资源的名字在Web应用部署描述文件web.xml中指定。