package javax.servlet;
import java.io.IOException;
/**
* 目的:调度客户端请求并响应对应资源
* servlet容器创建RequestDispatcher对象,该对象是请求资源(访问路径和名称)的包装器
*
* forward()与include()区别:
* forward():请求转发给另一个servlet,并响应该servlet对应资源;
* include():另一个servlet资源包含到当前请求servlet中,资源添加到响应体中。
* @author TCM
* @create 2017年10月23日下午3:04:26
* @see ServletContext#getRequestDispatcher(java.lang.String)
* @see ServletContext#getNamedDispatcher(java.lang.String)
* @see ServletRequest#getRequestDispatcher(java.lang.String)
*/
public interface RequestDispatcher {
/**
* 目的:转发请求并响应
*
* <p>服务器上转发请求到另一个资源(如:servlet、JSP、HTML)并生成响应
*
* <p>getRequestDispatcher():获取RequestDispatcher对象,
* 由ServletRequest对象的路径和参数去匹配目标资源,而获取资源
*
* <p>响应客户端之前调用forward()方法(响应体清空之前),若果已经响应,则
* 抛出IllegalStateException;若没有,转发之前,响应体清空。
*
* <p>请求和响应参数必须以相同对象传递给servlet的service()或是{@link ServletRequestWrapper}
* 和{@link ServletResponseWrapper}子类包装它们。
*
* <p>该方法的调度类型为DispatcherType.FORWARD。
*
* @param request {@link ServletRequest}
* @param response {@link ServletResponse}
* @throws ServletException
* @throws IOException
* @throws IllegalStateException
* @see ServletRequest#getDispatcherType
*/
public void forward(ServletRequest request, ServletResponse response)
throws ServletException, IOException;
/**
* 目的:另一个servlet处理过后的内容包含到响应体内
*
* <p>被包含的Servlet程序不能改变响应消息的状态码和响应头,
* 如果它里面存在这样的语句,这些语句的执行结果将被忽略。
*
* <p>该方法的调度类型为DispatcherType.FORWARD。
*
* @param request {@link ServletRequest}
* @param response {@link ServletResponse}
* @throws ServletException
* @throws IOException
* @see ServletRequest#getDispatcherType
*/
public void include(ServletRequest request, ServletResponse response)
throws ServletException, IOException;
static final String FORWARD_REQUEST_URI = "javax.servlet.forward.request_uri";
static final String FORWARD_CONTEXT_PATH = "javax.servlet.forward.context_path";
static final String FORWARD_PATH_INFO = "javax.servlet.forward.path_info";
static final String FORWARD_SERVLET_PATH = "javax.servlet.forward.servlet_path";
static final String FORWARD_QUERY_STRING = "javax.servlet.forward.query_string";
static final String INCLUDE_REQUEST_URI = "javax.servlet.include.request_uri";
static final String INCLUDE_CONTEXT_PATH = "javax.servlet.include.context_path";
static final String INCLUDE_PATH_INFO = "javax.servlet.include.path_info";
static final String INCLUDE_SERVLET_PATH = "javax.servlet.include.servlet_path";
static final String INCLUDE_QUERY_STRING = "javax.servlet.include.query_string";
public static final String ERROR_EXCEPTION = "javax.servlet.error.exception";
public static final String ERROR_EXCEPTION_TYPE = "javax.servlet.error.exception_type";
public static final String ERROR_MESSAGE = "javax.servlet.error.message";
public static final String ERROR_REQUEST_URI = "javax.servlet.error.request_uri";
public static final String ERROR_SERVLET_NAME = "javax.servlet.error.servlet_name";
public static final String ERROR_STATUS_CODE = "javax.servlet.error.status_code";
}
RequestDispatcher源码翻译与理解
最新推荐文章于 2022-11-26 11:46:49 发布