【JavaWeb】知识总结Ⅹ(HttpServletRequest, HttpServletResponse)

简介: 请求行信息:可以使用getMethod()方法获取请求方法(如GET、POST等),使用getRequestURI()方法获取请求的URI(统一资源标识符),使用getProtocol()方法获取请求使用的协议(如HTTP/1.1)。请求头信息:可以使用getHeader(String name)方法获取指定名称的请求头的值,使用getHeaderNames()方法获取所有请求头的名称的枚举。请求参数:可以使用getParameter(String name)方法获取指定名称的请求参数的值,使用getParameterNames()方法获取所有请求参数的名称的枚举。

目录


一. HttpServletRequest


🌔HttpServletRequest介绍


🌓HttpServletRequest 常用方法


🌕HttpServletRequest 注意事项和细节


二. HttpServletResponse


🌕注意事项


  总结


一. HttpServletRequest

HttpServletRequest介绍

HttpServletRequest代表了客户端向服务器发送的HTTP请求。它是Servlet容器在调用Servlet服务时,通过参数传递给Servlet的对象。


HttpServletRequest对象提供了许多方法来获取有关HTTP请求的信息,包括:


请求行信息:可以使用getMethod()方法获取请求方法(如GET、POST等),使用getRequestURI()方法获取请求的URI(统一资源标识符),使用getProtocol()方法获取请求使用的协议(如HTTP/1.1)。

请求头信息:可以使用getHeader(String name)方法获取指定名称的请求头的值,使用getHeaderNames()方法获取所有请求头的名称的枚举。

请求参数:可以使用getParameter(String name)方法获取指定名称的请求参数的值,使用getParameterNames()方法获取所有请求参数的名称的枚举。

请求体信息:对于POST请求,可以使用getReader()方法获取请求体的字符输入流,或者使用getInputStream()方法获取请求体的字节输入流。

Cookie:可以使用getCookies()方法获取所有的Cookie信息。

Session管理:可以使用getSession()方法获取与当前请求关联的Session对象。

除了上述方法之外,HttpServletRequest还提供了其他许多方法,用于获取请求的各个方面的信息。通过HttpServletRequest对象,Servlet可以处理客户端发送的请求,并根据请求的信息做出相应的响应。


HttpServletRequest 常用方法

1. getRequestURI() 获取请求的资源路径 http://localhost:8080 /servlet/loginServlet

2. getRequestURL() 获 取 请 求 的 统 一 资 源 定 位 符 ( 绝 对 路 径 ) http://localhost:8080/servlet/loginServlet

3. getRemoteHost() 获取客户端的主机 , getRemoteAddr()

4. getHeader() 获取请求头

5. getParameter() 获取请求的参数

6. getParameterValues() 获取请求的参数(多个值的时候使用) , 比如 checkbox, 返回的 数组

7. getMethod() 获取请求的方式 GET 或 POST

8. setAttribute(key, value); 设置域数据

9. getAttribute(key); 获取域数据

10. getRequestDispatcher () 获取请求转发对象 , 请求转发的核心对象

代码示例  :

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(urlPatterns = {"/HttpServletRequestMethods"})
public class HttpServletRequestMethods extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doGet(req, resp);
        doPost(req, resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doPost(req, resp);
        req.setCharacterEncoding("utf-8");
//        http://localhost:8080/ServletStu/HttpServletRequestMethods?username=%E5%8F%91%E5%A3%AB%E5%A4%A7%E5%A4%AB&pwd=12345679&hobby=lh
        // 看上一行你就全懂了
        String username = req.getParameter("username");
        String pwd = req.getParameter("pwd");
        System.out.println("账号 : " + username + " 密码 : " + pwd);
        //        账号 : 发士大夫 密码 : 12345679
        String[] hobbies = req.getParameterValues("hobby");
        for (String hobby : hobbies) {
            System.out.println("爱好 : " + hobby);
        }
        //        爱好 : lh
        String method = req.getMethod();
        System.out.println(method); // 请求方法
        //                GET
        String host = req.getHeader("Host");
        System.out.println(host); // 服务器的主机 : ip+port
        //        localhost:8080
        String referer = req.getHeader("Referer");
        System.out.println(referer);
        // http://localhost:8080/ServletStu/register_request.html
        String header = req.getHeader("User-Agent");
        System.out.println(header);
        // Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
        String[] split = header.split(" ");
        System.out.println(split[1] + split[2] + split[3] + split[4] + split[5]);
        // (WindowsNT10.0;Win64;x64)
        String requestURI = req.getRequestURI();
        System.out.println(requestURI);
        //                /ServletStu/HttpServletRequestMethods
        StringBuffer requestURL = req.getRequestURL();
        System.out.println(requestURL);
        //        http://localhost:8080/ServletStu/HttpServletRequestMethods
        String protocol = req.getProtocol();
        System.out.println(protocol);
        //        HTTP/1.1
        String remoteAddr = req.getRemoteAddr();
        String remoteUser = req.getRemoteUser();
        String remoteHost = req.getRemoteHost();
        int remotePort = req.getRemotePort();
        System.out.println("remoteAddr = " + remoteAddr + ", remoteUser = " + remoteUser + ", remoteHost" + remoteHost + ", remotePort" + remotePort);
        //        remoteAddr = 127.0.0.1, remoteUser = null, remoteHost127.0.0.1, remotePort59671
    }
}

 


HttpServletRequest 注意事项和细节

1. 获 取 doPost 参 数 中 文 乱 码 解 决 方 案 , 注 意 setCharacterEncoding("utf-8") 要 写 在 request.getParameter() 前

   

String username = req.getParameter("username");

2. 注意:如果通过 PrintWriter writer, 有返回数据给浏览器,建议将获取参数代码写在 writer.print() 之前,否则可能获取不到参数值(doPost)


二. HttpServletResponse

HttpServletResponse代表了服务器向客户端发送的HTTP响应。它是Servlet容器在调用Servlet服务时,通过参数传递给Servlet的对象。


HttpServletResponse对象提供了许多方法来设置和发送HTTP响应,包括:


设置响应状态码:可以使用setStatus(int sc)方法设置响应的状态码,如200表示成功、404表示资源未找到等。

设置响应头信息:可以使用setHeader(String name, String value)方法设置指定名称的响应头的值,使用addHeader(String name, String value)方法添加响应头。

设置响应内容的数据类型:可以使用setContentType(String type)方法设置响应内容的MIME类型。

获取输出流:可以使用getWriter()方法获取字符输出流,或者使用getOutputStream()方法获取字节输出流,用于向客户端发送响应内容。

设置重定向:可以使用sendRedirect(String location)方法将客户端重定向到另一个URL。

设置Cookie:可以使用addCookie(Cookie cookie)方法添加Cookie到响应中。

除了上述方法之外,HttpServletResponse还提供了其他许多方法,用于设置和发送HTTP响应的各个方面。通过HttpServletResponse对象,Servlet可以根据业务逻辑生成响应内容并发送给客户端,与客户端进行交互。


注意事项

1. 字节流 getOutputStream(); 常用于下载(处理二进制数据)

2. 字符流 getWriter(); 常用于回传字符串

3. ( 细节: ) 两个流同时只能使用一个。 使用了字节流,就不能再使用字符流,反之亦然, 否则就会报错

4. 处理中文乱码问题 -

方案一  

//设置服务器字符集为UTF-8
resp.setCharacterEncoding("UTF-8");
//通过响应头,设置浏览器也使用UTF-8字符集
resp.setHeader( "Content-Type", "text/html;charset=UTF-8");

方案二

response.setContentType("text/html; charset=utf-8");

总结

HttpServletResponse代表了服务器向客户端发送的HTTP响应。


HttpServletRequest代表了客户端向服务器发送的HTTP请求。


两者都是Tomcat封装的对象, 传递给servlet进行执行, 而servlet可以获取它们的具体信息, 并对一些信息进行修改


相关文章
|
6月前
|
存储 前端开发 JavaScript
基于JavaWeb实现停车场管理系统
基于JavaWeb实现停车场管理系统
111 1
|
6月前
|
前端开发 JavaScript Java
图书借阅管理平台|基于JavaWeb实现图书借阅系统
图书借阅管理平台|基于JavaWeb实现图书借阅系统
140 1
|
3月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
485 37
|
2月前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
37 2
|
2月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
72 5
|
6月前
|
前端开发 Java 关系型数据库
JavaWeb开发简介
JavaWeb开发简介
65 0
|
3月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
3月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
124 2
|
3月前
|
SQL JSON JavaScript
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
Vue 指令、生命周期、this和$、vue脚手架进行模块化开发/ElementUI框架、综合案例,element商品列表展示增删改查
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
|
6月前
|
SQL Java 数据库连接
JavaWeb Mapper代理开发
JavaWeb Mapper代理开发
下一篇
DataWorks