日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Servlet的学习笔记

發(fā)布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Servlet的学习笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 基本介紹
  • 入門步驟
  • 執(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 文件中配置如下:

<servlet><servlet-name>demo01</servlet-name><servlet-class>priv.lwx.javaex.web.servlet.ServletDemo01</servlet-class> </servlet> <servlet-mapping><servlet-name>demo01</servlet-name><url-pattern>/demo01</url-pattern> </servlet-mapping>

執(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。