网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
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 内部类.
.java接口用法学习--------------.
..NET真的战胜了J2EE吗?它能吗?.
.用J2SE 1.4进行Internet安全编程.
.Jive论坛与Spring框架.
.Eclipse Tomcat Jasper 入门.
.JBuilderX使用Ant读书笔记.
.Java正则表达式详解.
.如何迅速成为Java高手[Tomjava原.
.使用Runnable接口.
.Java入门-漫谈Java程序的性能优.
.JAVA实现:文件选择器中运行.exe.
.用jdk自带包操作XML.
.使用ObjectStream 进行写入和读出.
.保持你对Java的敏感度.
.JavaServer Faces (JSF) vs Stru.
.J2EE应用服务器JOnAS发布4.4.2 R.
.全面解析定义方法.
.关于JDBC检测数据库用户的问题.
.管理复杂应用性能管理实用方法(2).

Servlet容器工作原理讲解(三)

发表日期:2008-1-5


ServletProcessor1 类

ServletProcessor1 类用来处理对 servlet 的 HTTP 请求。 它非常简单,只包含了一个 process 方法。 而这个方法接受两个参数: 一个Javax.servlet.ServletRequest 实例和一个 avax.servlet.ServletResponse实例。 process 方法也构建了一个 java.net.URLClassLoader 对象并使用它装载 servlet 类文件。 在从类装载器获得的 Class 对象上,process 方法创建一个 servlet 实例并调用它的 service 方法。

process 方法

Listing 2.4. ServletProcessor1 类中 process 方法

public void process(Request request, Response response) {
    String uri            = request.getUri();
    String servletName    = uri.substring(uri.lastIndexOf("/") + 1);
    URLClassLoader loader = null;

    try {
        // create a URLClassLoader
        URLStreamHandler streamHandler = null;

        URL[] urls        = new URL[1];
        File classPath    = new File(Constants.WEB_ROOT);
        String repository = (new URL("file", null, 
            classPath.getCanonicalPath() + File.separator)).toString() 
        urls[0]           = new URL(null, repository, streamHandler);
        loader            = new URLClassLoader(urls);
    }
    catch (IOException e) {
        System.out.println(e.toString());
    }

    Class myClass = null;

    try {
        myClass = loader.loadClass(servletName);
    }
    catch (Exception e) {
        System.out.println(e.toString());
    }

    Servlet servlet = null;
    try {
        servlet = (Servlet) myClass.newInstance();
        servlet.service((ServletRequest) request, (ServletResponse) response);
    }
    catch (Exception e) {
        System.out.println(e.toString());
    }
    catch (Throwable e) {
        System.out.println(e.toString());
    }
}


process方法接受两个参数:一个 ServletRequest实例和一个 ServletResponse 实例。process方法通过调用 getRequestUri 方法从 ServletRequest获取 URI。

String uri = request.getUri();切记 URI 的格式:

/servlet/servletName

servletName是servlet类的名称。

假如要装载 servlet 类,则需要使用以下代码从 URI 获知 servlet 名称:String servletName = uri.substring(uri.lastIndexOf("/") + 1);然后 process 方法装载 servlet。 要做到这些,需要创建一个类装载器,并告诉装载器该类的位置, 该 servlet 容器可以指引类装载器在 Constants.WEB_ROOT 指向的目录中查找。 在工作目录下,WEB_ROOT 指向 webroot/ 目录。

假如要装载一个 servlet,则要使用 java.net.URLClassLoader 类,它是java.lang.ClassLoader 的间接子类。 一旦有了 URLClassLoader 类的实例,就可以使用 loadClass 方法来装载一个 servlet 类。 实例化 URLClassLoader 是很简单的。 该类有三个构建器,最简单的是:

public URLClassLoader(URL[] urls);

urls 是一组指向其位置 java.net.URL 对象, 当装载一个类时它会自动搜索其位置。任一以 / 结尾的 URL 都被假定为一目录, 否则,就假定其为 .jar 文件,在需要时可以下载并打开。

在一个 servlet 容器内,类装载器查找 servlet 类的位置称为储存库 (repository)。在所举的应用程序中,类装载器只可在当前工作目录下的 webroot/ 目录查找,所以,首先得创建一组简单的 URL。 URL 类提供了多个构建器,因此有许多的方法来构建一个URL 对象。 在这个应用程序内,使用了和 TOMCAT 内另外一个类所使用的相同的构建器。 该构建器头部 (signature) 如下:
上一篇:Servlet容器工作原理讲解(二) 人气:685
下一篇:String类使用的例子(2) 人气:668
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐