使用Servlet激活器... 5
缺省Servlet 6
Tomcat中的類裝載器... 6
Servlet 8
Servlet路徑映射... 8
ServletConfig接口... 9
獲取ServletContext對象(getServletContext)... 9
獲取Servlet的注冊名(getServletName)... 9
獲取Servlet初始化參數(getInitParameter)... 9
GenericServlet與HttpServlet類... 10
init方法... 10
service方法... 10
getServletInfo方法... 11
doXxx方法... 11
瀏覽器緩存與getLastModified方法... 13
ServletContext 16
獲取web應用的初始化參數(getInitParameter)... 16
記錄日志(log)... 17
訪問資源文件(getResourcePaths)... 17
將虛擬路徑轉換成本地路徑(getRealPath)... 18
Web應用程序之間的訪問(getContext)... 19
其他方法(getMajorVersion、getMimeType、getServerInfo)... 19
使用Servlet激活器配置一個Servlet時,一般要在自己項目中的web.xml配置<servlet>與<servlet-mapping>兩個元素,但con/web.xml中為我們提供了一個名叫invoker的Servlet(5.5.30中已被注釋掉,我們需要去掉),如下:
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
它可以根據URL中提供的Servlet類信息而自動激活這個Servlet,而不需要我們再在自己的應用中的web.xmlj里另外配置一<servlet>,只需要配置<servlet-mapping>即可,配置如下:
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
如現在有這樣一個Servlet:mypak.HelloWorldServlet,則這樣可以訪問http://localhost:8080/myapp/servlet/mypak.HelloWorldServlet。注意,每個Web應用程序中為Servlet激活器所映射的訪問路徑可以各不相同,但必須以“/*”結尾(比如這里去掉前面的/servlet也可以)。經過這樣的設置以后,即使某個Servlet程序沒有在web.xml文件中進行注冊,我們只需要將Servlet激活器所映射的訪問路徑中的通配符(*)替換為這個Servlet的完整類名,就可以通過Servlet激活器來調用這個Servlet程序。
缺省Servlet如果某個Servlet的映射路徑(<servlet-mapping>元素中的<url-pattern>元素的值)僅僅為一個正斜杠(/),那么這個Servlet就成為當前Web應用程序的缺省Servlete。凡是在web.xml文件中找不到匹配的<servlet-mapping>元索的URL,它們的訪問請求都將交給缺省Servlet處理,也就是說,缺省Servlet用于處理所有其他Servlet都不處理的訪問請求。在<tomcat的安裝目錄>/conf/web.xml文件中,注冊了一個名稱為org.apache.catalina.servlets.DefaultServlet的Servlet,并將這個Servlet設置為缺省Servlet。由于<tomcat的安裝目錄>/conf/web.xml文件的設置信息對該服務器上的所有Web應用程序都起作用,所以,服務器上的所有Web應用程序的缺省Setvlet都是org.apacbe.catalina.servlets.DefaultServlet。
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
…
</servlet>
當訪問Tomcat服務器中的某個靜態HTML文件和圖片時,實際上是在訪問這個缺省Setvlet,而這個缺省Servlet的處理方式通常是把靜態資源中的內容按字節原封不動地讀出來,然后再按字節流原封不動傳遞給客戶端,并且生成一些響應消息頭字段,例如,根據靜態資源的擴展名所映射的MIME類型生成Content-Type頭字段,根據靜態資源的大小生成Content-Length頭字段。
如果將conf/web.xml下的默認Servlet注釋掉,則非Servlet與Jsp資源將不能訪問:
<!--servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping-->
注意,
新聞熱點
疑難解答