Servlet基礎: server applet
* 1 概念:運行在服務器端的小程序
* Servlet就是一個接口,定義了Java類被瀏覽器訪問到(tomcat識別)的規則。
* 將來我們自定義一個類,實現Servlet接口,複寫方法。
* 2 快速入門:
1. 創建JavaEE項目
2. 定義一個類,實現Servlet接口
* public class ServletDemo1 implements Servlet
3. 實現接口中的抽象方法
4. 配置Servlet
在web.xml中配置:
<!--配置Servlet -->
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>web.servlet.ServletDemo1</servlet-class> <!--給全類名起了一個名 -->
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
* 3 執行原理:
1. 當服務器接受到客戶端瀏覽器的請求後,會解析請求URL路徑,獲取訪問的Servlet的資源路徑
2. 查找web.xml文件,是否有對應的<url-pattern>標籤體內容。
3. 如果有,則再找到對應的<servlet-class>全類名(web.servlet.ServletDemo1)
4. tomcat會將字節碼文件加載進內存,並且創建其對象
5. 調用其方法
* 4 Servlet的方法
1. init方法:在Servlet被創建時執行,只會執行一次
2. Service方法:每一次Servlet被訪問時執行,執行多次
3. destroy:銷燬方法,在Servlet被殺死時執行,服務器正常關閉時執行,只執行一次。
4. getServletConfig方法:瞭解
5. getServletInfo()方法:獲取Servlet的信息,瞭解。
* 5 Servlet中的生命週期方法:
1. 被創建:執行init方法,只執行一次
* Servlet什麼時候被創建?
* 默認情況下,第一次被訪問時,Servlet被創建
* 可以配置執行Servlet的創建時機,配置web.xml文件。
* 在<servlet>標籤下配置
1. 第一次被訪問時,創建
* <load-on-startup>的值爲負數
2. 在服務器啓動時,創建
* <load-on-startup>的值爲0或正整數
* Servlet的init方法,只執行一次,說明一個Servlet在內存中只存在一個對象,Servlet是單例的
* 多個用戶同時訪問時,可能存在線程安全問題。
* 解決:儘量不要在Servlet中定義成員變量。即使定義了成員變量,也不要對其修改值,避免併發安全問題
2. 提供服務:執行service方法,執行多次
* 每次訪問Servlet時,Service方法都會被調用一次。
3. 被銷燬:執行destroy方法,只執行一次
* Servlet被銷燬時執行。服務器關閉時,Servlet被銷燬
* 只有服務器正常關閉時,纔會執行destroy方法。
* destroy方法在Servlet被銷燬之前執行,一般用於釋放資源
Servlet3.0:支持註解配置
* Servlet3.0:
* 好處:
* 支持註解配置。可以不需要web.xml了。簡便配置
* 步驟:
1. 創建JavaEE項目,選擇Servlet的版本3.0以上,可以不創建web.xml
2. 定義一個類,實現Servlet接口
3. 複寫方法
4. 在類上使用@WebServlet註解,進行配置,一行註解取代以前的xml配置<servlet>、<servlet-mapping>過程
@WebServlet("資源路徑")
Servlet的體系結構
Servlet的體系結構
Servlet -- 接口
|
GenericServlet -- 抽象類
|
HttpServlet -- 抽象類
* GenericServlet:將Servlet接口中其他的方法做了默認空實現,只將service()方法作爲抽象。(實際開發不常用)
* 將來定義Servlet類時,可以繼承GenericServlet,實現service()方法即可
* HttpServlet:對http協議的一種封裝,簡化操作,已經實現了Servlet接口的所有方法。只需去重寫doGet/doPost等方法
1. 定義類繼承HttpServlet
2. 複寫doGet/doPost方法
Servlet相關配置
Servlet相關配置
1. urlpartten:Servlet訪問路徑
1. 一個Servlet可以定義多個訪問路徑 : @WebServlet({"/d4","/dd4","/ddd4"})
2. 路徑定義規則:
1. /xxx:路徑匹配
2. /xxx/xxx:多層路徑,目錄結構
3. *.do:擴展名匹配
IDEA與tomcat的相關配置
1. IDEA會爲每一個tomcat部署的項目單獨建立一份配置文件
* 查看控制檯的log:Using CATALINA_BASE: "C:\Users\me\.IntelliJIdea2019.2\system\tomcat\Tomcat_8_5_31_Servlet"
2. 工作空間項目 和 tomcat部署的web項目
* tomcat真正訪問的是“tomcat部署的web項目”,"tomcat部署的web項目"對應着"工作空間項目" 的web目錄下的所有資源
* WEB-INF目錄下的資源不能被瀏覽器直接訪問。
3. 斷點調試:使用"小蟲子"啓動 dubug 啓動