国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 15:18:35
字體:
來源:轉載
供稿:網友
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) 如下:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 射洪县| 西丰县| 始兴县| 聂拉木县| 阿图什市| 惠州市| 汶上县| 东台市| 宁远县| 周至县| 临沂市| 沽源县| 忻城县| 定安县| 泸西县| 丹阳市| 和政县| 施甸县| 博客| 清水河县| 靖宇县| 察哈| 志丹县| 大方县| 钦州市| 锡林郭勒盟| 莱阳市| 那曲县| 潼关县| 张家港市| 安图县| 曲阜市| 开江县| 元谋县| 瑞昌市| 利川市| 应城市| 文水县| 济阳县| 呼伦贝尔市| 于田县|