当前位置: 首页 > news >正文

java HttpServletRequest 和 HttpServletResponse

HttpServletRequest 和 HttpServletResponse 详解

1. HttpServletRequest(HTTP 请求对象)

HttpServletRequest 是 Java Servlet API 提供的接口,用于封装客户端的 HTTP 请求信息。它继承自 ServletRequest,并增加了 HTTP 协议相关的功能。

1.1 核心功能

(1) 获取请求参数
  • getParameter(String name)
    获取单个请求参数(如表单字段、URL 查询参数)。
    String username = request.getParameter("username");
    
  • getParameterValues(String name)
    获取多个同名参数(如复选框、多选列表)。
    String[] hobbies = request.getParameterValues("hobby");
    
  • getParameterMap()
    返回所有请求参数的 Map<String, String[]>
    Map<String, String[]> paramMap = request.getParameterMap();
    
(2) 获取请求头信息
  • getHeader(String name)
    获取单个请求头(如 User-AgentCookie)。
    String userAgent = request.getHeader("User-Agent");
    
  • getHeaders(String name)
    返回指定请求头的所有值(如多个 Accept 头)。
    Enumeration<String> acceptHeaders = request.getHeaders("Accept");
    
  • getHeaderNames()
    返回所有请求头名称。
    Enumeration<String> headerNames = request.getHeaderNames();
    
(3) 获取客户端和服务器信息
  • getRemoteAddr()
    获取客户端 IP 地址。
    String ip = request.getRemoteAddr();
    
  • getMethod()
    获取 HTTP 方法(GETPOSTPUTDELETE 等)。
    String method = request.getMethod();
    
  • getRequestURL()
    返回完整的请求 URL(StringBuffer 类型)。
    StringBuffer url = request.getRequestURL();
    
  • getRequestURI()
    返回请求的 URI(不包含协议、域名和端口)。
    String uri = request.getRequestURI(); // 如 "/app/login"
    
(4) 获取会话(Session)
  • getSession()
    获取当前会话,如果不存在则创建新会话。
    HttpSession session = request.getSession();
    
  • getSession(boolean create)
    如果 create=false,仅获取现有会话,不创建新会话。
    HttpSession session = request.getSession(false);
    
(5) 获取请求体(Body)
  • getInputStream()
    获取 ServletInputStream,用于读取二进制数据(如文件上传)。
    ServletInputStream inputStream = request.getInputStream();
    
  • getReader()
    获取 BufferedReader,用于读取文本数据(如 JSON、XML)。
    BufferedReader reader = request.getReader();
    
(6) 属性(Attribute)管理
  • setAttribute(String name, Object value)
    存储请求范围内的属性(可用于 JSP 或转发)。
    request.setAttribute("message", "Hello");
    
  • getAttribute(String name)
    获取请求属性。
    String msg = (String) request.getAttribute("message");
    
  • removeAttribute(String name)
    移除请求属性。
    request.removeAttribute("message");
    

2. HttpServletResponse(HTTP 响应对象)

HttpServletResponse 是 Java Servlet API 提供的接口,用于封装服务器对客户端的 HTTP 响应。它继承自 ServletResponse,并增加了 HTTP 协议相关的功能。

2.1 核心功能

(1) 设置响应状态
  • setStatus(int sc)
    设置 HTTP 状态码(如 200404500)。
    response.setStatus(HttpServletResponse.SC_OK); // 200
    
  • sendError(int sc, String msg)
    发送错误状态码和消息(如 404 Not Found)。
    response.sendError(HttpServletResponse.SC_NOT_FOUND, "Page not found");
    
(2) 设置响应头
  • setHeader(String name, String value)
    设置响应头(如 Content-TypeCache-Control)。
    response.setHeader("Content-Type", "text/html");
    
  • addHeader(String name, String value)
    添加多个同名响应头(如多个 Set-Cookie)。
    response.addHeader("Set-Cookie", "user=admin");
    
  • setContentType(String type)
    设置内容类型(如 text/htmlapplication/json)。
    response.setContentType("application/json");
    
  • setCharacterEncoding(String charset)
    设置字符编码(如 UTF-8)。
    response.setCharacterEncoding("UTF-8");
    
(3) 写入响应数据
  • getOutputStream()
    获取 ServletOutputStream,用于写入二进制数据(如图片、文件)。
    ServletOutputStream out = response.getOutputStream();
    out.write(bytes);
    
  • getWriter()
    获取 PrintWriter,用于写入文本数据(如 HTML、JSON)。
    PrintWriter writer = response.getWriter();
    writer.println("<h1>Hello World</h1>");
    
(4) 重定向
  • sendRedirect(String location)
    发送 302 重定向到指定 URL。
    response.sendRedirect("/login");
    
(5) Cookie 管理
  • addCookie(Cookie cookie)
    向客户端添加 Cookie。
    Cookie cookie = new Cookie("username", "admin");
    response.addCookie(cookie);
    
(6) 缓存控制
  • setDateHeader(String name, long date)
    设置日期型响应头(如 Expires)。
    response.setDateHeader("Expires", System.currentTimeMillis() + 3600000);
    

3. 实际应用示例

示例 1:登录表单处理

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws IOException {
    
    String username = request.getParameter("username");
    String password = request.getParameter("password");

    if ("admin".equals(username) && "123456".equals(password)) {
        // 登录成功,存储 Session
        HttpSession session = request.getSession();
        session.setAttribute("user", username);
        
        // 重定向到首页
        response.sendRedirect("/home");
    } else {
        // 登录失败,返回错误
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<h1>Login Failed</h1>");
    }
}

示例 2:返回 JSON 数据

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws IOException {
    
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    
    PrintWriter out = response.getWriter();
    String json = "{\"name\":\"John\", \"age\":30}";
    out.print(json);
}

4. 总结

功能HttpServletRequestHttpServletResponse
获取请求数据getParameter(), getHeader()-
获取会话getSession()-
读取请求体getInputStream(), getReader()-
设置响应数据-getOutputStream(), getWriter()
设置状态码-setStatus(), sendError()
设置响应头-setHeader(), addHeader()
重定向-sendRedirect()
Cookie 管理getCookies()addCookie()

这两个对象是 Java Web 开发的核心,几乎所有 Web 框架(如 Spring MVC)底层都依赖它们进行 HTTP 请求和响应处理。

相关文章:

  • 制作一款打飞机游戏教程1
  • 使用 Redis + Redisson 分布式锁来生成全局唯一、线程安全的带日期前缀的流水号的完整实现。
  • 【FPGA开发技巧】Modelsim仿真中,显示状态机的名称,而非编码数字
  • 水库大坝安全监测系统
  • 蓝桥杯--结束
  • 缓存不只是加速器:深入理解 Redis 的底层机制
  • Unity IL2CPP内存泄漏追踪方案(基于Memory Profiler)技术详解
  • Charles的安装和使用教程
  • 高支模自动化监测解决方案
  • MACOS15版本安装 python mysqlclient 以连接mysql 8.0
  • 小推桌面-一款全新的第三方电视桌面-全网通桌面
  • Python数据可视化-第8章-使用matplotlib绘制高级图表
  • 后端面试问题收集以及答案精简版
  • MySQL 事务的优先级
  • [ctfshow web入门] web41
  • 物理备份工具 BRM vs gs_probackup
  • AndroidTV D贝桌面-v3.2.5-[支持文件传输]
  • “破解”GPT-4o生图技术:万物皆可吉卜力的技术路线推测
  • w285药店管理系统的设计与实现
  • 腾讯OCR文字识别实践--简历文本识别
  • 5173游戏交易网站源码/网站优化推广费用
  • 江阴网络公司做网站/5g网络优化工程师
  • 专业重庆房产网站建设/最简单的网页制作
  • 网友要求你帮助他在某网站做测试/seo优化外包
  • 蚌埠公司做网站/百度一下首页下载安装桌面
  • 做网站不实名认证可以吗/360免费建站系统