JavaWeb的小结02

news2025/3/12 14:23:32

第2章-第2节

一、知识点

HttpServletRequest请求对象、HttpServletResponse响应对象、响应内容类型Content-Type、请求转发、重定向、ServletContext对象。

二、目标

  1. 深刻理解HttpServletRequest对象的作用。

  2. 深刻理解HttpServletResponse对象的作用。

  3. 掌握HttpServletRequest获取参数的常用方法。

  4. 掌握HttpServletResponse响应内容的方法。

  5. 理解响应内容类型Content-Type。

  6. 理解请求转发和重定向的区别。

  7. 掌握ServletContext对象的使用。

三、内容分析

  1. 重点

    • HttpServletRequest对象的作用。

    • HttpServletRequest对象获取客户端参数的方法。

    • HttpServletResponse对象的作用。

    • HttpServletResponse响应数据给客户端。

    • 理解请求转发和重定向的区别。

  2. 难点

    • 请求与响应的理解。

    • 响应内容类型Content-Type的理解。

四、内容

1、HttpServletRequest

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。

一个完整的HTTP请求包括:请求行、请求头、请求体。

我们可以通过浏览器,【开发者工具】-【Network】-【Name】-【Headers】看到请求信息。

1.1 获取请求行信息

假设使用请求 http://localhost:8080/web/test?name=张三&age=18 测试以下方法,结果展示在示例结果列。

方法名说明示例结果
getMethod()获取请求方式。GET
getRequestURL()获取完整路径。http://localhost:8080/web/test
getRequestURI()获取除了域名或者IP部分的路径。/web/test
getServletPath()获取Servlet路径。/test
getContextPath()获取虚拟目录。/web
getQueryString()获取参数,键=值,即?号后面的部分。name=%E5%BC%A0%E4%B8%89&age=18
getProtocol()获取协议及版本。HTTP/1.1
getRemoteAddr()返回IP地址。0:0:0:0:0:0:0:1(属于ipv6,服务器和客户端都在同一台电脑上会出现)

1.2 获取请求头信息

请求头包含许多有关的前端环境和请求正文的有用信息。

请求头存在的主要意义是: 将前端的一些信息告诉后端

方法名说明
String getHeader(String name)根据请求头名字获取对应的请求头值。
Enumeration<string> getHeaderNames()获取所有的请求头名字。
//获取请求头
String accept = req.getHeader("Accept");
​
//迭代请求头信息
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
    String name = headerNames.nextElement();
    String value = request.getHeader(name);
    System.out.println(value);
}
1.3 获取请求体信息

请求体主要包含前端发送给后端的数据(参数)

对于GET请求, 一般不需要请求体, 因为GET参数直接体现在URL上。

对于POST请求, 需要请求体, 请求体里保存POST参数。

方法名说明
BufferedReader getReader()获取字符输入流,只能操作字符数据。
ServletInputStream getInputStream()获取字节输入流,可以操作所有类型的数据(文件上传)。
String getParameter(String name)根据参数名获取参数值,get、post通用。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String name = req.getParameter("name");
    System.out.println(name);
}
​
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // post请求中文会乱码
    req.setCharacterEncoding("utf8");
​
    String name = req.getParameter("name");
    System.out.println(name);
}
1.4 请求转发

一种服务器内部资源跳转的方法,servlet之间的跳转。(可以理解为函数之间的互相调用)

  1. 使用步骤

    • 通过request请求对象获取请求转发器对象。

    • 通过RequestDispatcher对象进行转发。

    request.getRequestDispatcher("转发路径").forward(request, response)
  2. 特点

    • 浏览器地址路径不发生变化。

    • 转发是一次请求。

    • 只能转发到服务器内部资源。

  3. 共享数据

    请求转发中涉及到的多个servlet,可以共享数据。

    setAttribute(String name, Object object) // 存储数据
    getAttribute(String name) // 通过键获取数据
    removeAttribute(String name) // 通过键移除数据

2、HttpServletResponse

当客户端通过HTTP协议访问服务器时,如果服务器要给客户端一些相响应的信息,就可以使用HttpServletResponse提供的方法进行设置。

1.1 核心方法
方法说明
void setStatus(int sc)设置响应状态码
void setHeader(String name,String value)设置一个带有给定的名称和值的Header,如果name已经存在,则覆盖旧的值
void setContentType(String type)设置被发送到客户端的响应的内容类型
PrintWriter getWriter()用于往 body 中写入文本格式数据

响应状态码:服务器告诉客户端浏览器本次请求响应的一个状态,都是三位数。

  1. 1xx:服务器接收客户端消息,但是没有接收完成,等待一段时间后,发送1xx状态码

  2. 2xx:成功,200

  3. 3xx:重定向。302重定向,304访问缓存

  4. 4xx:客户端错误。404找不到后端地址,401缺少权限,403权限认证失败

  5. 5xx:服务器端错误。500服务器内部错误

1.2 重定向
resp.sendRedirect("www.baidu.com")

特点:

  1. 地址栏发生变化。

  2. 重定向是两次请求,不能使用request对象来共享数据。

  3. 重定向可以访问其他站点的资源。

3、ServletContext

ServletContext官方叫Servlet上下文。服务器会为每一个工程创建一个ServletContext对象。这个对象全局唯一,工程内所有的servlet都共享这个对象。所以叫全局应用程序共享对象。

3.1 获取方式
  1. req.getServletContext()

  2. this.getServletContext()

3.2 核心方法
方法说明
setAttribute(name, value)添加数据
getArrtibute(name)获取数据
removeAttribute(name)删除数据

3.3 获取MIME类型

在互联网通信过程中定义的一种文件数据类型。

String filename = "a.jpg";
String mimeType = context.getMimeType(filename);
System.out.println(mimeType);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2191187.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是请求转发?

请求转发 解释 请求转发,将前端发送的请求转发到别的资源 别的资源是指: servlet,页面 即: 请求转发,可以将请求转发值另外一个servlet;也可以是将请求转发至页面 1、 请求转发演示 1.1 请求转发跳转页面 实战: 之前注册练习,修改: 实现注册完跳转到登录页面 1.2 请求转发…

【Matlab案例】imageJ + matlab 实现物体轨迹追踪及路径彩色上色

我们经常看到一些文献中对细胞或者粒子的运动轨迹进行上色&#xff0c;不同的颜色对应着不同的时间。一纯色的轨迹实现起来很方便&#xff0c;彩色的轨迹如何实现呢&#xff1f;本文使用imageJ获取轨迹数据&#xff0c;使用matlab对轨迹进行上色。结果如下&#xff1a; 1. im…

Java | Leetcode Java题解之第457题环形数组是否存在循环

题目&#xff1a; 题解&#xff1a; class Solution {public boolean circularArrayLoop(int[] nums) {int n nums.length;for (int i 0; i < n; i) {if (nums[i] 0) {continue;}int slow i, fast next(nums, i);// 判断非零且方向相同while (nums[slow] * nums[fast]…

Python爬虫(二)--http基本原理(Python Crawler (2) Basic Principles of HTTP)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

TriLite完成A轮扩展融资:加速AR微型投影仪技术创新与市场拓展

近日,全球领先的AR微型投影仪开发商TriLite宣布成功完成A轮扩展融资,将A轮融资总额提升至超过2000万欧元。这一轮融资不仅彰显了资本市场对TriLite技术实力和市场潜力的高度认可,更为其后续在AR微型投影仪领域的技术研发、产品迭代以及市场拓展提供了坚实的资金保障。以下是…

力扣刷题 | 两数之和

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 给定一个整数数组 nums 和…

C++ | Leetcode C++题解之第456题132模式

题目&#xff1a; 题解&#xff1a; class Solution { public:bool find132pattern(vector<int>& nums) {int n nums.size();vector<int> candidate_i {nums[0]};vector<int> candidate_j {nums[0]};for (int k 1; k < n; k) {auto it_i upper_…

Leetcode—416. 分割等和子集【中等】

2024每日刷题&#xff08;172&#xff09; Leetcode—416. 分割等和子集 C实现代码 class Solution { public:bool canPartition(vector<int>& nums) {int sum accumulate(nums.begin(), nums.end(), 0);if(sum % 2) {return false;}int m nums.size();int subSu…

自动售卖柜目标检测数据集 4880张 商品数据集 voc yolo

自动售货机商品检测数据集 名称 自动售货机商品检测数据集 (Automatic Vending Machine Product Detection Dataset) 规模 图像数量&#xff1a;4880张图像。类别&#xff1a;30种不同的商品类别。 数据划分 训练集 (Train)&#xff1a;通常占总数据的80%左右&#xff0c;…

【AI知识点】二项分布(Binomial Distribution)

二项分布&#xff08;Binomial Distribution&#xff09; 是概率论和统计学中描述独立重复的伯努利试验中成功次数的离散概率分布。它是基于多次独立的伯努利试验的扩展&#xff0c;用于描述在 n n n 次试验中发生成功的次数。 1. 二项分布的定义 二项分布用于描述在 n n n…

利用GPU进行训练

文章目录 一、GPU训练模型二、对比使用gpu和cpu进行训练所花费的时间三、GPU训练模型的第二种表达方式 一、GPU训练模型 GPU只能够训练三种变量&#xff0c;分别是&#xff1a; 网络模型 数据&#xff08;输入&#xff0c;标注targets&#xff09; 损失函数 使用方式是.cuda…

精品WordPress主题/响应式个人博客主题Kratos

Kratos 是一款专注于用户阅读体验的响应式 WordPress 主题&#xff0c;整体布局简洁大方&#xff0c;针对资源加载进行了优化。 Kratos主题基于Bootstrap和Font Awesome的WordPress一个干净&#xff0c;简单且响应迅速的博客主题&#xff0c;Vtrois创建和维护&#xff0c; 主…

rockylinux9安装软件报错

1、rocky linux9再安装软件的时候报错&#xff1a; [rootClient119 yum.repos.d]# yum -y install epel-release [rootClient119 yum.repos.d]# yum -y install libcgroup Extra Packages for Enterprise Linux 9 - x86_64 …

【MySQL 09】表的内外连接

目录 1.内连接 创建表&#xff08;案例准备&#xff09; 案例&#xff1a; 2.外连接 2.1左外连接 案例&#xff1a; 2.2右外连接 案例&#xff1a; 1.内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过…

什么是pip? -- Python 包管理工具

前言 不同的编程语言通常都有自己的包管理工具&#xff0c;这些工具旨在简化项目的依赖管理、构建过程和开发效率&#xff0c;同时促进代码的复用和共享。每个包管理工具都有其独特的特点和优势&#xff0c;开发者可以根据自己的编程语言和项目需求选择合适的包管理工具。 pip是…

R语言的下载、安装及环境配置(RstudioVSCode)

0x01 R语言篇 一、软件介绍 R for Windows是一个免费的用于统计计算和统计制图的优秀工具&#xff0c;是R语言开发工具。它拥有数据存储和处理系统、数组运算工具&#xff08;其向量、矩阵运算方面功能尤其强大&#xff09;、完整连贯的统计分析工具、优秀的统计制图等功能。…

Spring Cloud之OpenFeign的具体实践

1 基本概念 OpenFeign基于Feign框架开发&#xff0c;而Feign是Netflix开源的一个声明式Web服务客户端。OpenFeign通过定义接口、注解和动态代理等方式&#xff0c;将服务调用的过程封装起来&#xff0c;使得开发者只需要定义服务接口&#xff0c;而无需关心底层的HTTP请求和序列…

qt 使用svg 图标的使用

1. 添加模块 在cmakeList.txt 中添加svg模块 2. 使用示例 这里已给已初始化的按钮设置图标为例&#xff1a; int width 12;int height 12;QSvgRenderer *minRenderer new QSvgRenderer(QString(":/resources/icon/min_window.svg"));QPixmap pixmap(width, h…

CSS——属性值计算

CSS——属性值计算 今天来详细讲解一下 CSS的属性值计算过程&#xff0c;这是 CSS 的核心之一&#xff08;另一个是视觉可视化模型&#xff0c;个人理解&#xff0c;这个相对复杂&#xff0c;以后再讲&#xff09;。 基本概念 层叠样式表&#xff1a;Cascade Style Sheet&am…

【YOLO学习】YOLOv5口罩检测实战

文章目录 1. 环境配置2. 下载代码3. 安装库3.1 安装pytorch3.2 安装其他库 4. 测试5. 数据标注6. 模型训练7. 界面可视化 1. 环境配置 1. 先参考其他文章安装 Anaconda 或者 Miniconda&#xff0c;我安装的是 Miniconda。 2. 更换国内源&#xff0c;以加快速度 。可以参考下面这…