目錄
Servlet 簡介
動態資源和靜態資源
Servlet 簡介
Servlet 開發流程
目標
開發過程
開發一個 web 類型的 module
開發一個 form 表單
開發一個 UserServlet
在 web..xml 為 userServlet 配置請求路徑
Edit Configurations
啟動項目
完!
Servlet 簡介
動態資源和靜態資源
靜態資源:
? ? ? ? 無需在程序運行時,通過代碼生成的資源,在程序運行之前就寫好的資源。例如:html css js img 音頻 視頻文件
動態資源:
? ? ? ? 需要在程序運行時,通過代碼生成的資源,在程序運行之前,無法確定的數據,運行時動態生成。例如:Servlet Thymeleaf......
? ? ? ? 動態資源指的不是視圖上的動態效果,而是簡單的人機交互效果~
舉個栗子:
? ? ? ? 去蛋糕店買蛋糕:
? ? ? ? ? ? ? ? 我們直接買柜臺上已經做好的:靜態資源
? ? ? ? ? ? ? ? 我們和店員提出要求后現場定制一個:動態資源
Servlet 簡介
Servlet(server applet)是運行在服務端(Tomcat)的 Java 小程序,是 sun 公司提供一套定義動態資源的規范,代碼層面上 Servlet 就是一個接口
? ? ? ? 用來接收 處理客戶端請求 響應給瀏覽器的動態資源。在整個 Web 應用中,Servlet 主要負責接收處理請求,協同調度功能以及響應數據。我們可以把 Servlet 稱作為 Web 應用中的控制器。
? ? ? ? 不是所有的 Java 類都能用于處理客戶端請求,能處理客戶端請求,并做出響應的一套技術標準就是 Servlet
? ? ? ? Servlet 是運行在服務端的,所以 Servlet 必須在 Web 項目中開發并且在 Tomcat 這樣的服務器容器中運行。
????????Servlet 主要起一個承上啟下的作用
Servlet 開發流程
目標
實現功能:校驗注冊時,用戶名是否被占用。通過客戶端向 Servlet 發送請求,攜帶 username,如果用戶名是 “admin”,則向客戶端響應 NO,如果是其它,響應 YES
開發過程
開發一個 web 類型的 module
上篇文章已經有所介紹,此處進行復習
開發一個 form 表單
在 web 目錄下,開發一個 form 表單,向servlet發送一個GET請求并攜帶username參數
這里的 action 先空著,因為我們還沒有寫 servlet 的代碼~
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><form method = "get" action = "">用戶名:<input type = "text" name = "username"><br/><input type="submit" value = "校驗">
</form></body>
</html>
開發一個 UserServlet
在 src 目錄下面創建一個 UserServlet 類
如果直接 implements Servlet 的話,需要重寫下面四個方法,比較繁瑣
我們直接可以?extends HttpServlet
package com.zzz.servlet;import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;
import java.io.PrintWriter;/** @author zzr* @date: 2025/07/03 20:49* @description: 驗證用戶名的Servlet*/
public class userServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 1. 獲取請求中的鍵值對參數 key=value (根據參數名獲取參數 無論參數在 usl? 后面,還是在請求體中,都能獲取)String username = request.getParameter("username");// 2.處理業務的代碼String info = "YES";if ("admin".equals(username)) {info = "NO";}// 3. 將要響應的數據放入 responsePrintWriter writer = response.getWriter(); //該方法返回的是一個向響應體中打印字符串的打印流writer.write(info);}
}
注意:
? ? ? ? 1. 自定義一個類,要繼承 HttpServlet 類
? ? ? ? 2. 重寫 service 方法,該方法主要就是處理用戶的請求
? ? ? ? 3. HttpServletRequest 代表請求對象,是由請求報文,經過 Tomcat 轉換而來的,通過該對象,可以獲取請求中的信息
? ? ? ? 4. HttpServletResponse 代表響應對象,該對象會被 Tomcat 轉換為響應的報文,通過該對象,可以設置響應中的信息。
? ? ? ? 5. Servlet 對象的生命周期(創建,初始化,處理服務,銷毀)都是由 Tomcat 自己管理的,不需要我們干預。
? ? ? ? 6. HttpServletRequest 和 HttpServletResponse 兩個對象也是由 Tomcat 自動和?報文來轉換的,在調用 service 方法傳入給我們的~
在 web..xml 為 userServlet 配置請求路徑
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"version="5.0"><!-- 1. 配置 servlet 類,并起一個別名servlet-class 告訴 Tomcat 對應的要實例化的 servlet 類servlet-name 用于關聯請求的映射路徑
--><servlet><servlet-name>userServlet</servlet-name><servlet-class>com.zzz.servlet.userServlet</servlet-class></servlet>
<!-- 映射路徑 --><servlet-mapping><servlet-name>userServlet</servlet-name><url-pattern>/userServlet</url-pattern></servlet-mapping>
</web-app>
這里配置完映射路徑后,url-pattern 中的路徑是什么,我們的 html 頁面中 form 表單要提交的 action 就是什么~
補充:
? ? ? ? 1. Servlet 并不是文件系統中實際存在的文件或目錄,為了能夠請求到該資源,需要為其配置映射路徑
? ? ? ? 2. Servlet 的請求映射路徑配置在 web.xml 中
? ? ? ? 3. <servlet-name> 作為 servley 的別名,見名知意即可,隨意定義
? ? ? ? 4. <usl-pattern> 標簽用于定義 servlet 的請求映射路徑
? ? ? ? 5. 一個 servlet 可以對應多個不同的 <url-pattern>
? ? ? ? 6. 多個 sevlet 不能使用相同的 <url-pattern>
Edit Configurations
先將我們之前部署的項目刪除掉~
再部署我們的 web02~
啟動項目
使用 debug 模式運行測試,訪問 index.html,提交表單測試
打個斷點,debug 模式運行
自動會跳到 index.html 頁面(index.html 頁面是會默認跳出的頁面~)
輸入 zzz 點擊校驗,因為我們的斷點,瀏覽器等待響應,轉小圓圈
然后進入 IDEA,查看,收到了我們的 “zzz”,
全部放通后,最終瀏覽器響應 YES