讲究门面的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的同学可以交个朋友,下面是本人的微信号:
讲究门面的Request的更多相关文章
- django的views里面的request对象详解大全
简介 HTTP 应用的信息是通过 请求报文 和 响应报文 传递的,关于更多的相关知识,可以阅读<HTTP权威指南>获得. 其中 请求报文 由客户端发送,其中包含和许多的信息,而 djang ...
- 75篇关于Tomcat源码和机制的文章
75篇关于Tomcat源码和机制的文章 标签: tomcat源码机制 2016-12-30 16:00 10083人阅读 评论(1) 收藏 举报 分类: tomcat内核(82) 版权声明:本文为 ...
- 连接器与容器的桥梁——CoyoteAdapter
如果把整个tomcat内核最高抽象程度模块化,可以看成是由连接器Connector和容器Container组成,连接器负责HTTP请求接收及响应,生成请求对象及响应对象并交由容器处理,而容器则根据请求 ...
- request.getParameter(“参数名”) 中文乱码解决方法
今天浏览项目时候,遇到一个问题,页面用${requestScope.参数名 }获取的值是乱码,然后搜了一下,最后说是编码的问题,附上查找的结果: 在Java 开发中,如果框架搭建的不完善或者初学者在学 ...
- response.sendRedirect()与request.getRequestDispatcher().forward()区别
Servlet中response.sendRedirect()与request.getRequestDispatcher().forward(request,response)这两个对象都可以使页面跳 ...
- 【转】request和response的页面跳转传参
下面是一位园友的文章: jsp或Servlet都会用到页面跳转,可以用 request.getRequestDispatcher("p3.jsp").forward(request ...
- oracle ebs request一直pending
如果提交请求以后,状态一直是pending状态,可以在“工具”打开“Manager”,查看一下Maximum是否有设置错,另外pending的数量当前是多少. 如果Maximum是1,pending是 ...
- request的生命周期
有如下功能: 从index.jsp页面点击超链接进入TestServlet服务器,TestServlet服务器再请求转发到test.jsp. 在index.jsp里设置了request的attribu ...
- 转response.sendRedirect()与request.getRequestDispatcher().forward()区别
JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,response)这两个对象都可以使页面跳转,但是 ...
随机推荐
- Miller-Rabin,Pollard-Rho(BZOJ3667)
裸题直接做就好了. #include <cstdio> #include <cstdlib> #include <algorithm> using namespac ...
- 四个常用的 Rewrite 使用范例
一.防盗链功能只这四行就实现了防盗链,原理是利用REFERER判断网页来源,缺点是REFERER容易伪造. RewriteEngine On RewriteCond %{HTTP_REFERER} ! ...
- 如何用Netty实现一个轻量级的HTTP代理服务器
为什么会想通过Netty构建一个HTTP代理服务器?这也是笔者发表这篇文章的目的所在. 其主要还是源于解决在日常开发测试过程中,一直困扰测试同学很久的一个问题,现在我就来具体阐述一下这个问题. 在日常 ...
- net use命令详解
net use命令详解 1)建立空连接: net use \\IP\ipc$ "" /user:"" (一定要注意:这一行命令中包含了3个空格) 2)建立非空连 ...
- 阿里云服务器Centos 7安装PHP
网上各种别人写的博客 我自己配置了一下php 开始安装的是压缩包 结果php -version 无显示 然后查找各种资料 请教了很多人 需要的环境一一配置了,但是虽然出现了安装成功,但是还是无法查看版 ...
- MockHttpServletRequestBuilder中content和param的区别
结论: Mock将URL的参数和通过使用param添加的参数添加到request中的parameter中(url参数) 而将content内容.类型并没有进行解析,直接添加到request的conte ...
- Java instanceof 关键字是如何实现的?
作者:RednaxelaFX链接:https://www.zhihu.com/question/21574535/answer/18998914来源:知乎著作权归作者所有.商业转载请联系作者获得授权, ...
- JVM Class详解之一
首先看Class中包含哪些信息简单的说所有Java文件中有的信息class文件都有,编译器帮我们将java文件转化成了JVM能看懂的class格式而已 Class 概述 Class文件是一组以8位字节 ...
- tomcat7+jdk的keytool生成证书 配置https
目前只会使用jdk的keytool来生成证书.本文仅介绍这种方法. 1Windows下: 1.1 生成keystore文件及导出证书 打开控制台: 运行: %JAVA_HOME%\bin\keytoo ...
- TP中的AJAX返回ajaxReturn()
系统支持任何的AJAX类库,Action类提供了ajaxReturn方法用于AJAX调用后返回数据给客户端.并且支持JSON.XML和EVAL三种方式给客户端接受数据,通过配置DEFAULT_AJAX ...