目錄
一、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 中,需要手動配置這些目錄的用途:
打開項目結構設置
點擊 “File” > “Project Structure”(快捷鍵:
Ctrl + Alt + Shift + S
)。在 “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的生命周期:
-
init(ServletConfig config)
-
作用:初始化Servlet。
-
生命周期:在Servlet實例創建后調用一次。
-
-
service(ServletRequest request, ServletResponse response)
-
作用:處理客戶端請求。
-
生命周期:每次請求時調用。
-
-
destroy()
-
作用:銷毀Servlet實例。
-
生命周期:在Servlet實例銷毀前調用一次。
-
Servlet 生命周期
Servlet的生命周期由以下三個階段組成:
-
初始化階段:調用
init()
方法進行初始化。 -
請求處理階段:調用
service()
方法處理客戶端請求。 -
銷毀階段:調用
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 的加載順序。