首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java Web 基石:Servlet 入門必備核心知識體系

     編輯:Java 綜合教學

Web 基礎概念釐清

靜態 vs 動態網頁

維度靜態網頁動態網頁
本質預先編寫好的 HTML 文件,服務器直接返回請求到達時動態生成,內容隨時間/用戶/參數變化
技術棧HTML/CSS/JSServlet/JSP, ASP.NET, PHP, Node.js 等
交互性無支持表單提交、數據庫操作、個性化展示

B/S vs C/S 架構對比

  • B/S (Browser/Server):客戶端僅需瀏覽器,邏輯集中服務端,部署維護簡單,適合互聯網應用
  • C/S (Client/Server):專用客戶端程序,可充分利用客戶端算力,通訊協議自定義(如 TCP 長連接),適合高性能/實時場景(股票、遊戲)

Web 服務器與 Servlet 容器

主流 Web 服務器

  • Apache HTTPD:進程/線程模型,模塊化極強,靜態資源處理性能優異
  • Nginx:事件驅動異步非阻塞,高併發反向代理首選
  • IIS:Windows 生態深度集成,ASP.NET 原生支持

Tomcat - Servlet 參考實現

Tomcat 實現了 Servlet/JSP 規范,本質是 Servlet 容器。核心目錄結構:

手寫微型 Web 服務器:理解 HTTP 本質

public class MiniWebServer {
    public static void main(String[] args) throws Exception {
        ServerSocket ss = new ServerSocket(8765);
        System.out.println("監聽 8765 端口...");
        
        while (true) {
            Socket client = ss.accept();
            new Thread(() -> {
                try (OutputStream os = client.getOutputStream();
                     BufferedReader br = new BufferedReader(new FileReader("D:/index.html"))) {
                    
                    // 發送 HTTP 響應頭
                    os.write("HTTP/1.1 200 OK\r\n".getBytes());
                    os.write("Content-Type: text/html;charset=UTF-8\r\n".getBytes());
                    os.write("\r\n".getBytes()); // 空行分隔頭體
                    
                    // 發送文件內容
                    String line;
                    while ((line = br.readLine()) != null) {
                        os.write(line.getBytes(StandardCharsets.UTF_8));
                    }
                } catch (IOException e) { e.printStackTrace(); }
            }).start();
        }
    }
}

瀏覽器訪問 https://localhost:8765/ 即可看到頁面。這演示了 HTTP 協議的請求-響應模型核心:解析請求行/頭 → 定位資源 → 構建響應頭/體 → 輸出流返回。

URL 與 URI 精準區分

URL (Uniform Resource Locator):統一資源定位符
  協議://主機:端口/路徑?查詢參數#片段
  例:https://example.com:8080/app/user?id=1#profile

URI (Uniform Resource Identifier):統一資源標識符(更廣泛)
  包含 URL 和 URN (Uniform Resource Name,如 urn:isbn:0451450523)
  關係:URL ⊂ URI

Web 應用標準目錄結構 (Servlet 規范)

my-webapp/
├── index.html, css/, js/, images/          # 靜態資源(可直接訪問)
├── WEB-INF/                                # 受保護目錄(客戶端不可直接訪問)
│   ├── web.xml                             # 部署描述符(Servlet 3.0+ 可選)
│   ├── classes/                            # 編譯後的類文件(包結構)
│   │   └── com/example/MyServlet.class
│   └── lib/                                # 應用私有 JAR 包
└── META-INF/                               # 元數據(可選)

關鍵規則:

  • WEB-INF/classes 和 WEB-INF/lib 自動在 Classpath 中
  • web.xml 定義 Servlet 映射、過濾器、監聽器、歡迎頁、錯誤頁等
  • Servlet 3.0+ 支持註解配置 (@WebServlet),可無 web.xml

Servlet 生命周期預覽

  1. 加載與實例化:容器啟動時或首次請求時(取決於 load-on-startup),通過反射創建實例
  2. 初始化 init(ServletConfig):僅執行一次,可讀取初始化參數、建立連接池
  3. 服務 service(ServletRequest, ServletResponse):每次請求調用,多線程並發執行,線程安全是開發者責任
  4. 銷毀 destroy():容器關閉/應用卸載前調用,釋放資源(關閉連接池、線程池)

開發環境搭建清單

  1. 安裝 JDK 8/11/17,配置 JAVA_HOME
  2. 下載 Tomcat 9/10,解壓,配置 CATALINA_HOME(可選)
  3. IDE 整合:IntelliJ IDEA / Eclipse 配置 Tomcat Server
  4. 建立動態 Web 項目,確保 web.xml 或註解配置正確
  5. 部署啟動,訪問 https://localhost:8080/your-app/ 驗證

掌握以上基石,才能在後續 Servlet API、Filter/Listener、Session 管理、異步處理、Spring MVC 原理等進階主題中遊刃有餘。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
目錄用途
bin啟動/關閉腳本(.sh/.bat)、環境變量配置
confserver.xml(連接器/主機/上下文)、web.xml(全局部署描述符)、tomcat-users.xml
lib容器運行依賴 JAR(servlet-api.jar, jsp-api.jar 等)
webappsWeb 應用部署目錄(WAR 包或展開目錄)
workJSP 編譯生成的 Servlet 源碼/.class 文件,清空可清除緩存
logs訪問日志、錯誤日志、Catalina 運行日志