Servlet基礎/概念
阿新 • • 發佈:2020-08-10
Servlet原理
概念:是一個Java類,沒有主方法,執行在伺服器端的小程式,由Tomcat執行。
本質:是一個介面,定義了Java類被伺服器識別的規則。我們需要自定義類,實現Servlet介面,重寫方法。
快速入門(實現一個Servlet類):
-
建立JavaEE模組;
-
定義一個類,實現Servlet介面,重寫方法
-
配置Servlet,在WEB-INF中的web.xml檔案中
注意,放在
<web-app>
標籤內<!--配置servlet--> <!--給servlet起一個名--> <servlet> <servlet-name>demo1</servlet-name> <servlet-class>baidu.servlet.ServletDemo1</servlet-class> </servlet> <!--servlet的對映路徑--> <servlet-mapping> <servlet-name>demo1</servlet-name> <url-pattern>/demo1</url-pattern> </servlet-mapping>
Tomcat執行原理(Tomcat要訪問Servlet的實現類,用到反射機制):
- 伺服器收到客戶端的請求,解析URL,獲取訪問Servlet的資源路徑;
- 查詢web.xml檔案,找到對應的全類名;
- 將全類名對應的位元組碼檔案載入進記憶體,並建立其物件;
- 呼叫其中的方法。
Servlet方法
五個方法:
void init()
初始化方法,伺服器開啟時執行,載入資源void destroy()
銷燬方法,伺服器正常關閉時執行,釋放資源void service()
提供服務方法,每次都執行ServletConfig getServletConfig()
獲取ServletConfig物件String getServletInfo()
獲取Servlet資訊,一般不用。
Servlet生命週期
- 被建立:執行init方法,只執行一次
- 被銷燬:執行destroy方法,只執行一次
- 提供服務:執行service方法,執行多次
init()
-
執行時刻:(可以在web.xml中的servlet標籤下配置)
-
啟動伺服器時建立(預設):
<load-on-startup>0或正數<load-on-startup>
-
第一次訪問時建立:
<load-on-startup>負數<load-on-startup>
-
-
多個使用者訪問時,可能存線上程安全問題:
- 解決方法:儘量不要定義成員變數 或修改
Servlet3.0
好處:
- 支援註解配置,可以不用web.xml
步驟:
- 建立JavaEE專案,選擇Servlet的版本在3.0以上,不用選web.xml檔案。
- 定義一個類,實現servlet介面,重寫方法
- 在類上使用
@WebServlet("/demo")
註解,其中/demo表示資源路徑名
注意:
- 一個servlet可以定義多個訪問路徑:
@WebServlet({"/demo1", "/demo2"})
- 兩層路徑:
@WebServlet("/demo/*")
,其中星號表示所有字串都可以
IDEA與Tomcat專案
- IDEA會為每一個web專案單獨建立一份配置檔案:
- 具體位置:檢視控制檯的log:
Using CATALINA_BASE: "C:\Users\..."
- IDEA在run->edit config->tomcat的Deployment介面可實現配置
- 具體位置:檢視控制檯的log:
- IDEA的
專案工作空間
和Tomcat部署的web專案
分離:- Tomcat訪問
Tomcat部署的web專案
Tomcat部署的web專案
(在專案out資料夾內)對應著專案工作空間
的web目錄下所有資源- WEB-INF目錄下的資源不能被瀏覽器直接訪問。
- Tomcat訪問
Servlet體系結構
servlet介面的實現類:
- GenericServlet:只需要重寫service方法,其他方法已經預設空實現。
- HttpServlet:對http協議的封裝,簡化操作:(推薦使用)
- 定義類繼承HttpServlet
- 重寫doGet/doPost方法
原因:
servlet中的service方法是為了處理http請求,第一步就要判斷http請求是那種協議:
get/post等一共7中,所以,我們要在HttpServlet繼承類中重寫常用的doGet/doPost方法。