精致的外观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 也好或多或少也会用到这种思想.这更多的是一种思 ...
随机推荐
- HashMap的工作原理(转)
HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此 ...
- ubuntu下海信Hisense E920 usb连接不上的处理与adb的连接
解决lssub未能发现海信Hisense USB设置:选择 天翼宽带连接 如下所示: luogw@luogw-ThinkPad-Edge:~$ lsusb Bus 001 Device 002: ID ...
- STL__queue_的应用
转:http://hi.baidu.com/xiaotiandm/item/bda34511cf9e99098fbde41a 调用的时候要有头文件: #include<stdlib.h> ...
- web开发性能优化---用户体验篇
怎样从技术角度怎样增强用户体验.都是非常多平台都在做的事情,依据个人实际经验碰到几种体验做下总结. 1.降低页面刷新白屏 适当使用ajax技术.改善刷新白屏现象. 2.信息提醒,邮件.站内信.短信在购 ...
- 物联网操作系统HelloX开发人员入门指南
HelloX开发人员入门指南 HelloX是聚焦于物联网领域的操作系统开发项目,能够通过百度搜索"HelloX".获取具体信息. 当前开发团队正在进一步招募中,欢迎您的了解和添加. ...
- SQL Server Database 维护计划创建一个完整的备份策略
SQL Server维护计划Maintenance Plan这是一个非常有用的维护工具,能够完成大部分的数据库维护任务,通过这些功能包.您可以省略大量的编码时间. 介绍的不是非常多,特此补上一篇 ...
- 常用PHP中花括号使用规则详解
转自http://www.cnblogs.com/jayleke/archive/2011/11/08/2241609.html 1.简单句法规则(用花括号界定变量名,适用于PHP所有版本): $a ...
- 服务器编程入门(11)TCP并发回射服务器实现 - 单线程select实现
问题聚焦: 当客户端阻塞于从标准输入接收数据时,将读取不到别的途径发过来的必要信息,如TCP发过来的FIN标志. 因此,进程需要内核一旦发现进程指定的一个或多个IO条件就绪(即输入已准备好被读取,或者 ...
- C#之异步编程
1 异步编程的重要性 C#5.0最重要的改进是提供了更强大的异步编程,C#5.0仅增加两个关键字Async和Await,使用异步编程,方法调用是后台运行(通常在线程和任务的帮助下),并且不会阻塞调用线 ...
- android中用get和post方式向服务器提交请求
通过get和post方式向服务器发送请求首先说一下get和post的区别get请求方式是将提交的参数拼接在url地址后面,例如http://www.baidu.com/index.jsp?num=23 ...