Appearance
J2EE ServletRequest & ServletResponse 笔记
1. 概念概述
HttpServletRequest:表示一个HTTP 请求对象。它继承自
ServletRequest
接口,并扩展了与HTTP协议相关的方法。HttpServletResponse:表示一个HTTP 响应对象。它继承自
ServletResponse
接口,提供了处理 HTTP 响应状态、头和内容的功能。
2. 主要方法
HttpServletRequest
获取请求参数:
String[] getParameterValues(String name)
:根据参数名获取所有值。Map<String, String[]> getParameterMap()
:返回请求参数的映射表。Enumeration<String> getParameterNames()
:枚举所有的请求参数名称。
处理文件上传:
- 使用 Apache Commons FileUpload 库实现,通过
request.getInputStream()
获取输入流进行处理。
- 使用 Apache Commons FileUpload 库实现,通过
获取客户端信息:
String getRemoteAddr()
: 返回客户端IP地址。String getUserAgent()
: 返回用户代理字符串(浏览器类型)。
设置请求属性:
- 使用
setAttribute(String name, Object value)
方法将对象存入request域,供后续处理使用。
- 使用
HttpServletResponse
响应状态码:
javaresponse.setStatus(HttpServletResponse.SC_OK); // 200 OK
添加HTTP头信息:
javaresponse.setHeader("Content-Type", "text/plain");
发送响应内容:
- 使用
PrintWriter
或ServletOutputStream
写入响应正文。
- 使用
设置Cookie和重定向:
java// 创建并发送一个Cookie Cookie cookie = new Cookie("username", "john_doe"); response.addCookie(cookie); // 重定向到另一个URL response.sendRedirect("/login.jsp");
3. 示例代码
获取请求参数的Servlet:
java
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "RequestParamDemo", urlPatterns = {"/requestParams"})
public class RequestParamDemo extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取所有请求参数
Map<String, String[]> parameterMap = request.getParameterMap();
for (String paramName : parameterMap.keySet()) {
String[] values = parameterMap.get(paramName);
System.out.println("Parameter: " + paramName + ", Value(s): " + Arrays.toString(values));
}
// 获取单个参数值
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
response.setContentType("text/plain");
response.getWriter().println(
"Processed parameters:\n" +
"- Username: " + username + "\n" +
"- Age: " + age
);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 处理POST请求,与doGet类似
doGet(request, response);
}
}
使用HttpServletRequest获取客户端信息的Servlet:
java
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "ClientInfoDemo", urlPatterns = {"/client-info"})
public class ClientInfoDemo extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String clientIP = request.getRemoteAddr();
String userAgent = request.getUserAgent();
response.setContentType("text/plain");
response.getWriter().println(
"Client Information:\n" +
"- IP Address: " + clientIP + "\n" +
"- User Agent: " + userAgent
);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 处理POST请求,与doGet类似
doGet(request, response);
}
}
使用HttpServletResponse设置响应的Servlet:
java
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "ResponseDemo", urlPatterns = {"/response"})
public class ResponseDemo extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置响应状态码
response.setStatus(HttpServletResponse.SC_OK);
// 添加头信息
response.setHeader("Content-Type", "text/html");
response.setHeader("Cache-Control", "no-cache");
// 发送内容
response.getWriter().println(
"<html>\n" +
"<body>\n" +
"<h1>Hello, World!</h1>\n" +
"</body>\n" +
"</html>"
);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 处理POST请求,与doGet类似
doGet(request, response);
}
}
4. 使用curl命令测试
测试获取请求参数:
bash
# 发送GET请求带查询参数
curl "http://localhost:8080/YourProject/requestParams?username=john&age=30"
# 示例输出:
Processed parameters:
- Username: john
- Age: 30
测试客户端信息获取:
bash
# 发送GET请求,查看返回的客户端IP和User Agent
curl http://localhost:8080/YourProject/client-info
# 示例输出(根据实际环境):
Client Information:
- IP Address: 127.0.0.1
- User Agent: curl/7.x.x (your system info)
测试HTTP响应设置:
bash
# 发送GET请求到"/response"路径,查看返回的内容和头信息
curl -I http://localhost:8080/YourProject/response
# 示例输出(部分):
HTTP/1.1 200 OK
Content-Type: text/html
Cache-Control: no-cache
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>
5. 注意事项
在处理请求参数时,确保正确解析和验证输入数据,防止SQL注入等安全问题。
使用
HttpServletResponse
设置状态码和头信息时,注意遵循HTTP协议规范。
通过以上示例代码和curl命令的使用,可以深入理解HttpServletRequest和HttpServletResponse在Java EE中的应用,并掌握如何获取请求参数、客户端信息以及正确设置响应内容。