日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Tomcat 详解 一

發布時間:2024/1/17 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Tomcat 详解 一 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

一、ContainerServlet 類。
org.apache.catalina.ContainerServlet ?是一個接口類,它可以訪問Catalina的內部功能,它有Catalina被類加載器加載,而不是我們的WebApplication類加載器。它的Setter方法在這個Servlet的新的實例被放進Service時被執行。
??? 我們使用它獲取 Engine, Host,? Context等內部對象。要使用這個類必需在Context配置中使 privileged="true" 如下: <Context docBase="D:/upload" path="/upload" privileged="true"/>

要獲取Tomcat的訪問控制權限,我們需要一個實現org.apache.catalina.ContainerServlet接口的Servlet,該接口有兩個方法,getWrapper和setWrapper,Tomcat啟動的時候,會使用setWrapper方法注入org.apache.catalina.Wrapper接口的一個實例,通過這個接口,我們可以獲取到Tomcat中所有的容器對象,包括Server,Service,Engine,Host和Context,和server.xml配置文件的標簽。
例子:
測試類:

package com.web.servlet;import javax.servlet.http.HttpServlet;import org.apache.catalina.Container; import org.apache.catalina.ContainerServlet; import org.apache.catalina.Context; import org.apache.catalina.Engine; import org.apache.catalina.Host; import org.apache.catalina.Wrapper;/*** @author WallenHeng* @date 2014-5-4 下午2:23:42*/public class TestServlet extends HttpServlet implements ContainerServlet {/*** */private static final long serialVersionUID = 1L;private Wrapper wrap;private Context context = null;private Host host = null;private Engine engine = null;@Overridepublic Wrapper getWrapper() {System.out.println("getWrapper");return wrap;}@Overridepublic void setWrapper(Wrapper wrap) {System.out.println("setWrapper");this.wrap = wrap;System.out.println("wrap:" + this.wrap);if (this.wrap == null) {context = null;host = null;engine = null;} else {context = (Context) this.wrap.getParent();host = (Host) context.getParent();engine = (Engine) host.getParent();System.out.println("context:" + context + "\thost:" + host+ "\tengine:" + engine);Container[] hosts = engine.findChildren();System.out.println("hosts.length:" + hosts.length);System.out.println(context.getDocBase());Container[] contexts=host.findChildren();for (Container container : contexts) {if(container instanceof Context){Context c=(Context)container;if("/upload".equalsIgnoreCase(c.getPath())){System.out.println(c.getDocBase());}}}}}}

配置文件:

<servlet><servlet-name>TomcatContextServlet</servlet-name><servlet-class>com.web.servlet.TestServlet</servlet-class><load-on-startup>1</load-on-startup> </servlet>

設置<load-on-startup>使這個Servlet在WebContainer初始化時加載,否則它將沒有加載的機會,因為我們在應用中不會直接使用到這個Servlet。

load-on-startup?這個元素的含義是在服務器啟動的時候就加載這個servlet(實例化并調用init()方法).這個元素中的可選內容必須為一個整數,表明了這個servlet被加載的先后順序.當是一個負數時或者沒有指定時,則表示服務器在該servlet被調用時才加載。當值為0或者大于0時,表示服務器在啟動時就加載這個servlet.該容器肯定可以保證被標記為更小的整數的servlet比被標記為更大的整數的servlet更先被調用,還可已選擇同樣的load-on-start-up值來夾在servlets.

補充:正數的值越小,啟動該servlet的優先級越高。






轉載于:https://my.oschina.net/wallenheng/blog/233028

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Tomcat 详解 一的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。