Servlet本質上就是一個java類,只不過運行在Servlet容器中。
Servlet 簡介
- Java Servlet 是和平臺無關的服務器組件,它運行在Servlet容器中。Servlet容器負責Servlet和客戶的通信以及調用Servlet方法,Servlet和客戶的通信採用”請求/響應”的模式。
- Servlet可完成一下功能
- 創建並返回客戶請求的動態HTML頁面。
- 創建可嵌入到現有HTML頁面中的部分HTML頁面。
- 與其他服務器資源進行通信。
Servlet容器響應客戶請求的過程
- 1.Servlet引擎檢查是否已經裝載並創建該Servlet實例對象,有4否2
- 2.裝載並創建Servlet的一個實例對象:調用該Servlet的構造器
- 3.調用init()方法。
- 4.創建一個用於封裝請求的ServletRequest對象和一個代表響應消息的ServletReponse,然後調用Servlet的service()方法並將請求和響應對象作爲參數傳遞進去。
- 5.Web程序在停止或重新啓動前,Servlet引擎卸載Servlet,並在卸載之前調用Servlet的destroy()方法。
Servlet生命週期方法:
都是被Servlet容器負責調用
1.構造器:只有第一次請求servlet時,創建Serrvlet的實例,是單實例的。(如果在web.xml中配置load-on-startup值爲正數,在web應用被Servlet容器加載時創建實例,數值越小越早被創建。)
2.init方法:只調用一次,創建實例後調用,初始化當前Servlet。
3.service:每次請求都會調用service方法。
4.destory:終止程序前,被調用,釋放當前servlet所佔用的資源。
Servlet註冊和運行
- Servlet程序必須通過Servlet容器來運行,並且存儲目錄有特殊要求,通常要求存儲在WEB-INF/classes目錄中。
- Servlet程序必須在WEB引用程序的Web.xml文件中進行註冊和映射其訪問路徑,纔可以被Servlet引擎加載和被外界訪問。
- 一個Servlet元素用於註冊一個Servlet,它包含倆個主要的子元素:servlet-name和servlet-class,分別用來設置servlet的註冊名稱和Servlet完整類名。
- 一個Servlet-mapping元素用於映射一個已註冊的Servlet的一個對外訪問路徑,它包含倆個子元素:servlet-name和url-pattern分別用於指定Servlet的註冊名稱和對外訪問路程。
Servlet註冊細節
- 同一個Servlet可以被映射到多個URL上,即多個servlet-mapping的子元素servlet-name的設置值可以是一個Servlet的註冊名。
- 在Servlet映射的URL可以使用*通配符,但只能是倆種固定格式:一種是”.擴展名”,另外一種是以正斜槓(/)開頭並以” /“結尾。
<servlet-mapping>
<servlet-name>anyna</servlet-name>
//擴展名匹配:表示可以訪問以.do結尾路徑
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>anyna</servlet-name>
//目錄匹配 表示可以訪問action下任意內容
<url-pattern>/action/*</url-pattern>
</servlet-mapping>
Servletconfig對象
- 先配置servlet初始化參數
web.xml
<!-- 節點必須在load-on-startup前面-->
<init-param>
<!--參數名 -->
<param-name>jdbc</param-name>
<!--參數值 -->
<param-value>mysql</param-value>
</init-param>
- 獲取servlet初始化參數
getInitParameter(String name):獲取指定的參數名的初始化參數。
String name=servletConfig.getInitParameter("jdbc")
getInitParameterNames():獲取參數名組成的Enumeration對象
Enumeration<String> names=servletConfig.getInitParameterNames()
獲取Servlet的配置名稱(瞭解)
getServletName()getServletContext()
ServletContext對象
- Servlet引擎爲每一個Web應用程序都創建一個對應的ServletContext對象,ServletContext對象被包含在ServletConfig對象中,調用ServletConfig.getServletContext方法可以返回ServletContext對象的引用。
- 由於一個Web應用的所有Servlet都共享一個ServletContext對象。所以Servlet對象被稱之爲application對象(Web應用程序對象)。
- 功能
-獲取Web應用程序的初始化參數
記錄日誌
application域範圍的屬性
訪問資源文件
獲取虛擬路徑所映射的本地路徑
WEB應用程序之間的訪問
ServletContext的其他方法 - 配置當前Web應用初始化參數
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
- 獲取Web應用初始化參數
getInitParameter()
ServletContext servletContext=servletConfig.getServletContext();
String driver=servletContext.getInitParameter("driver");
getInitParameterNames()
Enumeration<String> names=servletContext.getInitParameterNames()
- 獲取Web應用的某一個文件的絕對路徑(必須在WebContent裏面)
getRealPath 獲取項目路徑
getContextPath獲取當前Web應用某一個文件對應輸入流
getResourceAsStream(String path)