Tomcat设计模式-门面模式(facade)

本文介绍了Tomcat中RequestFacade的应用,通过门面模式简化了HTTP请求处理过程,并详细解释了其如何实现内外部对象分离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

门面模式有如下作用:

  • 为一个复杂子系统提供一个简单接口
  • 提高子系统的独立性
  • 在层次化结构中,可以使用Facade模式定义系统中每一层的入口。

 

Tomcat的request使用了面门模式。利用门面模式把request的接口进行进一步封装。在servlet中使用的request实际上是requestFacade。

org.apache.catalina.connector.Request 和org.apache.catalina.connector.RequestFacade都继承了javax.servlet.http.HttpServletRequest。实际上在servlet中也是用父类HttpServletRequest作为方法的参数,只能使用javax.servlet.http.HttpServletRequest提供的方法。

Request类通过方法getRequest() 返回门面RequestFacade,在RequestFacade中把Request的接口进一步封装。

    public HttpServletRequest getRequest() {
        if (facade == null) {
            facade = new RequestFacade(this);
        } 
        return facade;
    }

在http消息的传递过程中,在传递到servlet之前在org.apache.catalina.core.StandardWrapperValve.invoke()中,调用filterChain.doFilter(request.getRequest(),response.getResponse());

把传递的对象从Request转换成RequestFacade。此后Request变得不可见,用户操作对象只能是RequestFacade。这样通过门面实现了系统内部和外部操作对象的分离。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值