动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.课程介绍(11): SL-351 Java数据库.
.java窗口的实现---计算器(算加法.
.JavaMail的标题的中文问题最新版.
.自动转向的javabean源码.
.关于23种设计模式的有趣见解.
.Weblogic70的配置简单手动配置we.
.J2SE5.0用Executor灵活处理事件下.
.实战 J2EE 开发购物网站 开发环境.
.Java中的Annotation解析之二(1).
.避免Java EE项目评估中的常见错误.
.用Eclipse Visual Editor 开发SW.
.JMX前身JMAPI.
.按位左移运算符 (<<).
.JDBC性能优化技巧.
.Jcrontab - java定时程序进阶学习.
.Java初学问题实录.
.JBPM源码分析(一)---数据库表.
.Jetspeed开发文档2.
.Junit 的使用经验总结.
.基于OSGi搭建动态化的系统.

Servlet 容器的工作原理 ( 四 )

发表日期:2008-1-5 |



  Application 2
  第一个应用程序里存在一个值得注重的问题。 在ServletProcessor1 类的 process 方法里,上溯 (upcast)ex02.pyrmont.Request 实例到 Javax.servlet.ServletRequest,将其作为第一个参数传递给 servlet 的 service 方法。 另上溯(upcast) ex02.pyrmont.Response 实例到 javax.servlet.ServletResponse ,并将其作为第二个参数传递给 servlet 的 service 方法。
  
  try {
    servlet = (Servlet) myClass.newInstance();
    servlet.service((ServletRequest) request, (ServletResponse) response);
  }
  
  这样会使安全性能大打折扣。 知道 servlet 容器工作原理的程序员可以将 ServletRequest 和 ServletResponse 实例向下转型 (downcast) 到Request 和 Response ,并调用它们的 public 方法。 Request 实例能调用它的 parse 方法; Request 实例能调用它的 sendStaticResource 方法。
  
  可以将 parse 和 sendStaticResource 方法设为 private,因为在 ex02.pyrmont 里将会从其他类里调用它们。 然而,这两个方法在 servlet 内应该是不可用的。 一个解决方法是:给 Request 和 Response 类一个默认的访问修饰符,以致他们在 ex02.pyrmont 外不能被使用。 但还有一个更好的解决方法: 使用 facade 类。
  
  在第二个应用程序内,添加两个 facade 类:RequestFacade 和 ResponseFacade。 RequestFacade 类实现 ServletRequest 接口,并通过传递 Request 实例来实例化, Request 实例将在 ServletRequest 对象的构建器里被引用 。 ServletRequest 对象本身是 private 类型的,不能在类之外访问。 就构建 RequestFacade 对象,并将其传递给 service 方法,而不上溯 (upcast) Request 对象给 ServletRequest,并将其传递给 service 方法。 servlet 程序员仍然可以向下转型 (downcast) ServletRequest 到 RequestFacade,但是,只要访问 ServletRequest 接口的可用方法就可以了。 现在,parseUri 就安全了。
  Listing 2.5 显示 RequestFacade 类部分代码:
  Listing 2.5. RequestFacade 类
  package ex02.pyrmont;
  
  public class RequestFacade implements ServletRequest {
    private ServletRequest 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 对象,即刻分配给私有的 servletRequest 对象引用。 还要注重,RequestFacade 内的每个方法调用 ServletRequest 对象内相应的方法。
  
  ResponseFacade 类也是如此。
  
  以下是 application 2 所包含的类 HttpServer2
  Request
  Response
  StaticResourceProcessor
  ServletProcessor2
  Constants
  HttpServer2 类类似于 HttpServer1,只是它在 await 方法内使用了 ServletProcessor2 而不是ServletProcessor1。
  
  if (request.getUri().startsWith("/servlet/")) {
    ServletProcessor2 processor = new ServletProcessor2();
    processor.process(request, response);
  }
  else {
    ...
  }
  ServletProcessor2 类也类似于 ServletProcessor1,只是在以下 process 方法的部分代码有点不同:
  
  Servlet servlet = null;
  RequestFacade requestFacade  = new RequestFacade(request);
  ResponseFacade responseFacade = new ResponseFacade(response);
  
  try {
    servlet = (Servlet) myClass.newInstance();
    servlet.service((ServletRequest) requestFacade,
      (ServletResponse) responseFacade);
  }
  
  编译并运行该应用程序 
  假如要编译该应用程序,在工作目录下键入以下命令:
  javac -d . -classpath ./lib/servlet.jar src/ex02/pyrmont/*.java
  假如要在 windows 下运行该应用程序,在工作目录下键入以下命令:
  java -classpath ./lib/servlet.jar;./ ex02.pyrmont.HttpServer2
  在 Linux 环境下,使用分号来隔开类库:
  java -classpath ./lib/servlet.jar:./ ex02.pyrmont.HttpServer2
  您可以使用和 application 1 相同的 URL 以收到同样的结果。
  
  总结
  本文讨论了简单的能够用于服务静态资源,以及处理如 PrimitiveServlet 一样简单的 servlet 的 servlet 容器。 同时也提供 javax.servlet.Servlet 的背景信息。
上一篇:编写 Servlet 2.3 Filter (一) 人气:630
下一篇:Servlet简介 人气:497
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-8-29 oblog v4.6 build 20080827
2008-8-29 ASBLOG v2.5 bulid 080828
2008-8-29 时尚DJ舞曲小偷 v3.1
2008-8-29 仿代码信息分类系统 v1.0 Beta3
2008-8-29 浮梦呓语-个人网站 完整版
2008-8-29 多用户QQ空间Flash播放器
2008-8-29 美思卡企业网站管理系统高级版
2008-8-28 LDV个人相册系统 v1.6.1
2008-8-28 讯时网站管理系统CMS v3.5
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号