servlet中RequestDispatcher源码解析及使用

本文深入解析了Servlet中RequestDispatcher的工作原理,包括如何通过HttpServletRequest.getRequestDispatcher获取RequestDispatcher,以及它所包含的forward、include和sendRedirect方法的使用。forward用于请求转发,浏览器地址不改变;include用于在响应中合并其他资源,同样地址不变;而sendRedirect则是重定向,导致浏览器发起新的请求,地址栏显示新的URL。
摘要由CSDN通过智能技术生成

servlet中RequestDispatcher源码解析及使用

一、简介

RequestDispatcher可以让客户端请求在服务端server中的各个servlet间转发处理。这里结合源码对RequestDispatcher进行介绍。

二、RequestDispatcher

RequestDispatcher接收客户端请求,并将它们发送到server中的其它资源(如servlet、html文件、JSP文件)。RequestDispatcher当作对指定路径或名称的服务资源的包装。

2.1 RequestDispatcher获取

RequestDispatcher是通过HttpServletRequest.getRequestDispatcher方法获取的,参数为指定的资源路径,如果路径是相对路径,则相对目录是当前servlet的。HttpServletRequest.getRequestDispatcher方法定义源码如下:

public RequestDispatcher getRequestDispatcher(String path);
2.2 源码

RequestDispatcher的核心方法是forward和include,这里把RequestDispatcher中定义的常量也列出来,源码如下:

package javax.servlet;
import java.io.IOException;
public interface RequestDispatcher {
   
    //forward方式下,来源URI名称(值在目标request中attribute中获取)
    static final String FORWARD_REQUEST_URI = "javax.servlet.forward.request_uri";

    //forward方式下,来源context路径名称(值在目标request中attribute中获取)
    static final String FORWARD_CONTEXT_PATH = "javax.servlet.forward.context_path";

    //forward方式下,来源路径信息名称(值在目标request中attribute中获取)
    static final String FORWARD_PATH_INFO = "javax.servlet.forward.path_info";

    //forward方式下,来源servlet的servlet路径名称(值在目标request中attribute中获取)
    static final String FORWARD_SERVLET_PATH = "javax.servlet.forward.servlet_path";

    //forward方式下,来源请求查询串名称(值在目标request中attribute中获取)
    static final String FORWARD_QUERY_STRING = "javax.servlet.forward.query_string";

    //include方式下,目标请求的URI名称(值在目标request中attribute中获取)
    static final String INCLUDE_REQUEST_URI = "javax.servlet.include.request_uri";

    //include方式下,目标context路径名称(值在目标request中attribute中获取)
    static final String INCLUDE_CONTEXT_PATH = "javax.servlet.include.context_path";

    //include方式下,目标路径信息名称(值在目标request中attribute中获取)
    static final String INCLUDE_PATH_INFO = "javax.servlet.include.path_info";

    //include方式下,目标servlet路径名称(值在目标request中attribute中获取)
    static final String INCLUDE_SERVLET_PATH = "javax.servlet.include.servlet_path";

    //include方式下,目标查询串名称(值在目标request中attribute中获取)
    static final String INCLUDE_QUERY_STRING = "javax.servlet.include.query_string";

    //error方式下,传递的异常对象名称(值在目标request中attribute中获取)
    public static final String ERROR_EXCEPTION = "javax.servlet.error.exception";

    //error方式下,传递的异常类型名称(值在目标request中attribute中获取)
    public static final String ERROR_EXCEPTION_TYPE = "javax.servlet.error.exception_type";

    //error方式下,传递的异常信息名称(值在目标request中attribute中获取)
    public static final String ERROR_MESSAGE = "javax.servlet.error.message";

    //error方式下,导致传递异常的请求URI名称(值在目标request中attribute中获取)
    public static final String ERROR_REQUEST_URI = "javax.servlet.error.request_uri";

    //error方式下,传递的发生错误的servlet名称(值在目标request中attribute中获取)
    public static final String ERROR_SERVLET_NAME = "javax.servlet.error.servlet_name";

    //error方式下,传递的响应code名称(值在目标request中attribute中获取)
    public static final String ERROR_STATUS_CODE = "
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值