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

Servlet 技術全解析:從入門到非同步處理實戰

     編輯:Java 相關知識

為什麼選擇 Servlet?

Servlet 是 Java 平台上伺服器端程式設計的標準解決方案,相較傳統 CGI 擁有顯著優勢:

維度CGIServlet
效能每請求啟動新進程,擴展性差JVM 常駐,僅建立新執行緒
功能受限於作業系統 API完整 Java API 支援,易於共享資料、Session 追蹤
安全性進程隔離較弱Servlet 引擎沙箱環境,類似 Applet 安全模型
成本商業伺服器授權昂貴眾多免費/低成本 Web 容器支援
可攜性平台相依Write Once, Run Anywhere

HelloWorld Servlet 實作

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class HelloWorld extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        res.setContentType("text/html");
        PrintWriter out = res.getWriter();
        out.println("

Hello World!

"); } }

關鍵點:

  1. 繼承 HttpServlet
  2. 覆寫 doGet/doPost
  3. 透過 HttpServletRequest 取得請求參數
  4. 透過 HttpServletResponse 輸出回應

接收使用者輸入

GET 參數處理

String user = req.getParameter("User"); // 取得單一值
String[] values = req.getParameterValues("param"); // 取得多值

getParameter 回傳:存在有值→字串;存在無值→空字串;不存在→null

同時支援 GET/POST

public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {
    doGet(req, res); // 委派給 doGet
}

Cookie 狀態管理

核心 API

  • new Cookie(name, value):建立 Cookie
  • setMaxAge(seconds):設定存活時間(秒),負數為瀏覽器關閉即刪除
  • response.addCookie(cookie):寫入回應標頭
  • req.getCookies():取得 Cookie 陣列

寫入 Cookie 範例

Cookie c = new Cookie("username", user);
c.setMaxAge(60*60*24*365); // 一年
response.addCookie(c); // 必須在 response.getWriter() 之前

讀取 Cookie 範例

Cookie[] cookies = req.getCookies();
if (cookies != null) {
    for (Cookie c : cookies) {
        if ("username".equals(c.getName())) {
            String user = c.getValue();
            break;
        }
    }
}

Cookie 命名限制

不可包含:() | [] {} <> @ , . : ; \ " ? =,不可以 $ 開頭,相容舊版 Netscape 時避免空格。

進階主題

  • Session 追蹤:HttpSession session = req.getSession(true);
  • Filter 過濾器:預處理請求/回應(編碼、登入攔截、日誌)
  • Listener 監聽器:監聽 Web 應用/Session/Request 生命週期事件
  • 非同步 Servlet (3.0+):req.startAsync() 釋放執行緒處理長時間任務
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved