Servlet 是 Java 平台上伺服器端程式設計的標準解決方案,相較傳統 CGI 擁有顯著優勢:
| 維度 | CGI | Servlet |
|---|---|---|
| 效能 | 每請求啟動新進程,擴展性差 | JVM 常駐,僅建立新執行緒 |
| 功能 | 受限於作業系統 API | 完整 Java API 支援,易於共享資料、Session 追蹤 |
| 安全性 | 進程隔離較弱 | Servlet 引擎沙箱環境,類似 Applet 安全模型 |
| 成本 | 商業伺服器授權昂貴 | 眾多免費/低成本 Web 容器支援 |
| 可攜性 | 平台相依 | Write Once, Run Anywhere |
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!
");
}
}
關鍵點:
HttpServletdoGet/doPostHttpServletRequest 取得請求參數HttpServletResponse 輸出回應String user = req.getParameter("User"); // 取得單一值
String[] values = req.getParameterValues("param"); // 取得多值
getParameter 回傳:存在有值→字串;存在無值→空字串;不存在→null
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doGet(req, res); // 委派給 doGet
}
new Cookie(name, value):建立 CookiesetMaxAge(seconds):設定存活時間(秒),負數為瀏覽器關閉即刪除response.addCookie(cookie):寫入回應標頭req.getCookies():取得 Cookie 陣列Cookie c = new Cookie("username", user);
c.setMaxAge(60*60*24*365); // 一年
response.addCookie(c); // 必須在 response.getWriter() 之前
Cookie[] cookies = req.getCookies();
if (cookies != null) {
for (Cookie c : cookies) {
if ("username".equals(c.getName())) {
String user = c.getValue();
break;
}
}
}
不可包含:() | [] {} <> @ , . : ; \ " ? =,不可以 $ 開頭,相容舊版 Netscape 時避免空格。
HttpSession session = req.getSession(true);req.startAsync() 釋放執行緒處理長時間任務