Java Web请求与响应是构建Web应用程序的核心机制,它允许客户端(通常是浏览器)与服务器进行通信。在Java Web中,这个过程通常涉及到Servlet,一个用于处理HTTP请求并生成响应的Java类。Servlet容器(如Tomcat)负责管理和调度Servlet实例。
Servlet在处理请求时,会创建两个对象:HttpServletRequest和HttpServletResponse。HttpServletRequest对象封装了来自客户端的所有请求信息,包括HTTP请求头、请求参数、请求路径等。而HttpServletResponse对象则用于构建和发送回给客户端的响应,包括状态码、响应头和响应体。
HttpServletRequest接口提供了多种方法来访问请求信息。例如,`getParameter(String name)`用于获取请求参数的值,`getHeader(String name)`用于获取请求头的值,`getLocale()`用于获取客户端的首选语言等。
HttpServletResponse接口则是响应的载体,它提供了设置状态码、响应头和响应体的方法。例如,`setStatus(int sc)`用来设置HTTP状态码,常见的有200(成功),404(未找到)等。`sendError(int sc)`用于发送错误状态码,并可选地提供错误信息。`addHeader(String name, String value)`和`setHeader(String name, String value)`用于添加或设置响应头,如`Content-Type`用于指定响应内容的MIME类型。`setContentType(String type)`和`setCharacterEncoding(String charset)`分别用于设置MIME类型和字符编码,确保正确处理文本数据,特别是对于中文字符的编码问题。
关于中文输出乱码问题,这是因为不同的编码标准可能导致编码和解码的不匹配。默认情况下,HttpServletResponse的字符输出流使用ISO 8859-1编码,不支持中文。如果要处理中文数据,需要明确设置响应的字符编码,例如使用`setCharacterEncoding("UTF-8")`,确保与浏览器的解码方式一致,以避免乱码问题。
以下是一个简单的Servlet示例,展示了如何处理请求并发送响应:
```java
package zzz;
import java.io.IOException;
import java.io.PrintWriter;
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("/example")
public class ExampleServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应编码,避免中文乱码
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
// 获取请求参数
String parameter = request.getParameter("paramName");
// 创建并使用PrintWriter发送响应
PrintWriter writer = response.getWriter();
writer.println("<h1>Hello, " + parameter + "!</h1>");
writer.close();
}
}
```
在这个例子中,Servlet监听"/example"路径的GET请求,读取请求参数,并通过PrintWriter将响应内容写入到HTTP响应体中。设置正确的字符编码确保了中文参数能够正确显示。
Java Web请求与响应机制是通过HttpServletRequest和HttpServletResponse这两个接口实现的,它们提供了一系列方法来处理和构造HTTP交互。理解并熟练掌握这些接口的使用,是开发Java Web应用的基础。