精致的外观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的更多相关文章
- 【UFUN开发板评测】小巧而不失精致,简单而不失内涵——uFun开发板开箱爆照
关于uFun学习板--"满满的爱和正能量" uFun是由@张进东 张工组织发起的一个开源的学习板,设计初衷是为了帮助学生更好的理解电子知识和开发技巧,同时又能对学生毕业找工作有很明 ...
- 7款应用最广泛的Linux桌面环境盘点
转载:http://top.jobbole.com/34823/ 多样性应该是 Linux 最好的特性之一,用户可以不断尝试各种喜欢和新鲜玩法与花样,并从中找出最适合自己的应用.无论你是 Linux ...
- 3D立体显示大屏幕拼接视频墙系统解决方案【转】
http://shop.souvr.com/thread-123416-1-1.html 随着3D立体视像.全息影像等技术不断取得突破性进展,国内外越来越多的公司投身3D显示领域,产品层出不穷.3D技 ...
- 初学者福音——10个最佳APP开发入门在线学习网站
根据Payscale的调查显示,现在的APP开发人员的年薪达到:$66,851.这也是为什么那么多初学的开发都想跻身到APP开发这行业的主要原因之一.每当你打开App Store时候,看着琳琅满目的A ...
- Adobe Photoshop CC 2018 v19.0 简体中文正式版下载安装破解(附注册机+破解教程) 32/64位(安装破解注意事项是什么)
Adobe Photoshop CC 2018 v19.0 简体中文正式版下载安装破解(附注册机+破解教程) 32/64位(安装破解注意事项是什么) 一.总结 一句话总结:下载安装破解教程文中都有,需 ...
- (转载)跟Classic ARM 处理器说拜拜——Atmel SAMA5D3 Xplained开发板评测
2014 年 4 月 10 日 时间: 下午 3:15 作者: 幸得安然 电子产业的蓬勃发展带来了史无前例的生活.生产大跃进,但是,人们在享受发展喜悦的同时又不得不面临现实现状的囧境--在以移动电子设 ...
- qTip2 精致的jQuery提示信息插件
qTip2 精致的jQuery提示信息插件 出处:http://www.cnblogs.com/lwme/archive/2012/02/16/qtip2-jquery-plugin.html ...
- Java设计模式11:外观模式
外观模式 外观模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的外观对象进行.外观模式是一个高层次的接口,使得子系统更易于使用. 医院的例子 现代的软件系统都是比较复杂的.假如把医院比作一 ...
- java的设计模式 - 外观模式(Facade)
目的 看脸模式目的很简单,就是给用户留个好印象,不想让用户关注系统中的具体细节,关注系统的外表(暴露出来的接口)就好了.一些 GUI 的菜单也好,SDK 也好或多或少也会用到这种思想.这更多的是一种思 ...
随机推荐
- Android开发者必须深入学习的10个应用开源项目
Android 开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用.其中也有许许多多的开发者提供了应用开源项 目,贡献出他们的智慧和创造力.学习开源代码是掌握技术的 ...
- linux在下面APK反编译软件和过程的描述
需要的工具: 1.apktool apk打包工具 下载地址:http://android-apktool.googlecode.com/files/apktool1.5.2.tar.bz2 安装:直接 ...
- VSTO 学习笔记(十)Office 2010 Ribbon开发
原文:VSTO 学习笔记(十)Office 2010 Ribbon开发 微软的Office系列办公套件从Office 2007开始首次引入了Ribbon导航菜单模式,其将一系列相关的功能集成在一个个R ...
- SPOJ PGCD(莫比乌斯反演)
传送门:Primes in GCD Table 题意:给定两个数和,其中,,求为质数的有多少对?其中和的范围是. 分析:这题不能枚举质数来进行莫比乌斯反演,得预处理出∑υ(n/p)(n%p==0). ...
- 伤不起的戴尔台式机XPS8700脆弱的蓝牙
http://en.community.dell.com/support-forums/desktop/f/3514/t/19520747.aspx 1.报价仅仅包含主机,并且不带音响(speaker ...
- WorkFlow介绍及用法
WorkFlow介绍及用法 说起workflow大家肯定都不陌生,这里简单介绍一下salesforce中什么情况下使用workflow. 当你分配许多任务,定期发送电子邮件,记录修改时,可以通过自动配 ...
- AbstractQueuedSynchronizer的介绍和原理分析(转)
简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础.使用的方法是继承,子类通过 ...
- Android getTopActivity的方法
使用例如以下方法能够获得top activity 的name public String getTopActivityPackageName(Context context) { String top ...
- coding 除了托管外,还能进行团队协作.
coding 除了托管外,还能进行团队协作. oschina 也是非常不错的.
- 13.怎样自学Struts2之Struts2本地化[视频]
13.怎样自学Struts2之Struts2本地化[视频] 之前写了一篇"打算做一个视频教程探讨怎样自学计算机相关的技术",优酷上传不了,仅仅好传到百度云上: http://pan ...