HttpServletRequest Interface Overview
-
Interface Definition: HttpServletRequest is part of the Jakarta Servlet specification, extending the ServletRequest interface.
public interface HttpServletRequest extends ServletRequest {} -
Implementation Details: Web servers like Tomcat implement this interface (e.g., via
RequestFacade). Developers interact solely with the interface methods without concern for underlying implementations. -
Data Encpasulation: The object encapsulates HTTP request protocol details, including headers, praameters, and metadata, parsed by the server from client requests.
-
Object Lifetime: Each HTTP request creates a new
HttpServletRequestinstance, which remains valid only for the duration of that request.
Key Methods for Data Retrieval
Accessing Request Parameters
-
Data Structure: Parameters are stored as
Map<String, String[]>to handle multi-value keys (e.g., checkboxes). -
Methods:
Map<String, String[]> paramMap = request.getParameterMap(); Enumeration<String> paramNames = request.getParameterNames(); String[] values = request.getParameterValues("aihao"); String singleValue = request.getParameter("username"); -
Note: All values are strings, even if numeric inputs are submitted.
Request Dispatching and Scope Management
Forwarding Requests
-
Mechanism:
RequestDispatcher dispatcher = request.getRequestDispatcher("/target"); dispatcher.forward(request, response); // Concise alternative request.getRequestDispatcher("/target").forward(request, response); -
Resource Types: Any valid server resource (Servlet, JSP, HTML) can be forwarded to.
-
Path Handling: Use application-root-relative paths (starting with
/but excluding context path).
Sharing Data via Request Scope
-
Attribute vs. Parameter:
// Retrieves user-submitted data String param = request.getParameter("key"); // Retrieves programmatically set attributes Object attr = request.getAttribute("key"); -
Use Case: Store data in request attributes (
request.setAttribute()) for access during the same request cycle.
Additional Utility Methods
-
Client Information:
String clientIP = request.getRemoteAddr(); String methodType = request.getMethod(); -
Path Details:
String appRoot = request.getContextPath(); // e.g., "/myapp" String uri = request.getRequestURI(); // e.g., "/myapp/resource" String servletPath = request.getServletPath(); // e.g., "/resource" -
Character Encoding:
- POST Requests: Historically required manual encoding setup (now UTF-8 by default in modern Tomcat):
request.setCharacterEncoding("UTF-8"); - GET Requests: Resolved via server configuration (default UTF-8 since Tomcat 8+):
<!-- In server.xml --> <Connector URIEncoding="UTF-8" />
- POST Requests: Historically required manual encoding setup (now UTF-8 by default in modern Tomcat):