`
dicmo
  • 浏览: 68539 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

coder 爱翻译 How Tomcat Works 第二章 第二部分

阅读更多
Application 2

在第一个应用中,有一个严重的问题。在ServletProcessor1类中的process方法,你需要向上转型ex02.pyrmont.Request的实例为javax.servlet.ServletRequest,然后把它传递给servlet的service方法的第一个参数。你也得把ex02.pyrmont.Response的实例向上转型为javax.servlet.ServletResponse然后传给servlet的service方法的第二个参数。向下面这样:

try {
servlet = (Servlet) myClass.newInstance();
servlet.service((ServletRequest) request, (ServletResponse) response);
}

安全前提下的折中办法。Servlet程序员知道servlet容器的内部工作原理可以向下把SevletRequest和ServletResponse实例转型为ex02.pyrmont.Request和ex02.pyrmont.Response,然后调用它们的public方法。有一个Request实例,它以调用它的parse方法。有一个Response实例,可以调用它的sendStaticResource方法。

你不能把parse和sendStaticResource方法设置成为private,因为它们会被其他类调用。但是,这两个方法不打算对这个servlet以外的其他类使用。一个解决办法是:把Request和Response类设置为默认访问修饰符(default access modifier),这样它们不能被ex02.pytmont包外的其他类使用。不过,这里有一个更加优雅的解决办法:使用facade类。

在这个应用,我们增加两个类:RequestFacade和ResponseFacade。RequestFacade实现了ServletRequest接口。在它通过传递一个Request实例交给一个ServletRequest对象的引用来实例化。这个ServletRequest接口的每个方法实现调用这个Request对象的相应的方法。这样,ServletRequest对象它自己是private,不能被外面的类访问。以前是通过向上转型Request对象为ServletRequest,然后传递给service方法。现在我们构建了一个RequestFacade对象然后把它传给service方法替代前一种方法。Servlet程序员任然可以向下转型ServletRequest实例为RequestFacade,但是他们只能访问在ServletRequest接口中允许访问的方法。现在parseUri方法就会很安全了。
Listing 2.7: The RequestFacade class 

package ex02.pyrmont; 
public class RequestFacade implements ServletRequest { 
private ServleLRequest request = null; 
public RequestFacade(Request request) { 
this.request = request; 
} 
/* implementation of the ServletRequest*/ 
public Object getAttribute(String attribute) { 
return request.getAttribute(attribute); 
} 
public Enumeration getAttributeNames() { 
return request.getAttributeNames();
} .
…
}


注意RequestFacade的构造函数。它接收一个Request对象但是立即交给了private的ServletRequest对象的引用。注意每个在RequestFacade类的方法是调用的ServeletRequest对象对应的方法。

同样的ResponseFacade的实现也和RequestFacade的一样。

应用2中的类:

 HttpServer2
 Request
 Response
 StaticResourceProcessor
 ServletProcessor2
 Constants

HttpServer2类除了它使用了ServletProcessor2的await方法,其它跟HttpServer1类似。
if (request.getUri().startWith("/servlet/")) {
servletProcessor2 processor = new ServletProcessor2(); 
processor.process(request, response); 
} else {
 ... 
}


ServletProcessor2类的以下代码与ServletProcessor1不一样,其它都类似。
Servlet servlet = null; 
RequestFacade requestFacade = new RequestFacade(request);
ResponseFacade responseFacade = new ResponseFacade(response); 
try {
servlet = (Servlet) myClass.newInstance(); 
servlet.service((ServletRequest) requestFacade, (ServletResponse) responseFacade); 
}

运行这个应用。可以得到与前一个Application1一样的结果。
                                                        
                                                                                  第二章 完
1
0
分享到:
评论

相关推荐

    tomcat原理解析书(how-tomcat-works)中文版

    适合读者 1.jsp/servlet 开发人员,想了解 tomcat 内部机制的 coder;...2.想加入 tomcat 开发团队的 coder; 3.web 开发人员,但对软件开发很有兴趣的 coder; 4.想要对 tomcat 进行定制的 coder。

    Bad Programming Practices 101 Become a Better Coder by Learning How (Not) epub

    Bad Programming Practices 101 Become a Better Coder by Learning How (Not) to Program 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书

    phpcoder.rar

    - **插件扩展**:PHPCoder支持第三方插件,可以通过社区下载安装增强功能。 - **代码格式化**:使用“编辑”>“格式化代码”对代码进行整理,保持良好的编码风格。 - **搜索与替换**:利用查找和替换功能,可以在...

    mediacoder专业版

    mediacoder 5685专业版,无普通版的限制

    simulink hdl coder 用户手册pdf

    #### 二、Simulink HDL Coder 的主要功能特点 1. **模型到 HDL 的转换**:Simulink HDL Coder 支持将 Simulink 模型转换成 VHDL 或 Verilog HDL 代码。这些模型可以包括数学运算、信号处理、通信协议等多种类型的...

    MediaCoder答题器

    2. 高质量编码:MediaCoder允许用户自定义编码参数,如比特率、分辨率、帧率等,以实现高质量的编码输出,满足不同应用场景的需求,比如视频压缩、在线流媒体、移动设备播放等。 3. 强大的硬件加速:MediaCoder利用...

    matlab Embedded Coder Getting Started Guide.pdf

    Embedded Coder用于产生嵌入式处理器、目标快速原型板和大规模生产中使用的微处理器的可读的、紧凑的、快速的C和C++代码。Embedded Coder支持附加的MATLAB Coder™和Simulink Coder™配置选项,以及对生成代码的功能...

    Mediacoder基础教程

    **Mediacoder基础教程** Mediacoder是一款强大的多媒体编码工具,专为音频和视频转换而设计,支持多种格式,如MP4、AVI、MKV等。本教程将深入讲解如何利用Mediacoder进行视频压制,优化视频质量,同时合理权衡码率...

    The Clean Coder

    Martin, "The Clean Coder: A Code of Conduct for Professional Programmers" Prentice Hall | 2011 | ISBN: 0137081073 | 256 pages | PDF | 6 MB Programmers who endure and succeed amidst swirling ...

    CoolCoder 类生成工具

    虽然CoolCoder能够自动化大部分工作,但开发者依然可以自定义模板,对生成的代码进行微调,以满足特定项目的需求。这种灵活性确保了生成的代码既高效又符合项目风格。 6. **提高开发效率**: 使用CoolCoder,...

    MediaCoder

    MediaCoder是一款功能强大的多媒体转换工具,它支持广泛的音频和视频编码格式,使用户能够轻松地在不同设备之间转换媒体文件。这款软件适用于个人用户、专业音频和视频制作人员,以及那些希望在各种设备上享受多媒体...

    php coder编辑器

    PHPCoder用于快速开发和调试PHP应用程序,它很容易扩展和定制,完全能够符合开发者的个性要求.PHPCoder是一个非常实用的,功能强大的编程环境,而且它是免费的!

    HDL-Coder详细教程

    ### HDL-Coder详细教程知识点概述 #### 一、生成HDL代码前的准备工作 在开始从Simulink模型生成HDL代码之前,需要完成一系列的准备工作,确保模型能够顺利生成高质量的代码。 ##### 1.1 使用`hdlsetup`进行模型...

    magicalcoder文件去域名

    接下来,我们讨论"magicalcoder文件去域名"的第二个方面——软件授权限制的解除。通常,商业软件会设定一定的授权机制,包括使用期限、设备数量或特定的使用环境(如特定域名)。这些限制是为了保护知识产权,防止...

    matlab coder基本函数教程

    ### MATLAB Coder 基本函数教程 #### MATLAB Coder 概述 MATLAB Coder 是一款能够将 MATLAB 代码转换成独立的 C 或 C++ 代码的强大工具。这一过程对于那些希望在非 MATLAB 环境下部署 MATLAB 代码的应用开发者来说...

    MediaCoder.5755专业破解版

    MediaCoder行业版一款针对VOD及KTV视频点播行业开发的,用于转换和处理带有多音轨内容的视频节目的软件。它具备业界领先的视频编码引擎,在高性能转码的同时保持高画质,并通过丰富的视频滤镜增强画面视觉效果。作为...

    MediaCoder使用说明文档

    MediaCoder使用说明文档, mediaCoder usermanual,

    MatlabCoder使用-Matlab Coder的基本使用.pdf

    Matlab Coder是Mathworks公司推出的一款用于将Matlab代码转换成高效C代码的工具。从2004年开始,Matlab陆续在Simulink中添加了Embeded Matlab Function模块,2007年在Real-Time Workshop中引入了emlc函数(现在的...

    Embedded Coder.rar

    texasinstrumentsc2000.mlpkginstall 支持TI的C2000系列工具包,要求MATLAB R2017a及其以上版本。 安装方法:打开matlab,调整路径到mlpkginstall文件所在目录;在current folder窗口里双击mlpkginstall文件即可开始...

Global site tag (gtag.js) - Google Analytics