Servlet 本身僅直接提供 HttpServletRequest 和 HttpServletResponse,其他內置對象需通過這兩個核心對象間接獲取。本文重點講解 Session、ServletContext 等關鍵對象的獲取方式。
Session 屬於 HTTP 協議範疇,依賴 Cookie 機制(請求頭攜帶 JSESSIONID),因此只能通過 Request 獲取:
// 獲取或創建 Session
HttpSession session = req.getSession();
// 或指定不自動創建
HttpSession session = req.getSession(false);
package ServletDemo;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
public class SessionServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
HttpSession session = req.getSession();
System.out.println("Session ID: " + session.getId());
session.setAttribute("username", "趙玉強");
System.out.println("Username: " + session.getAttribute("username"));
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doGet(req, resp);
}
}
代表整個 Web 應用的上下文,可通過以下方式獲取:
getServletContext()(GenericServlet 繼承方法)req.getServletContext()session.getServletContext()常用於全局配置讀取、資源路徑解析、應用級數據共享。
<servlet>
<servlet-name>session</servlet-name>
<servlet-class>ServletDemo.SessionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>session</servlet-name>
<url-pattern>/HttpSessionTest</url-pattern>
</servlet-mapping>