Servlet2-HTTP协议、HttpServletRequest类、HttpServletResponse类
目录
HTTP协议
什么是HTTP协议
HTTP协议的特点
请求的HTTP协议格式
GET请求
POST请求
常用的请求头说明
哪些是GET请求,哪些是POST请求
响应的HTTP协议格式
常见的响应码说明
MIME类型说明
HttpServletRequest类
作用
常用方法
如何获取请求参数
post请求中文乱码问题
请求转发
base标签的作用
Web中的相对路径和绝对路径
Web中斜杠/的不同意义
HttpServletResponse类
作用
两个输出流的说明
如何向客户端回传字符串数据
请求重定向
HTTP协议
什么是HTTP协议
协议:指双方或多方相互约定好,大家都需要遵守的规则
HTTP(HyperText Transfer Protocol),超文本传输协议,规定了浏览器和服务器之间数据传输的规则
HTTP协议中的数据又叫报文

HTTP协议的特点
- 基于TCP协议:面向连接,安全
- 基于请求-响应模型的:一次请求对应一次响应
- HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。 缺点:多次请求间不能共享数据。 优点:速度快
请求的HTTP协议格式
客户端给服务器发送数据叫请求,服务器给客户端回传数据叫响应
请求分为GET请求和POST请求两种
GET请求和POST请求的区别:
- GET请求请求参数在请求行中,没有请求体。POST请求请求参数在请求体中
- GET请求请求参数大小有限制,POST没有
GET请求
1.请求行
(1)请求的方式:GET
(2)请求的资源路径:[+?+请求参数]
(3)请求的协议的版本号:HTTP/1.1
2.请求头
由key:value组成,不同的键值对表示不同的含义

POST请求
1.请求行
(1)请求的方式:POST
(2)请求的资源路径:[+?+请求参数]
(3)请求的协议的版本号:HTTP/1.1
2.请求头
由key:value组成,不同的键值对表示不同的含义
请求头和请求体之间有空行
3.请求体:发送给服务器的数据


常用的请求头说明
Accept:客户端可以接收的数据类型
Accept-Language:客户端可以接收的语言类型
User-Agent:客户端浏览器的信息
Host:请求时的服务器ip和端口号
哪些是GET请求,哪些是POST请求
GET请求有哪些:
- form标签 method=get
- a标签
- link标签引入css
- script标签引入js文件
- img标签引入图片
- iframe引入html页面
- 在浏览器地址栏中输入地址后敲回车
POST请求有哪些:
- form标签 method=post
响应的HTTP协议格式
1.响应行
(1)响应的协议和版本号:HTTP/1.1
(2)响应状态码:200
(3)响应状态描述符:OK
2.响应头
由key:value组成,不同的键值对表示不同的含义
响应头和响应体之间有空行
3.响应体:回传给客户端的数据

常见的响应码说明
200:请求成功
302:请求重定向
404:请求服务器已经收到了,但数据不存在(请求地址错误)
500:服务器已经收到请求,但是服务器内部错误(代码错误)
MIME类型说明
MIME是HTTP协议中的数据类型
MIME类型的格式是“大类型/小类型”,并与某一种文件的扩展名相对应
常见的MIME类型:
HttpServletRequest类
作用
每次只要有请求进入tomcat服务器,tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中,然后传递到service方法(doGet和doPost)中给我们使用,我们可以通过HttpServletRequest对象获取到所有请求的信息
常用方法
- getRequestURI():获取请求的资源路径
- getRequestURL():获取请求的统一资源定位符(绝对路径)
- getRemoteHost():获取客户端的ip地址
- getHeader():获取请求头
- getParameter():获取请求的参数
- getParamterValues():获取请求的参数(多个值)
- getMethod():获取请求的方式GET/POST
- setAttribute(key,value):设置域数据
- getAttribute(key):获取域数据
- getRequestDispatcher():获取请求转发对象

启动输出为:

如何获取请求参数





post请求中文乱码问题
要在获取请求参数之前设置才有效

请求转发
请求转发是指服务器收到请求后,从一个资源跳转到另一个资源

请求转发的特点:
- 浏览器地址栏没有变化
- 它们是一次请求
- 它们共享Request域中的数据
- 可以转发到WEB-INF目录下
- 不可以访问工程以外的资源
Servlet1类:
package com.qcby.servlet0724;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;public class Servlet1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取请求参数String username = request.getParameter("username");System.out.println("在Servlet1中查看参数:"+username);//盖章,并传递到Servlet2request.setAttribute("key1","柜台1的章");//问路:Servlet2怎么走/*** 请求转发必须要以斜杠开头*/RequestDispatcher requestDispatcher = request.getRequestDispatcher("/servlet2");//走向Servlet2requestDispatcher.forward(request,response);}}
Servlet2类:
package com.qcby.servlet0724;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;public class Servlet2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取请求参数String username = request.getParameter("username");System.out.println("在Servlet2中查看参数:"+username);//查看柜台1是否盖章Object key1 = request.getAttribute("key1");System.out.println("柜台1是否有章:"+key1);//处理自己的业务System.out.println("Servlet2处理自己的业务");}}
启动:


base标签的作用

base标签可以设置当前页面中所有相对路径工作时,参照哪个路径来进行跳转

Web中的相对路径和绝对路径
相对路径:
.表示当前目录
..表示上一级目录
资源名:表示当前目录/资源名
绝对路径:
http://ip:port/工程路径/资源路径
Web中斜杠/的不同意义
在web中/斜杠是一种绝对路径
- /斜杠如果被浏览器解析,得到的地址是:http://ip:port/
- /斜杠如果被服务器解析,得到的地址是:http://ip:port/工程路径
特殊情况:
response.sendRedirect("/"):把斜杠发送给浏览器解析,得到http://ip:port/
HttpServletResponse类
作用
每次请求进来,tomcat服务器都会创建一个Response对象传递给Servlet程序去使用,HttpServletResponse表示所有响应的信息,如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来进行设置
两个输出流的说明
- 字节流:getOutputStream(),常用于下载(传递二进制数据)
- 字符流:getWriter(),常用于回传字符串(常用)
两个流同时只能使用一个,使用了字节流,就不能再使用字符流,反之亦然,否则报错
如何向客户端回传字符串数据
PrintWriter writer = response.getWriter();
writer.write("response's content");
解决中文乱码问题:
方案一:

方案二:同时设置服务器和客户端都使用UTF-8,还设置了响应头,只有在获取流对象之前设置才有效
response.setContextType("text/html;charset=UTF-8");
请求重定向
请求重定向是指客户端给服务器发请求,然后服务器告诉客户端说我给你一些地址,你去新地址访问(因为之前的地址可能已废弃)

请求重定向的特点:
- 浏览器地址栏会发生变化
- 两次请求
- 不共享Request域中的数据
- 不能访问WEB-INF下的资源
- 可以访问工程外的资源
方案一:

Response1:
package com.qcby.servlet0724;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class Response1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("Response1");//设置响应状态码302,表示重定向resp.setStatus(302);//设置响应头,说明新的地址resp.setHeader("Location","http://localhost:8080/servlet0724/response2");}
}
Response2:
package com.qcby.servlet0724;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class Response2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("response2的结果");}
}
启动:访问http://localhost:8080/servlet0724/response1

方案二(推荐):

相关文章:
Servlet2-HTTP协议、HttpServletRequest类、HttpServletResponse类
目录 HTTP协议 什么是HTTP协议 HTTP协议的特点 请求的HTTP协议格式 GET请求 POST请求 常用的请求头说明 哪些是GET请求,哪些是POST请求 响应的HTTP协议格式 常见的响应码说明 MIME类型说明 HttpServletRequest类 作用 常用方法 如何获取请求参数 po…...
探索数据的内在世界:sklearn中分层特征聚类标签的可视化技术
探索数据的内在世界:sklearn中分层特征聚类标签的可视化技术 在机器学习中,聚类是一种探索数据结构的强大工具。对于具有分层特征的数据,如文本、时间序列或分类标签,聚类结果的可视化可以提供深入的洞见。本文将详细介绍如何在s…...
airtest定位方法
airtest定位方法 最近遇到一个比较新颖的airtest方法,分享给大家。一键三连; airtest是一款用于自动化测试的Python库,被广泛应用于移动应用和游戏的测试中。在进行自动化测试时,定位元素是非常重要的一步,因为只有准…...
排列组合 n*(n-1)*(n-m+1)
n*(n-1)*(n-m1)/m! --# 组合 n*(n-1)*(n-m1)/m! local function get_combinations(n,m) c 1 c0 1 for i 1,m do c c*(n-i1) c c/i end return math.floor(c) end print(get_combinations(10,6)) 打印出来为:210...
Python面试整理-数据处理和分析
在Python中,数据处理和分析是一项非常重要的应用,得益于丰富的第三方库和工具,Python已经成为数据科学家和分析师的首选语言之一。以下是进行数据处理和分析时常用的工具和方法: 1. 数据处理 a. Pandas ● 功能: Pandas 提供了强大的 DataFrame 结构,使得数据操作和预处理…...
职业教育计算机网络综合实验实训室建设应用案例
近年来,职业教育在培养技能型人才方面发挥着越来越重要的作用。然而,传统的计算机网络技术教学模式往往重理论、轻实践,导致学生缺乏实际操作能力和职业竞争力。为了改变这一现状,唯众结合职业教育特点,提出了“教、学…...
【Docomo】5G
我们想向您介绍第五代移动通信系统“5G”。 5G 什么是5G?支持5G的技术什么是 5G SA(独立)?实现高速率、大容量的5G新频段Docomo的“瞬时5G”使用三个宽广的新频段 什么是5G? 5G(第五代移动通信系统&#x…...
Servlet详解(Servlet源码)
Servlet Servlet是运行在Web服务器或应用服务器上的小程序,它作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。Servlet能够接收来自客户端的基于HTTP协议的请求,并且对请求进行响应。 Servlet是用来处理客户端请…...
仓颉--接收控制台输入
package projectNameimport std.console.*main() {Console.stdOut.write("请输入信息1:")var c Console.stdIn.readln() // 输入:你好,请问今天星期几?var r c.getOrThrow()Console.stdOut.writeln("输入的信息1…...
数据库设计效率提高的5大注意事项
数据库设计效率和质量的提高对项目影响深远,能够显著提升数据访问速度,确保数据一致性和完整性,减少应用开发和维护成本,同时提升系统稳定性和用户体验。如果数据库设计不佳会导致项目性能低下,数据访问缓慢࿰…...
C语言笔试题(一)
本专栏通过整理各专业方向的面试资料并咨询业界相关人士,整合不同方向的面试资料,希望能为您的面试道路点亮一盏灯! 1 简单题 C语言中的注释如何写? 答案: 单行注释使用//,多行注释使用/* ... */解析: 注释用于…...
轻松实现远程智能交互:OriginBot与钉钉和GPT4o的集成指南
说明 我之前实现了简单UI来跟OriginBot交互,可以参考这里:古月居 - ROS机器人知识分享社区 但是由于我不是专业的前端开发,写UI还是比较耗时的,所以最近想修改一下这部分。 还有一个原因是,自己开发前端,…...
Qt题目知多少-1
1.简述Qt框架的核心组成部分及其作用。 Qt框架是一个跨平台的应用程序开发框架,其核心组成部分及其作用包括: QtCore模块:这是Qt的基础模块,提供了字符串处理(QString)、容器类(QList, QMap等)、时间日期处理、文件和目录操作、国…...
nginx的反向代理和负载均衡(seventeen day)
一、nginx的反向代理 新建一台虚拟机——static-server(静态服务器/前端服务器) wget https://nginx.org/download/nginx-1.26.1.tar.gz #安装nginx包 ls 安装依赖软件 yum -y install gcc gcc-c yum -y install pcre-devel yum -y install openss…...
BES编译SDK中遇到的perl问题
0 Preface/Foreword 1 问题清单 1.1 perl\r: No such file or directory 编译完成,通过perl,将elf文件转为bin文件,出现错误。 通过查看,项目源文件中,只有一个pl文件: 查看Linux distro使用的WSL版本&am…...
【康复学习--LeetCode每日一题】3111. 覆盖所有点的最少矩形数目
题目: 给你一个二维整数数组 point ,其中 points[i] [xi, yi] 表示二维平面内的一个点。同时给你一个整数 w 。你需要用矩形 覆盖所有 点。 每个矩形的左下角在某个点 (x1, 0) 处,且右上角在某个点 (x2, y2) 处,其中 x1 < x…...
Django实战:开启数字化任务管理的新纪元
🚀 Django实战:开启数字化任务管理的新纪元 🌐 📖 引言 在数字化转型的浪潮中,任务管理的智能化成为提升组织效能的关键。今天,我将带领大家深入了解我们最新开发的OFTS系统——一款创新的组织任务管理软…...
史上最全网络安全面试题+答案
1、什么是SQL注入攻击 前端代码未被解析被代入到数据库导致数据库报错 2、什么是XSS攻击 跨站脚本攻击 在网页中嵌入客户端恶意脚本,常用s语言,也会用其他脚本语言 属于客户端攻击,受害者是用户,网站管理员也属于用户…...
Python 爬虫入门(五):使用 lxml 解析网页
Python 爬虫入门(五):使用 lxml 解析网页 前言1. lxml 简介1.1 什么是 lxml?1.2 为什么选择 lxml?1.3 安装 lxml 2. lxml 基础2.1 解析 HTML/XML2.2 XPath 表达式2.3 使用 XPath 提取数据 3. 深入解析3.1 处理命名空间…...
阿里云RDS到亚马逊云RDS的实时数据同步方案详解
1. 需求背景 在当今的多云环境中,企业经常需要在不同云平台之间同步数据。本文将详细介绍如何实现从阿里云RDS MySQL数据库到亚马逊云RDS MySQL数据库的实时数据同步。这种同步对于数据备份、跨区域数据访问、数据分析等场景都非常有用。 2. 方案概述 我们将使用AWS Kinesis…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
