Servlet 是处理客户端HTTP请求的核心组件,通过 HttpServletRequest
对象获取请求信息,并使用 HttpServletResponse
生成响应。本文将介绍如何处理不同类型的HTTP请求。
目录
1. HTTP 请求概述
- HTTP 请求:客户端(如浏览器)通过HTTP协议发送的请求,包括方法、头信息、参数等。
- Servlet 处理:
HttpServletRequest
:提供请求数据(如参数、头、方法)。HttpServletResponse
:生成响应。- 常见方法:
- GET:获取数据,参数在URL中。
- POST:提交数据,参数在请求体中。
- PUT/DELETE:更新或删除资源。
2. 处理GET请求
GET请求通常用于查询数据,参数通过URL传递。
示例代码:GetRequestServlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class GetRequestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String id = request.getParameter("id");
String queryString = request.getQueryString();
out.println("<html><body>");
out.println("<h1>GET 请求</h1>");
out.println("<p>ID: " + (id != null ? id : "未提供") + "</p>");
out.println("<p>查询字符串: " + (queryString != null ? queryString : "无") + "</p>");
out.println("</body></html>");
}
}
测试URL
http://localhost:8080/myapp/get?id=123
3. 处理POST请求
POST请求用于提交数据,参数在请求体中。
示例代码:PostRequestServlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class PostRequestServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8"); // 处理中文
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String name = request.getParameter("name");
String message = request.getParameter("message");
out.println("<html><body>");
out.println("<h1>POST 请求</h1>");
out.println("<p>姓名: " + (name != null ? name : "未提供") + "</p>");
out.println("<p>消息: " + (message != null ? message : "未提供") + "</p>");
out.println("</body></html>");
}
}
对应HTML
<form method="POST" action="/myapp/post">
姓名: <input type="text" name="name"><br>
消息: <textarea name="message"></textarea><br>
<input type="submit" value="提交">
</form>
4. 其他HTTP方法
Servlet 支持其他HTTP方法,如PUT和DELETE。
示例:PutRequestServlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class PutRequestServlet extends HttpServlet {
@Override
protected void doPut(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String resourceId = request.getParameter("resourceId");
out.println("<html><body>");
out.println("<h1>PUT 请求</h1>");
out.println("<p>更新资源 ID: " + (resourceId != null ? resourceId : "未提供") + "</p>");
out.println("</body></html>");
}
}
- 测试:使用工具如Postman发送PUT请求。
5. 综合示例
以下是一个支持多种HTTP方法的Servlet。
HTML:request.html
<!DOCTYPE html>
<html>
<head><title>HTTP 请求测试</title></head>
<body>
<h2>GET 请求</h2>
<form method="GET" action="/myapp/request">
ID: <input type="text" name="id"><br>
<input type="submit" value="GET提交">
</form>
<h2>POST 请求</h2>
<form method="POST" action="/myapp/request">
姓名: <input type="text" name="name"><br>
消息: <input type="text" name="message"><br>
<input type="submit" value="POST提交">
</form>
</body>
</html>
Servlet:RequestServlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class RequestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String id = request.getParameter("id");
out.println("<html><body>");
out.println("<h1>GET 请求</h1>");
out.println("<p>ID: " + (id != null ? id : "未提供") + "</p>");
out.println("<a href=\"/myapp/request.html\">返回</a>");
out.println("</body></html>");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String name = request.getParameter("name");
String message = request.getParameter("message");
out.println("<html><body>");
out.println("<h1>POST 请求</h1>");
out.println("<p>姓名: " + (name != null ? name : "未提供") + "</p>");
out.println("<p>消息: " + (message != null ? message : "未提供") + "</p>");
out.println("<a href=\"/myapp/request.html\">返回</a>");
out.println("</body></html>");
}
}
配置:web.xml
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">
<servlet>
<servlet-name>RequestServlet</servlet-name>
<servlet-class>RequestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RequestServlet</servlet-name>
<url-pattern>/request</url-pattern>
</servlet-mapping>
</web-app>
6. 部署与测试
部署
- 编译:
javac -cp /path/to/tomcat/lib/servlet-api.jar RequestServlet.java
- 将
.class
文件放入myapp/WEB-INF/classes/
。 - 将
request.html
放入myapp/
。 - 部署
myapp
到Tomcat的webapps
目录。 - 启动Tomcat。
测试
- 访问:
http://localhost:8080/myapp/request.html
。 - 测试GET:输入ID并提交。
- 测试POST:输入姓名和消息并提交。
7. 参考资料
出站链接
- Servlet API – 官方规范。
- HttpServletRequest文档 – 请求API。
- Java EE教程 – HTTP请求处理。
其他资源
- 《Servlet Programming》 – HTTP请求章节。
- X社区:搜索 #ServletHTTP 获取示例。
这篇指南展示了Servlet处理客户端HTTP请求的实现,包括GET和POST。如果需要更多内容(如PUT/DELETE、请求头处理或JSON响应),请告诉我!
发表回复