WEB專案-Servlet(簡介、生命週期、訪問路徑、ServletContext物件、域物件)
Servlet簡介
什麼是Servlet:
- Servlet是一個介面,下面有5個方法
- Servlet有兩個實現類,GenericServlet和HttpServlet
Servlet的作用:
- Servlet是一個小型的Java程式,執行在伺服器端
- Servlet接收和響應從客戶端傳送過來的請求,使用的是HTTP協議
編寫一個Servlet程式
(1)編寫一個類,實現Servlet介面,重寫5個方法
(2)在web.xml中配置Servlet的配置檔案
<!-- 配置Servlet的資訊 --> <servlet> <!-- 給Servlet指定名稱(值是任意的) --> <servlet-name >ServletDemo1</servlet-name> <!-- 配置Servlet類的類名加包名(Class.forName()) --> <servlet-class>com.demo.ServletDemo1</servlet-class> </servlet> <!-- 配置訪問的路徑 --> <servlet-mapping> <!-- 配置Servlet的名稱,servlet-mapping節點下的servlet-name和servlet節點下的servlet-name的值必須是相同的 --> <servlet-name>ServletDemo1</servlet-name> <!-- 配置Servlet的訪問路徑 http://localhost:8080/Servlet/demo1 --> <url-pattern>/demo1</url-pattern>
(3)將專案新增到伺服器中,啟動伺服器,就可以訪問ServletDemo1
Servlet的生命週期
Servlet例項被Tomcat伺服器來建立,第一次訪問的時候建立(在記憶體有一個例項(單例模式)),立即呼叫init方法進行初始化的操作,使用service方法對外提供服務(有一個請求,例項開啟一個新執行緒,處理請求的內容),有一次請求,service就被呼叫一次。Tomcat伺服器關閉或者移除專案的時候,Servlet被銷燬,但是例項在銷燬之前會呼叫destroy方法進行一些銷燬操作(釋放一些資源),destory方法只調用一次。
Servlet的類之間的關係
Servlet介面
|
GenericServlet(5個方法全部重寫了)
|
HttpServlet(service方法重寫了)
開發Servlet程式:
(1)編寫一個類,繼承HttpServlet
(2)重寫兩個方法doGet()和doPost()
(3)在web.xml中配置Servlet的相關資訊
一般情況下,doGet()和doPost()方法中的邏輯都是相同的,可以互相呼叫,簡化操作。
Servletp配置訪問路徑
web.xml中servlet標籤中的<url-pattern></url-pattern>標籤,中間加上訪問路徑
- 完全路徑匹配
<url-pattern>/servlet/Servlet1</url-pattern>
訪問路徑:http://localhost:8080/Demo/servlet/Servlet1
- 目錄匹配
<url-pattern>/*</url-pattern>
訪問路徑:http://localhost:8080/Demo/xxx(任意)
- 副檔名匹配
<url-pattern>*.do或者*.action</url-pattern>
訪問路徑:
http://localhost:8080/Demo/xxx.do或者xxx.action
- 優先順序
完全路徑匹配>目錄匹配>副檔名路徑
ServletConfig物件
獲取關於配置了Servlet的配置資訊
ServletConfig config = getServletConfig();
String configName = config.getServletName();
System.out.println(configName);
ServletContext物件
一個Web專案只有一個ServletContext物件,可以被Web專案中的所有Servlet所共享,通過ServletContext來傳遞資料
Tomcat伺服器一啟動,會為每一個Web專案建立一個ServletContext物件,伺服器關閉的時候ServletContext物件就銷燬了
- 獲取ServletContext物件
-- 通過ServletConfig物件獲取 getServletContext()
-- 通過繼承GenericServlet類獲取 getServletContext()
域物件
- 域物件可以在多個Servlet中傳遞資料
- 可以向域物件存入資料
setAttribute("屬性名","屬性值");底層是Map集合,屬性名相同,屬性值不同會覆蓋。
- 可以從域物件中獲取資料
Object = getAttribute("屬性名稱");
- 從域物件中刪除屬性
removeAttribute("屬性名稱");
ServletContext的作用
(1)獲取全域性的初始化引數(和ServletConfig不同,ServletConfig只能獲取當前Servlet的初始化引數)
String getInitParameter(String name)
Enumeration getInitParameterNames()
配置全域性初始化引數
(2)實現資料的共享
- void setAttribute(String name, Object object) 設定屬性的值
- Object getAttribute(String name) 獲取屬性的值
- void removeAttribute(String name) 刪除屬性的值
- Enumeration getAttributeNames() 獲取屬性的名稱們
(3)讀取資原始檔