RequestDispatcher源码翻译与理解

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";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值