Open cihm opened 9 years ago
基本上會有一個Web.xml檔案(或者可以用annotation的方式設定),告訴我們的Container(Tomcat)當某一個路徑進來的時候,呼叫哪一個Servlet來處理。
這裡面的設定比較像servlet的對應。 這個裡面一定會有包含兩個element: servlet-name:表示代表這個servlet的名字,方便其他部份reference。在整個web.xml是不可以重複的。 servlet-class:代表著這個servlet的Class名稱。這邊需要Fully Qualified Name, 也就是包含package名稱 那servlet下面還可以代入預設參數。這個意思是,我們可以再處理request的時候,透過getInitParameter()的方式讀取一些預設在這邊的參數。 格式是init-para表示一個參數,而其下面則是param-name和param-value代表著key, Value。 servlet設定範例 <servlet> <servlet-name>Log4JInitServlet</servlet-name> <servlet-class>com.ws.controller.Log4JInitServlet</servlet-class> <init-param> <param-name>log4j-properties-location</param-name> <param-value>/WEB-INF/properties/log4j.properties</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
這裡面的設定比較像servlet的對應。 這個裡面一定會有包含兩個element: servlet-name:表示代表這個servlet的名字,方便其他部份reference。在整個web.xml是不可以重複的。 servlet-class:代表著這個servlet的Class名稱。這邊需要Fully Qualified Name, 也就是包含package名稱 那servlet下面還可以代入預設參數。這個意思是,我們可以再處理request的時候,透過getInitParameter()的方式讀取一些預設在這邊的參數。 格式是init-para表示一個參數,而其下面則是param-name和param-value代表著key, Value。 servlet設定範例
<servlet> <servlet-name>Log4JInitServlet</servlet-name> <servlet-class>com.ws.controller.Log4JInitServlet</servlet-class> <init-param> <param-name>log4j-properties-location</param-name> <param-value>/WEB-INF/properties/log4j.properties</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
這個部份是要設定什麼路徑使用什麼Servlet。 有兩個基本element: servlet-name:那一個servlet要對應到(上面設定servlet-name的對應) url-pattern:相對路徑下面所要對應。 servlet-mapping設定範例 <servlet-mapping> <servlet-name>Log4JInitServlet</servlet-name> <url-pattern>/Log4JInitServlet</url-pattern> </servlet-mapping> 表示只要url進來對應為/Log4JInitServlet,就使用在servlet定義的那個servlet-class作為處理的object。
這個部份是要設定什麼路徑使用什麼Servlet。 有兩個基本element: servlet-name:那一個servlet要對應到(上面設定servlet-name的對應) url-pattern:相對路徑下面所要對應。 servlet-mapping設定範例
<servlet-mapping> <servlet-name>Log4JInitServlet</servlet-name> <url-pattern>/Log4JInitServlet</url-pattern> </servlet-mapping>
表示只要url進來對應為/Log4JInitServlet,就使用在servlet定義的那個servlet-class作為處理的object。
Servlet 3.0後增加了@WebServlet 標註功能 只要Servlet上有這行標註,container就會自動讀取資訊 範例中的標註指的是這支Servlet會處理經由 /Log4JInitServlet這個虛擬路徑來的HTTP請求 @WebServlet標籤還能透過參數做更多的設定: @WebServlet(name="Log4JInitServlet", urlPatterns={"/Log4JInitServlet"}, loadOnStartup=1)
所以將標註當成預設值,web.xml進行管理也是可以的 設定的套用順序會是 標註 -> web.xml
設定Servlet連接
如何把一個Servlet從另一個Servlet區分呢?
1. 靠設定檔
servlet
servlet-mapping
2. Servlet 3.0後增加了@WebServlet 標註功能
1 and 2 's result
3. 參考 newsstandWS code (ControllerBase)