Servlet的学习笔记
文章目錄
- 基本介紹
- 入門步驟
- 執(zhí)行原理
- Servlet 生命周期
- 線程安全問題
- 解決方式
- Servlet 注解配置
- Servlet 繼承與實現(xiàn)體系
基本介紹
servlet,server applet,服務(wù)器端小程序
servlet 是一個接口,定義了 Java 類被瀏覽器訪問(tomcat 識別)的規(guī)則。
我們需要自己定義一個類,實現(xiàn) Servlet 接口。
入門步驟
1.創(chuàng)建 JavaEE 項目
2.定義一個類,實現(xiàn) Servlet 接口或者繼承自 GenericServlet 或者 HttpServlet
public class ServletDemo01 implements Servlet # 實現(xiàn)多個方法 public class ServletDemo01 extends GenericServlet # 實現(xiàn)service方法 public class ServletDemo01 extends HttpServlet # 覆蓋重寫doGet和doPost方法3.實現(xiàn)接口中的抽象方法
4.配置 Servlet
在 web.xml 文件中配置如下:
執(zhí)行原理
1.當(dāng)服務(wù)器 tomcat 接受到客戶端瀏覽器的請求后,會解析請求 URL 路徑,獲取訪問的 Servlet 的資源路徑
2.解析 web.xml 文件,查找是否有對應(yīng)的 <url-pattern>
3.如果有,則找到對應(yīng)的 <servlet-class> 標簽,從而找到 Servlet 的全類名
4.tomcat 會將 Servlet 類的字節(jié)碼文件加載進內(nèi)存,再通過反射機制創(chuàng)建 Servlet 類的實例對象
5.最后會調(diào)用有關(guān)的方法
Servlet 生命周期
1.Servlet 被創(chuàng)建:執(zhí)行 init 方法,只執(zhí)行一次
在 web.xml 文件中的 <servlet> 標簽下通過 <load-on-startup> 標簽配置自然數(shù)值可以在服務(wù)器啟動時創(chuàng)建 Servlet 實例,值越小優(yōu)先級越高,服務(wù)器會按從小到大的順序創(chuàng)建 Servlet 實例。負數(shù)則表示第一次訪問 Servlet 時創(chuàng)建實例,默認值是 -1。
Servlet 的 init 方法,只執(zhí)行一次,說明一個 Servlet 在內(nèi)存中只存在一個對象, Servlet 是單例的。
多個用戶同時訪問時,可能存在線程安全問題。
2.提供服務(wù):執(zhí)行 service 方法,每次訪問都會執(zhí)行一次
3.被銷毀:執(zhí)行 destroy 方法,tomcat 正常關(guān)閉時執(zhí)行一次。
服務(wù)器關(guān)閉時 Servlet 被銷毀,在銷毀 Servlet 前會執(zhí)行一次 destroy 方法,用于釋放資源。
線程安全問題
Servlet 線程安全問題產(chǎn)生的原因:
在默認情況下,容器只會為每一個 Servlet 類創(chuàng)建唯一的一個實例,當(dāng)有多個請求到達容器,就有可能有多個線程同時訪問同一個實例。
解決方式
1.加鎖(可以對整個 service 方法加鎖或者對代碼塊加鎖,建議使用代碼塊加鎖)
2.讓 Servlet 實現(xiàn) SingleThreadModle 接口(不建議使用)
SingleThreadModel 接口是一個標識接口(沒有定義任何的方法)。容器會為實現(xiàn)該接口的 Servlet 創(chuàng)建多個實例,即一個線程分配一個。這種方式創(chuàng)建了過多的 Servlet 實例,系統(tǒng)開銷太多,不建議使用
3.盡量不要在 Servlet 中定義成員變量。如果一定要定義成員變量,則盡量設(shè)置成可讀的,不要去修改
Servlet 注解配置
Servlet 3.0 及以上版本支持注解配置,可以不需要 web.xml。
步驟:
1.創(chuàng)建 Java EE 項目,選擇 Servlet 的版本 3.0 及以上,可以不創(chuàng)建 web.xml
2.定義一個實現(xiàn) Servlet 接口的類
3.實現(xiàn)抽象方法
4.在類上使用 @WebServlet 注解進行配置
@WebServlet(urlPatterns = "資源路徑")
@WebServlet(value = "資源路徑")
@WebServlet("資源路徑")
以上三種方式都行,推薦最后一種方式。
資源路徑的格式:
1./xxx
2./xxx/xxx
3.*.do
@WebServlet("*.do")
Servlet 繼承與實現(xiàn)體系
HttpServlet 類對 http 協(xié)議進行了封裝,簡化操作。
自定義 Servlet 類時,通常是去繼承抽象類 HttpServlet,重寫 doGet 和 doPost 方法。
總結(jié)
以上是生活随笔為你收集整理的Servlet的学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓耗电快怎么解决(安卓耗电快)
- 下一篇: IntelliJ IDEA 的 Buil