cihm / javaGuidelines

javaGuidelines
0 stars 1 forks source link

Introduction Servlet #4

Open cihm opened 9 years ago

cihm commented 9 years ago

設定Servlet連接

如何把一個Servlet從另一個Servlet區分呢?

  1. 靠設定檔。
  2. Servlet 3.0後增加了@WebServlet 標註功能
  3. 參考 newsstandWS code (ControllerBase)

1. 靠設定檔

基本上會有一個Web.xml檔案(或者可以用annotation的方式設定),告訴我們的Container(Tomcat)當某一個路徑進來的時候,呼叫哪一個Servlet來處理。

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-mapping

這個部份是要設定什麼路徑使用什麼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。

2. Servlet 3.0後增加了@WebServlet 標註功能

Servlet 3.0後增加了@WebServlet 標註功能 只要Servlet上有這行標註,container就會自動讀取資訊 範例中的標註指的是這支Servlet會處理經由 /Log4JInitServlet這個虛擬路徑來的HTTP請求 @WebServlet標籤還能透過參數做更多的設定: @WebServlet(name="Log4JInitServlet", urlPatterns={"/Log4JInitServlet"}, loadOnStartup=1)

1 and 2 's result

  • 所以將標註當成預設值,web.xml進行管理也是可以的
  • 設定的套用順序會是 標註 -> web.xml

3. 參考 newsstandWS code (ControllerBase)