以下是在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>