一、Servlet與線程安全
因為一個類型的Servlet隻有一個執行個體對象,那麼就有可能會顯示出一個servlet同時處理多個請求,那麼servlet是否為線程安全的呢?答案是:“不是線程安全的”。這說明servlet的工作效率很高,但是也存線上程安全問題!
是以我們不應該在servlet中随便的建立成員變量,因為可能會存在一個線程對這個成員變量進行寫操作,另一個線程對這個成員變量進行讀操作。
是以我們盡可能的做到以下幾點:
- 不要在servlet中建立成員,建立局部變量即可。
- 可以建立無狀态成員。
- 可以建立有狀态的成員,但狀态必須為隻讀的。
二、讓伺服器在啟動時就建立Servlet
預設情況下,伺服器會在某個Servlet第一次收到請求時建立它。也可以在web.xml中對Servlet進行配置,是伺服器啟動時就建立Servlet。
在
<servlet>
标簽中配置
<load-on-startup>
标簽,裡面的值是一個非負的整數,可以在多個servlet中都做這樣的配置,這樣都會在伺服器啟動的時候建立servlet。但是多個servlet都是在啟動時建立,是以用這個值來決定它們之間的順序,數值越小,越先啟動。
三、<url-pattern>
<url-pattern>
是
<servlet-mapping>
的子元素,用來指定Servlet的通路路徑,即URL。它必須是以“/”開頭。
1)
可以在
<servlet-mapping>
中給出多個
<url-pattern>
,例如:
<servlet-mapping>
<servlet-name>XXX</servlet-name>
<url-pattern>/AServlet</url-pattern>
<url-pattern>/BServlet</url-pattern>
</servlet-mapping>
那麼這說明一個servlet綁定了多個URL,這樣無論通路/AServlet還是/BServlet,通路的都是同一個servlet。
2)
還可以在
<url-pattern>
中使用通配符,所謂通配符就是星号“ * ”,星号可以比對任何的URL字首或者字尾,使用通配符可以命名一個servlet綁定一組URL,例如:
-
:/Servlet/a、/Servlet/b,都比對/Servlet/*;<url-pattern>/Servlet/*</url-pattern>
-
:/abc/def/ghi.do、/a.do,都比對*.do;<url-pattern>*.do</url-pattern>
-
:比對所有URL。<url-pattern>/*</url-pattern>
請注意,通配符要麼為字首,要麼為字尾,不能出現在URL中間位置,也不能隻有通配符。例如:
/*.do
就是錯誤的,因為星号出現在URL的中間位置上了。
*.*
也是不對的,因為一個URL中最多隻能出現一個通配符。
注意,通配符是一種模糊比對URL 的方式,如果存在更具體的<url-pattern>,那麼通路路徑會去比對具體的<url-pattern>。
四、web.xml檔案的繼承
每個完整的JavaWeb應用中都需要有web.xml,但是我們不知道所有的web.xml檔案都有一個共同的父檔案,它在Tomcat的conf/web.xml路徑。在這個檔案裡面的内容,相當于寫在了每個項目的web.xml中。
-
DefaultServlet
其中有兩段:
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
我們可以看到,它的路徑資訊是“/”,它的優先級最低,也就是當一個請求沒有任何servlet處理的時候,它就會處理,也就是顯示404頁面。<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
- jspServlet
這個servlet會響應我們的請求,把動态資源轉換成靜态資源。然後響應給浏覽器。<servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet>
- session的過期時間
<session-config> <session-timeout>30</session-timeout> </session-config>
session的過期時間為30分鐘。
- mine-mapping 後面大段大段的mine-mapping是各種檔案擴充名對應的mime類型。
end.