程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> [Servlet&JSP] 部署描述設置

[Servlet&JSP] 部署描述設置

編輯:關於JSP

[Servlet&JSP] 部署描述設置


Servlet的設置

以下是在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類加載、實例化並做好初始化動作,就可以使用設置。設置大於0的值,表示在啟動應用程序後就要初始化Servlet。數字表示了Servlet的初始化順序,如果有多個Servlet在設置時使用了相同的數字,則按其在web.xml中設置的順序來初始化Servlet。

別嘗試在所有的Servlet上都設置。越多的Servlet在應用程序啟動時被初始化,表示應用程序的啟動越花時間。只有在那些初始時會加載比較多資源的Servlet上才設置,像是web框架(Framework)中擔任前端控制器(Front Controller)角色的Servlet。

可以在中設置三種模式:完全符合模式
必須以斜槓(/)作為開頭,也就是以web應用程序環境根目錄開始,指定完整的URL模式。如:

<url-pattern>/admin/login.do</url-pattern>


指定某個目錄下的所有URL都交由某個Servlet來處理,則可以在目錄斜槓(/)後加上星號(*)。如

<url-pattern>/guest/*</url-pattern>


指定以某個擴展名為結尾的所有URL請求都交由對應的Servlet處理,則可以使用星號(*)作為開頭,並加上擴展名。

<url-pattern>*.do</url-pattern>

不能混用目錄符合模式與擴展名符合模式,即不能出現如/admin/*.do這樣的URL模式設置。

如果有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類型。若應用程序中使用到了MIME類型,可以在web.xml中設置擴展名與MIMIE類型對應。例如:

<web-app ...>
    <error-page>
        <error-code>404</error-code>
        <location>/404.jsp</location>
    </error-page>
</web-app>

設置文件的擴展名,而設置對應的MIME類型名稱。如果想要知道某個文件的MIME類型名稱,則可使用ServletContext的getMimeType()方法,這個方法讓你指定文件名稱,然後根據web.xml總設置的對應擴展名,取得MIME類型的名稱。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved