Servlet概述(Ⅰ)

目錄

一、Servlet概述

演示

創建JavaWeb項目(2017版本為例)

1. 打開 IntelliJ IDEA

2. 選擇項目類型

3. 配置框架

二、Servlet初識(熟練)

1.servlet說明

2.Servlet 接口方法

3.創建Servlet

4.JavaWeb請求響應流程

?編輯

?編輯

5.servlet生命周期

Servlet 基礎

Servlet 接口方法

Servlet 生命周期

Servlet 實例管理

Tomcat 的角色

總結

三、HttpServlet(精通)

1.HttpServlet介紹

2.Http請求方法

?3.???????創建HttpServlet

第一種:創建一個類繼承HttpServlet

第二種:IDEA直接創建servlet

4.servlet創建順序

總結


一、Servlet概述

JavaWeb 三大組件Servlet、Filter(過濾器)、Listener(監聽器)。

其中Servlet是JavaWeb三大組件之一,它是我們學習JavaWeb最為基本的組件,必須100%掌握。

Servlet 作用:處理用戶請求。客戶端請求由 Tomcat 找到對應的 Servlet 來處理,例如登錄請求由登錄 Servlet 處理。

?【基本流程:JavaWeb項目部署在Tomcat,Tomcat啟動就會立即加載web.xml,每寫一個Servlet,就會在web.xml里面配置一個servlet】

接下來用idea創建JavaWeb項目來演示一下:

演示

創建JavaWeb項目(2017版本為例)

1. 打開 IntelliJ IDEA

啟動 IntelliJ IDEA 2017,并選擇 “Create New Project” 來創建一個新的項目。

2. 選擇項目類型

在創建項目時,選擇 “Java Enterprise” 模板。這是用于創建 Java Web 項目的模板。

在左側欄中選擇 “Java Enterprise”

在右側的選項中,確保選中 “Web Application” 功能模塊(即勾選 “Web Application”)。

3. 配置框架

普通JavaWeb項目架構:

MyJavaWebProject/
├── src/                # Java 源代碼
├── web/                # Web 資源
│   ├── WEB-INF/        # Web 應用配置
│   │   └── web.xml     # 部署描述符
│   └── index.jsp       # 默認頁面
└── lib/                # 依賴的 JAR 文件

所以是需要我們手動去配置WEB-INF目錄和web.xml文件:
?

這里web.xml里面的約束也需要我們手動添加(由于web.xml里面的約束都是一樣的,所以我們可以去直接復制任意其他項目里web.xml里的約束來用)

?在這里提供了3.1版本的約束:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1">
</web-app>

部署tomcat:

?

如果以前沒有設置過的話請參見這篇博客中的步驟:部署JavaWeb項目(Ⅱ)-CSDN博客

運行項目:

項目會先加載web.xml文件,然后顯示的下面結果是默認存在的index.jsp(由于沒做任何編寫處理,所以這里顯示的是初始的界面內容。)

題外話 :

因為2017版本的idea版本較低,所以像maven這種架構的項目里面的基礎目錄并不會自動生成,需要手動添加。

如下是maven的架構:

MyJavaWebProject/
├── src/
│   ├── main/
│   │   ├── java/          # 存放 Java 源代碼
│   │   ├── resources/     # 存放資源文件(如配置文件)
│   │   └── webapp/        # 存放 Web 資源(如 JSP、HTML、CSS)
│   │       ├── WEB-INF/   # Web 應用配置
│   │       │   └── web.xml
│   │       └── index.jsp
└── lib/                 # 存放依賴的 JAR 文件

配置項目結構

在 IntelliJ IDEA 中,需要手動配置這些目錄的用途:

打開項目結構設置

  1. 點擊 “File” > “Project Structure”(快捷鍵:Ctrl + Alt + Shift + S)。

  2. “Project Settings” 中,選擇 “Modules”

配置目錄用途

“Sources” 標簽頁中:

  • src/main/java 標記為 “Sources”(藍色)。

  • src/main/resources 標記為 “Resources”

  • src/main/webapp 標記為 “Resources”

如果沒有 src/main/webapp 目錄,可以手動創建:

  • 右鍵點擊 src/main,選擇 “New” > “Directory/Package”,并命名為 webapp

  • 然后在 “Project Structure” 中將其標記為 “Resources”

當然,上面是maven架構的手動配置情況,而我們在此演示的JavaWeb用不到這么多。

二、Servlet初識(熟練)

1.servlet說明

定義:Servlet 是運行在 Web 服務器(如 Tomcat)中的小型 Java 程序,用于處理通過 HTTP 協議接收到的客戶端請求。

實現:Servlet 需要實現 javax.servlet.Servlet 接口,并在 web.xml 文件中進行部署,以便 Web 服務器能夠識別和調用。

2.Servlet 接口方法

javax.servlet.Servlet 接口定義了以下五個方法,用于控制 Servlet 的生命周期和請求處理:

方法簽名描述調用時機
void init(ServletConfig config)初始化 Servlet 實例。用于執行 Servlet 的初始化工作。Servlet 實例被創建后立即調用一次。
void service(ServletRequest req, ServletResponse res)處理客戶端請求。負責接收請求和返回響應。每次處理請求時調用。
void destroy()銷毀 Servlet 實例。用于釋放資源和執行清理工作。Servlet 實例被銷毀前調用一次。
ServletConfig getServletConfig()獲取 Servlet 配置信息。返回一個?ServletConfig?對象。需要時調用,通常在?init()?方法中保存。
String getServletInfo()獲取 Servlet 信息。返回一個描述 Servlet 的字符串。需要時調用,通常用于獲取 Servlet 描述。

引申問題:什么是初始化?

一個“一開始就要干的事”,e.g 進游戲前的登錄 e.g 去自習室時開燈(不管是誰都要先完成的動作),那么就將這個方法編寫進初始化里面,即一調用這個類,初始化里的方法就會完成。

3.創建Servlet

第一步:常見HelloServlet實現Servlet的接口,實現接口中的方法;

package cn.tx.servlet;import javax.servlet.*;
import java.io.IOException;public class Servlet1 implements Servlet { //實現servlet接口@Overridepublic void init(ServletConfig servletConfig) throws ServletException {}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {}
}

第二步:配置servlet的訪問路徑;

在約束里面編寫:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><servlet><servlet-name>hello</servlet-name><servlet-class>cn.tx.servlet.Servlet1</servlet-class></servlet><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>
</web-app>

4.JavaWeb請求響應流程

?接著:

當 Tomcat 接收到請求(如 http://localhost:8080/servlet_pro/logon),它會查找項目中的 web.xml 文件,通過請求路徑(如 /logon)匹配 <url-pattern> 來定位相應的 Servlet。

Tomcat 找到匹配的 <servlet-mapping>,確定 <servlet-name>(如 login)。

根據 <servlet-name>,在 <servlet> 配置中找到對應的 <servlet-class>(如 com.rl.servlet.LoginServlet)。

接下來:

如果 Servlet 實例已存在,Tomcat 直接使用它處理請求。

如果不存在,Tomcat 通過反射創建實例,并將其存入 Servlet 池中,然后調用 service() 方法處理請求。

5.servlet生命周期

Servlet 基礎

  • 定義:Servlet是服務器端的Java程序,用于處理HTTP請求和生成響應。

  • 接口:必須實現javax.servlet.Servlet接口。

  • 部署:需要在web.xml文件中配置,以便Tomcat等服務器識別和調用。

Servlet 接口方法

Servlet接口包含以下三個核心方法,定義了Servlet的生命周期:

  1. init(ServletConfig config)

    • 作用:初始化Servlet。

    • 生命周期:在Servlet實例創建后調用一次。

  2. service(ServletRequest request, ServletResponse response)

    • 作用:處理客戶端請求。

    • 生命周期:每次請求時調用。

  3. destroy()

    • 作用:銷毀Servlet實例。

    • 生命周期:在Servlet實例銷毀前調用一次。

Servlet 生命周期

Servlet的生命周期由以下三個階段組成:

  1. 初始化階段:調用init()方法進行初始化。

  2. 請求處理階段:調用service()方法處理客戶端請求。

  3. 銷毀階段:調用destroy()方法進行銷毀。

Servlet 實例管理

  • 實例創建:默認情況下,Servlet實例在第一次被請求時由Tomcat創建。

  • 實例銷毀:當Tomcat決定不再需要Servlet實例時(如服務器關閉或重新部署應用),會銷毀實例。

Tomcat 的角色

Tomcat作為Servlet容器,負責以下任務:

  • 創建、調用和銷毀Servlet實例。

  • 調用Servlet的生命周期方法(init()service()destroy())。

  • 管理Servlet的生命周期和請求處理。

總結

Servlet的生命周期由Tomcat管理,開發者通過實現javax.servlet.Servlet接口中的方法來控制Servlet的行為。開發者需要關注的主要方法是init()service()destroy(),這些方法在Servlet的生命周期中由Tomcat自動調用。開發者需要在web.xml中配置Servlet,以便Tomcat能夠識別和調用。

三、HttpServlet(精通)

1.HttpServlet介紹

因為現在我們的請求都是基于HTTP協議的,所以我們應該專門為HTTP請求寫一個Servlet做為通用父類。

?由上圖我們可以看出,以后再寫Servlet 可以直接繼承HttpServlet

  • Servlet???一個標準
  • GenericServlet ?是Servlet接口子類
  • HttpServlet??是GenericServlet子類,一個專門處理Http請求的Servlet

2.???????Http請求方法

方法描述
GET通過請求的 URI 獲取資源。
POST向服務器提交新內容,通常用于創建新資源。
PUT修改指定的資源。
DELETE刪除指定的資源。
CONNECT用于代理服務器進行 SSL 傳輸(如建立 SSL 隧道)。
OPTIONS詢問服務器關于目標資源的通信選項。
PATCH對資源進行部分修改。
TRACE回顯服務器收到的請求,主要用于測試或診斷。
HEAD類似于 GET 請求,但不返回響應主體內容,用于獲取元數據。

?3.???????創建HttpServlet

第一種:創建一個類繼承HttpServlet

package cn.tx.servlet;import javax.servlet.http.HttpServlet;public class Servlet2 extends HttpServlet{}

配置Servlet映射路徑:

<servlet><servlet-name>hello2</servlet-name><servlet-class>cn.tx.servlet.Servlet2</servlet-class>
</servlet><servlet-mapping><servlet-name>hello2</servlet-name><url-pattern>/hello2</url-pattern>
</servlet-mapping>

第二種:IDEA直接創建servlet

填寫servlet名稱:

?

創建完成,自己填寫映射路徑

4.servlet創建順序

有些Servlet需要在Tomcat啟動時就被創建,而不是第一次訪問時被創建,那么可以在web.xml文件中配置<servlet>元素。

在<servlet>元素中添加子元素<load-on-startup>元素!

<servlet><servlet-name>hello</servlet-name><servlet-class>cn.tx.servlet.Servlet1</servlet-class><load-on-startup>1</load-on-startup>
</servlet>

總結

  • 加載順序:Servlet 的加載順序由 <load-on-startup> 元素的值決定,值越小,越早加載。

  • 應用啟動加載:所有指定了 <load-on-startup> 的 Servlet 將在 Web 應用啟動時被加載,而不是在第一次請求時。

  • 日志驗證:可以通過在 init() 方法中添加日志輸出來驗證 Servlet 的加載順序。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70491.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70491.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70491.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows 小記 18 —— 子窗口繼承父窗口的樣式

子窗口會繼承父窗口或者所有者窗口的一些樣式。 當我們使用 CreateWindowExW 創建窗口后&#xff0c;指定其 HwndParent 參數時&#xff0c;或者通過 SetWindowLongPtr(vd->Hwnd, GWLP_HWNDPARENT, (LONG_PTR)vd->HwndParent); 指定所有者窗口時&#xff0c;子窗口將從父…

19、《Springboot+MongoDB整合:玩轉文檔型數據庫》

SpringbootMongoDB整合&#xff1a;玩轉文檔型數據庫 摘要&#xff1a;本文全面講解Spring Boot與MongoDB的整合實踐&#xff0c;涵蓋環境搭建、CRUD操作、聚合查詢、事務管理、性能優化等核心內容。通過15個典型代碼示例&#xff0c;演示如何高效操作文檔數據庫&#xff0c;深…

跳躍游戲II(力扣45)

這道題在跳躍游戲(力扣55)-CSDN博客 的基礎上需要找到最小的跳躍次數。那么我們需要用一個變量來統計跳躍次數&#xff0c;而難點就在于何時讓該變量的值增加。這一點我寫在注釋中&#xff0c;大家結合我的代碼會更好理解。其他部分跟跳躍游戲(力扣55)-CSDN博客 幾乎相同&#…

Linux基礎開發工具的使用(apt、vim、gcc、g++、gdb、make、makefile)

Linux軟件包管理器–apt Linux安裝軟件的方式 在Linux下安裝軟件的方法有以下三種&#xff1a; 下載到程序的源代碼&#xff0c;自己編譯出可執行程序獲取deb安裝包、然后使用dpkg命令安裝。&#xff08;不解決依賴關系&#xff09;通過apt進行安裝軟件。 小知識點&#xf…

C/C++ | 每日一練 (2)

&#x1f4a2;歡迎來到張胤塵的技術站 &#x1f4a5;技術如江河&#xff0c;匯聚眾志成。代碼似星辰&#xff0c;照亮行征程。開源精神長&#xff0c;傳承永不忘。攜手共前行&#xff0c;未來更輝煌&#x1f4a5; 文章目錄 C/C | 每日一練 (2)題目參考答案封裝繼承多態虛函數底…

【前端框架】vue2和vue3的區別詳細介紹

Vue 3 作為 Vue 2 的迭代版本&#xff0c;在性能、語法、架構設計等多個維度均有顯著的變革與優化。以下詳細剖析二者的區別&#xff1a; 響應式系統 Vue 2 實現原理&#xff1a;基于 Object.defineProperty() 方法實現響應式。當一個 Vue 實例創建時&#xff0c;Vue 會遍歷…

基于Spring Boot的農事管理系統設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導&#xff0c;歡迎高校老師/同行前輩交流合作?。 技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;…

【RISCV 常見匯編指令學習 1.2 -- CSRW | CSRR | XORI | ANDI | DRET | J | JR】

文章目錄 Overview1. CSRW 與 CSRR2. SW 與 lw3. XORI 與 ANDI4. J 與 JR5. ret 與 dret6. 總結&#x1f310; Sources Overview 在 RISCV 匯編中&#xff0c;不同類型的指令用于完成控制寄存器操作、內存存取、位操作、跳轉以及返回等功能。下面將逐對詳細介紹這些指令&#…

MySQL六大日志的功能介紹。

前言 首先&#xff0c;MySQL的日志應該包括二進制日志&#xff08;Binary Log&#xff09;、錯誤日志&#xff08;Error Log&#xff09;、查詢日志&#xff08;General Query Log&#xff09;、慢查詢日志&#xff08;Slow Query Log&#xff09;、重做日志&#xff08;Redo …

【AI】GitHub Copilot

GitHub Copilot 是一款由 GitHub 和 OpenAI 合作開發的 AI 編程助手&#xff0c;它可以在多種開發工具中使用。以下是 GitHub Copilot 支持的主要開發工具和平臺&#xff1a; 1. Visual Studio Code (VS Code) 官方支持&#xff1a;GitHub Copilot 在 VS Code 中擁有最完整的集…

拆解微軟CEO納德拉戰略藍圖:AI、量子計算、游戲革命如何改寫未來規則!

2025年2月19日 知名博主Dwarkesh Patel對話微軟CEO薩蒂亞納德拉 在最新訪談釋放重磅信號&#xff1a;AI將掀起工業革命級增長&#xff0c;量子計算突破引爆材料科學革命&#xff0c;游戲引擎進化為世界模擬器。 整個視頻梳理出幾大核心觀點&#xff0c;揭示科技巨頭的未來十年…

4.2 學習UVM中的“connect_phase“,將其應用到具體案例分為幾步?

文章目錄 前言1. connect_phase 的作用與執行順序2. TLM 連接的類型與示例2.1 生產者-消費者模型2.2 分析端口廣播模型 3. 層次化連接示例4. 動態連接與條件化配置5. 關鍵注意事項6. 完整示例&#xff1a;SoC 驗證環境連接6.1 Monitor 廣播數據6.2 Scoreboard 和 Coverage6.3 E…

HBase Shell

目錄 1. HBase常用命令1.1 create命令1.2 list命令1.3 describe命令1.4 put命令1.5 get命令1.6 scan命令1.7 count命令1.8 exists命令1.9 修改表結構1.10 delete命令1.11 deleteall命令1.12 truncate命令1.13 disable、drop命令1.14 status命令1.15 version命令 2. HBase Shell…

MATLAB基礎學習相關知識

MATLAB安裝參考&#xff1a;抖音-記錄美好生活 MATLAB基礎知識學習參考&#xff1a;【1小時Matlab速成教程-嗶哩嗶哩】 https://b23.tv/CnvHtO3 第1部分&#xff1a;變量定義和基本運算 生成矩陣&#xff1a; % 生成矩陣% 直接法% ,表示行 ;表示列 a [1,2,3;4,5,6;7,8,9];%…

用自定義注解實現Excel數據導入中的枚舉值校驗

使用自定義注解實現Excel數據導入中的枚舉值校驗 在實際開發中&#xff0c;我們經常需要從Excel文件中導入數據&#xff0c;并且這些數據需要符合一定的規則&#xff0c;比如某些字段的值必須是預定義的枚舉值。本文將介紹如何使用自定義注解來實現這一功能&#xff0c;以提高…

基于ffmpeg+openGL ES實現的視頻編輯工具-opengl相關邏輯(五)

在我們的項目中,OpenGL ES 扮演著至關重要的角色,其主要功能是獲取圖像數據,經過一系列修飾后將處理結果展示到屏幕上,以此實現各種豐富多樣的視覺效果。為了讓大家更好地理解后續知識,本文將詳細介紹 OpenGL 相關代碼。需要注意的是,當前方案將對 OpenGL 的所有操作都集…

dify安裝

官網教程 https://github.com/langgenius/dify/blob/main/README_CN.md 1、下載源碼 git clone https://github.com/langgenius/dify.git 2、進入docker目錄 cd dify cd docker cp .env.example .env修改nginx對外端口配置 修改為9000 最后執行&#xff1a;docker compo…

前端導出word文件,并包含導出Echarts圖表等

基礎導出模板 const html <html><head><style>body {font-family: Times New Roman;}h1 {text-align: center;}table {border-collapse: collapse;width: 100%;color: #1118FF;font-weight: 600;}th,td {border: 1px solid black;padding: 8px;text-align: …

【ETL】從理論到Python實踐的數據處理

引言 ETL&#xff08;Extract, Transform, Load&#xff09;是一種數據處理過程&#xff0c;用于將數據從一個或多個源提取出來&#xff0c;進行清洗、轉換和整合&#xff0c;然后加載到目標數據倉庫或數據庫中。ETL 是數據倉庫和數據分析領域中不可或缺的一部分&#xff0c;廣…