Servlet 是 Java Web 開發的基石,運行於支援 Servlet 規範的容器 (Tomcat/Jetty/JBoss 等) 中,處理 HTTP 請求、產生動態回應。本文帶你完成開發環境建置、撰寫第一支 Servlet、編譯部署測試全流程。
javac、jar)。servlet-api.jar),無需額外下載 JSDK (舊稱)。mvn archetype:generate -DgroupId=com.example -DartifactId=servlet-demo -DarchetypeArtifactId=maven-archetype-webapp
產出標準 Web 應用目錄:
servlet-demo/
├── pom.xml
└── src/main/webapp/
├── WEB-INF/
│ └── web.xml (部署描述檔)
└── index.jsp
原始碼:src/main/java/com/example/RequestInfoServlet.java
package com.example;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;
import java.io.*;
@WebServlet("/request-info") // Servlet 3.0+ 註解配置,免 web.xml
public class RequestInfoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
out.println("");
out.println("請求資訊範例 ");
out.println("請求資訊範例
");
out.println("方法: " + req.getMethod() + "
");
out.println("請求 URI: " + req.getRequestURI() + "
");
out.println("協定: " + req.getProtocol() + "
");
out.println("路徑資訊: " + req.getPathInfo() + "
");
out.println("客戶端 IP: " + req.getRemoteAddr() + "
");
out.println("");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp); // 同樣處理 POST
}
}
HttpServlet:專為 HTTP 協定設計,提供 doGet/doPost/doPut/doDelete 等對應方法。@WebServlet 註解:Servlet 3.0 (Tomcat 7+) 支援,替代 web.xml 映射,路徑為 /request-info。HttpServletRequest:封裝客戶端請求 (Header、Parameter、Session、Cookie、Body)。HttpServletResponse:控制回應 (Status、Header、Content-Type、輸出流)。resp.setContentType("text/html;charset=UTF-8") 必須在取得 PrintWriter 前呼叫,否則中文亂碼。# 專案根目錄執行
mvn clean package
產出 target/servlet-demo.war,部署方式:
$CATALINA_HOME/webapps/,Tomcat 自動解壓部署。mvn cargo:run 整合測試。https://localhost:8080/servlet-demo/request-info<servlet>
<servlet-name>RequestInfoServlet</servlet-name>
<servlet-class>com.example.RequestInfoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RequestInfoServlet</servlet-name>
<url-pattern>/request-info</url-pattern>
</servlet-mapping>
req.setCharacterEncoding("UTF-8") (POST Body)、回應端 resp.setContentType("...;charset=UTF-8")、Tomcat server.xml <Connector URIEncoding="UTF-8"/>。@WebServlet 路徑、Context Path (專案名)、Tomcat 部署狀態。provided vs compile),Servlet API 應設 provided (容器提供)。完成第一支 Servlet,你已跨入 Java Web 開發大門。下一步掌握:請求參數綁定、Session 管理、Filter/Listener、JSP/Thymeleaf 模板引擎、資料庫整合 (JDBC/JPA),構建完整 MVC 應用。