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的同学能够交个朋友。以下是本人的微信号:


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

  • 相关阅读:
    Palindrome Partitioning
    triangle
    Populating Next Right Pointers in Each Node(I and II)
    分苹果(网易)
    Flatten Binary Tree to Linked List
    Construct Binary Tree from Inorder and Postorder Traversal(根据中序遍历和后序遍历构建二叉树)
    iOS系统navigationBar背景色,文字颜色处理
    登录,注销
    ios 文字上下滚动效果Demo
    经常崩溃就是数组字典引起的
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4886959.html
Copyright © 2011-2022 走看看