《how tomcat works》阅读笔记 - 2 - 门面设计模式,避免强制转换
在第二章 2.3节中
try {
servlet = (Servlet) myClass.newInstance();
servlet.service((ServletRequest) request, (ServletResponse) response);
}
这破坏了安全性。知道这个Servlet容器内部运作机制的servlet程序员可以分别反向向下强制转换ServletRequest和ServletResponse到org.how.tomcat.works.ex02.Request和org.how.tomcat.works.ex02. Response,并且调用它们的公共方法(public修饰的方法)。有了Request实例,他们可以调其pares()方法;有了Response实例,他们可以调其sendStaticResource()方法。
我个人的理解: 向上向下强制的引用类型转换,破坏了封装,比如,在这个例子中,Request 实现了ServletRequest 接口,还扩展了自己的方法属性。按照设计,__servlet的service()__方法是不需要Request自己扩展的方法的。 如果是熟悉这个机制的程序员有可能在这个向上转换之后,再次向下转换,从而在不合适的地方,调用一些无关的方法。
门面(外观)设计模式
这里书上说到使用了 __ 门面设计模式 __
门面模式(或外观模式)隐藏系统的复杂性,并为客户端提供一个客户端可以访问系统的接口。 这种类型的设计模式属于结构模式,因为此模式为现有系统添加了一个接口以隐藏其复杂性。
门面模式涉及一个类,它提供客户端所需的简化方法和委托调用现有系统类的方法。
个人的理解:门面模式就像是提供了一个滤镜,只提供需要的部分,屏蔽其它无关的,避免了强制转换,从而保证了可靠性。
《how tomcat works》阅读笔记 - 2 - 门面设计模式,避免强制转换的更多相关文章
- how tomcat works 读书笔记(二)----------一个简单的servlet容器
app1 (建议读者在看本章之前,先看how tomcat works 读书笔记(一)----------一个简单的web服务器 http://blog.csdn.net/dlf123321/arti ...
- How tomcat works(深入剖析tomcat)阅读笔记1-4章
How tomcat works chapter 1 简单的web服务器 这一张的主要内容就是实现一个简单的静态资源服务器,socket编程,利用java提供的socket和serverSocket编 ...
- how tomcat works 读书笔记四 tomcat的默认连接器
事实上在第三章,就已经有了连接器的样子了,只是那仅仅是一个学习工具,在这一章我们会開始分析tomcat4里面的默认连接器. 连接器 Tomcat连接器必须满足下面几个要求 1 实现org.apache ...
- How tomcat works学习笔记
最近在看Tomcat的源码, 所以找了一本相关的书籍<How tomcat works>. 博客内容多为 学习该书时所记录的笔记.(如有侵权行为,请联系我:eviltomorrow@163 ...
- how tomcat works 读书笔记(一)----------一个简单的webserver
http协议 若是两个人能正常的说话交流,那么他们间必然有一套统一的语言规则<在网络上server与client能交流也依赖与一套规则,它就是我们说的http规则(超文本传输协议Hypertex ...
- how tomcat works 读书笔记九 Session管理
在看本文之前,请先查阅相关Session与Cookie的资料. 这篇资料不错 http://blog.csdn.net/fangaoxin/article/details/6952954 Catali ...
- how tomcat works 读书笔记(一)----------一个简单的web服务器
http协议 若是两个人能正常的说话交流,那么他们间必定有一套统一的语言规则<在网络上服务器与客户端能交流也依赖与一套规则,它就是我们说的http规则(超文本传输协议Hypertext tran ...
- how tomcat works读书笔记 七 日志记录器
大家可以松一口气了,这个组件比较简单,这一节和前面几节想比,也简单的多. Logger接口 Tomcat中的日志记录器都必须实现org.apache.catalina.Logger接口. packag ...
- How Tomcat Works读书笔记三-------连接器
几个概念 HttpServlet,Servlet Servlet是一个接口,定义了一种网络服务,我们所有的servlet都要实现它(或它的子类) HttpServlet是一个抽象类,它针对的就是htt ...
随机推荐
- Hive学习之路 (十六)Hive分析窗口函数(四) LAG、LEAD、FIRST_VALUE和LAST_VALUE
数据准备 数据格式 cookie4.txt cookie1, ::,url2 cookie1, ::,url1 cookie1, ::,1url3 cookie1, ::,url6 cookie1, ...
- Robotframework测试相关库的简单整理
一. 官网地址 http://robotframework.org/#libraries 二.几类测试所用到的常用库初步整理 1. UI自动化测试 Selenium2Library.BuiltIn(自 ...
- Octave安装
转自:https://www.cnblogs.com/freeweb/p/7124589.html Octave是一种解释类的编程语言,并且是GNU项目下的开源软件,与之相对是大家都非常熟悉的matl ...
- Python的编码注释【转】
格式有多种,但必须有coding:[编码]或者coding=[编码],如: # -*- coding:utf-8 -*- # coding:utf-8 # coding=utf-8 转自:https ...
- IIS提示出现RPC服务器不可用的解决方法
如果你运行IIS时也遇到“RPC服务器不可用”的故障提示,不妨试试我们下面的办法 依次点击“管理工具→服务→Remote Procedure Call→属性”,其默认启动类别是“自动”,但选项是灰色的 ...
- linux iSCSI target/initiator配置
linux iSCSI target配置全过程一:Install iSCSI target for Linux1,操作系统:[root@rac2 ~]# cat /etc/issueEnterpris ...
- 实验吧web天网管理系统
直接查看源码 <!--$test=$_GET['username']>这一行 源码的下面给了我们一些提示:我们输入的username经过md5加密后会赋值给test.当test为0时就会跳 ...
- 编写Dockerfiles
指令 docker build通过Dockerfile制作镜像 docker build [PATH] [-f Dockerfile] 其中PATH不写,默认执行指令的当前目录,不要用 /,这样将导致 ...
- lua协程实现
协程是个很好的东西,它能做的事情与线程相似,区别在于:协程是使用者可控的,有API给使用者来暂停和继续执行,而线程由操作系统内核控制:另外,协程也更加轻量级.这样,在遇到某些可能阻塞的操作时,可以使用 ...
- Oracle 安装过程中 File not found "WFMLRSVCApp.ear" 的原因
主要有两种原因: 1 只解压缩了第一个zip文件. 2 两个zip 文件解压缩到了两个不同的目录里.