以下是在web.xml中設置servlet的范例片段:
<servlet>
<servlet-name>Some</servlet-name>
<servlet-class>club.chuxing.SomeServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<init-param>
<param-name>param1</param-name>
<param-value>value1</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Some</servlet-name>
<url-pattern>/Some.do</url-pattern>
</servlet-mapping>
當web應用程序啟動後,事實上並沒有加載所有的Servlet。容器會在請求時,才將對應的Servlet類加載、實例化並進行初始動作,然後再調用service()方法來處理請求。
如果希望在應用程序啟動時,就先把Servlet類加載、實例化並做好初始化動作,就可以使用
別嘗試在所有的Servlet上都設置
可以在
必須以斜槓(/)作為開頭,也就是以web應用程序環境根目錄開始,指定完整的URL模式。如:
<url-pattern>/admin/login.do</url-pattern>
指定某個目錄下的所有URL都交由某個Servlet來處理,則可以在目錄斜槓(/)後加上星號(*)。如
<url-pattern>/guest/*</url-pattern>
指定以某個擴展名為結尾的所有URL請求都交由對應的Servlet處理,則可以使用星號(*)作為開頭,並加上擴展名。
<url-pattern>*.do</url-pattern>
不能混用目錄符合模式與擴展名符合模式,即不能出現如
如果有URL模式設置比對的規則在某些URL請求時有所重疊,則請求時比對的原則依完全模式、目錄模式、擴展名模式的順序來決定,也就是從最嚴格的模式開始符合。
在設置過濾器時,<filter-mapping>上也可以設置<url-pattern>標簽,設置的原則與<servlet-mapping>上的<url-pattern>是相同的。在Servlet2.5版本之後,可以直接在同一個<servlet-mapping>中設置多個<url-pattern>。例如:
<servlet-mapping>
<servlet-name>Some</servlet-name>
<utl-pattern>/something.do</utl-pattern>
<utl-pattern>/someone.do</utl-pattern>
</servlet-mapping>
同樣的,也可以在
<filter-mapping>
<filter-name>Some</filter-name>
<utl-pattern>/something.do</utl-pattern>
<utl-pattern>/someone.do</utl-pattern>
<servlet-name>Other</servlet-name>
</filter-mapping>
如果用戶用戶請求某個類似於/BookmarkOnline/user的URL,而user在Servlet的URL模式設置中並不存在,它只是一個目錄,若不想用戶看到資源不存在之類的錯誤信息,則可以設置默認的歡迎頁面,在用戶請求某個目錄時可以自動挑選歡迎頁面加以顯示。
<web-app ...>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
設置
如果在存取應用程序的時候發生了異常或者錯誤,而沒有在Servlet/JSP中處理這個異常或錯誤,則最後會由容器加以處理,一般容器就是直接顯示異常信息與堆棧跟蹤信息。如果希望容器發現這類異常或者錯誤時,可以自動轉發到某個URL,則可以在web.xml中使用
例如,若想要在容器收到某個類型的異常對象時進行轉發,則可以做如下設置:
java.lang.NullPointerException /report.view
如果想要基於HTTP的錯誤代碼轉發到處理頁面,則要搭配
<web-app ...>
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/report.view</location>
</error-page>
</web-app>
這個設置在自行使用HttpServletResponse的sendError()送出錯誤狀態碼時也有作用,因為sendError()只是告知容器,以容器的默認方式或web.xml中的設置來產生錯誤狀態碼的信息。
當自動響應串流給浏覽器時,為了讓浏覽器知道如何處理收到的串流對象,必須告知MIME類型。若應用程序中使用到了MIME類型,可以在web.xml中設置擴展名與MIMIE類型對應。例如:
<web-app ...>
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
</web-app>