zoukankan      html  css  js  c++  java
  • 精致的外观Request

    为什么要说Request精致的外观?请注意,我们这里所说的并不总是理解含义的外观门面,事实上,它使用的立面设计图案。使用的主要考虑数据安全的门面。它涉及到一个更大的系统系统的多个子系统之间的互动沟通、相同的数据可能涉及多个子组件的一个系统之间的交互,但是,考虑到安全问题。己内部数据过多地暴露给其它子系统或子组件,这时就要门面模式出马了,将某一子系统或子组件设计成一个门面,把别的子系统或子组件感兴趣的数据进行封装。其它子系统子组件通过此门面完毕数据訪问。就例如以下图。其它系统或组件通过一个门面Façade去訪问子系统或子组件。Façade实现了对数据安全的控制,对于敏感数据不提供不论什么訪问通道,而非敏感数据则直接暴露供訪问。


    依据门面模式往下看看tomcat中的请求对象为什么要讲究门面。直接用个类图说明更加清晰。上面两个请求ServletRequest与HttpServletRequest都是Servlet规范标准定义的接口,它们为继承关系,这些接口定义的方法专门暴露给web开发人员调用;RequestFacade就是门面了,它将实现全部HttpServletRequest接口定义的方法,详细的实现依赖于连接器的Request。连接器的Request主要是供tomcat内核使用,考虑到安全问题并不可把全部数据暴露给web开发人员。最后到最底层的请求对象,(coyote)Request封装的是最底层的数据。即Socket通信的全部字节数组。连接器Request是对此请求对象进行一定加工处理后的对象。


    给出一个简单的样例:

    ①   CoyoteRequest类,如果它拥有http协议头部属性的contentLength,此属性可暴露给web开发者。

    public final class CoyoteRequest {

       private int contentLength = 200;

       public int getContentLength(){

                 return contentLength;

       }

    }

    ②   ConnectorRequest类,当中的connector是tomcat内部组件。不可暴露给web开发者。

    public class ConnectorRequest implements HttpServletRequest{

           protected CoyoteRequest coyoteRequest;

           protected Connector connector;

           public void setCoyoteRequest(CoyoteRequestcoyoteRequest) {

                    this.coyoteRequest =coyoteRequest;

           }

           public Connector getConnector() {

                    return connector;

           }

           public void setConnector(Connectorconnector) {

                    this.connector = connector;

           }

           public int getContentLength() {

                    return coyoteRequest.getContentLength();

           }

    }

    ③   RequestFacade类,充当门面类,屏蔽不可暴露的方法getConnector(),保证了Connector组件不被web开发者获取。

    public class RequestFacade implements HttpServletRequest{

           protected ConnectorRequestconnectorRequest;

    publicRequestFacade(ConnectorRequest connectorRequest) {

                    this.connectorRequest =connectorRequest;

           }

           public int getContentLength() {

                    returnconnectorRequest.getContentLength();

           }

    }



    喜欢研究java的同学能够交个朋友。以下是本人的微信号:


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    一个日志框架的开源,有些不错的创意。
    发现vs2005一个bug!庆祝一下!
    (新手文)偶说说什么是IoC (反向注入、依赖注入)
    数据库移植到sql server遇到的问题。
    Pixysoft.Framework.Configuration 开发实录
    Pixysoft.Framework.Noebe.Json 开发实录
    介绍一下我设计的工作流引擎,欢迎拍砖仍鸡蛋
    用mysql相当多问题。不是说开源不好,可是拜托,争争气吧
    设计之路——我的成果小报告
    黑客攻击:20090921 23:41:17:171
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4886959.html
Copyright © 2011-2022 走看看