Servlet 是 Java Web 開發的基石,所有框架(Spring MVC、Struts、JSF)底層皆基於 Servlet API。本文總結 Servlet 核心概念、生命週期、URL 映射配置、執行流程等必考知識點。
javax.servlet.Servlet 介面,通常繼承 HttpServletload-on-startup)init(ServletConfig),僅執行一次service(req, resp),HTTP 請求分派至 doGet/doPost 等destroy(),釋放資源
流程:客戶端請求 → Web 容器 → 解析 URL → 映射到 Servlet → 建立 Request/Response → 呼叫 service() → Servlet 處理業務 → 返回回應 → 容器發送給客戶端
<servlet>
<servlet-name>ServletDemo1</servlet-name>
<servlet-class>com.example.ServletDemo1</servlet-class>
</servlet>
<!-- 同一 Servlet 映射多個 URL 模式 -->
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/servletDemo1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/1.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/2.htm</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/3.do</url-pattern>
</servlet-mapping>
/abc/action.do/abc/**.do、*.action/@WebServlet(
name = "ServletDemo1",
urlPatterns = {"/servletDemo1", "/1.html", "/2.htm", "/3.do"},
loadOnStartup = 1
)
public class ServletDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.getWriter().write("Hello Servlet 3.0+");
}
}
| 介面 | 常用方法 |
|---|---|
| HttpServletRequest | getParameter(), getParameterValues(), getHeader(), getCookies(), getSession(), getRequestDispatcher() |
| HttpServletResponse | setStatus(), setHeader(), addCookie(), sendRedirect(), getWriter(), getOutputStream() |
| ServletContext | getInitParameter(), getAttribute(), setAttribute(), getResourceAsStream(), getRequestDispatcher() |
| ServletConfig | getInitParameter(), getServletName(), getServletContext() |
forward(轉發)保持請求,地址欄不變;redirect(重導向)新請求,地址欄改變掌握 Servlet 原理,是深入理解 Spring MVC、過濾器鏈、攔截器、異步 Servlet 等進階主題的前提。