在第二章 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自己扩展的方法的。 如果是熟悉这个机制的程序员有可能在这个向上转换之后,再次向下转换,从而在不合适的地方,调用一些无关的方法。
门面(外观)设计模式
这里书上说到使用了 __ 门面设计模式 __
门面模式(或外观模式)隐藏系统的复杂性,并为客户端提供一个客户端可以访问系统的接口。 这种类型的设计模式属于结构模式,因为此模式为现有系统添加了一个接口以隐藏其复杂性。
门面模式涉及一个类,它提供客户端所需的简化方法和委托调用现有系统类的方法。
个人的理解:门面模式就像是提供了一个滤镜,只提供需要的部分,屏蔽其它无关的,避免了强制转换,从而保证了可靠性。