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

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请求的区别:

  1. GET请求请求参数在请求行中,没有请求体。POST请求请求参数在请求体中
  2. 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大注意事项

数据库设计效率和质量的提高对项目影响深远,能够显著提升数据访问速度,确保数据一致性和完整性,减少应用开发和维护成本,同时提升系统稳定性和用户体验。如果数据库设计不佳会导致项目性能低下,数据访问缓慢&#xff0…...

C语言笔试题(一)

本专栏通过整理各专业方向的面试资料并咨询业界相关人士,整合不同方向的面试资料,希望能为您的面试道路点亮一盏灯! 1 简单题 C语言中的注释如何写? 答案: 单行注释使用//,多行注释使用/* ... */解析: 注释用于…...

轻松实现远程智能交互:OriginBot与钉钉和GPT4o的集成指南

说明 我之前实现了简单UI来跟OriginBot交互,可以参考这里:古月居 - ROS机器人知识分享社区 但是由于我不是专业的前端开发,写UI还是比较耗时的,所以最近想修改一下这部分。 还有一个原因是,自己开发前端&#xff0c…...

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. 覆盖所有点的最少矩形数目

题目&#xff1a; 给你一个二维整数数组 point &#xff0c;其中 points[i] [xi, yi] 表示二维平面内的一个点。同时给你一个整数 w 。你需要用矩形 覆盖所有 点。 每个矩形的左下角在某个点 (x1, 0) 处&#xff0c;且右上角在某个点 (x2, y2) 处&#xff0c;其中 x1 < x…...

Django实战:开启数字化任务管理的新纪元

&#x1f680; Django实战&#xff1a;开启数字化任务管理的新纪元 &#x1f310; &#x1f4d6; 引言 在数字化转型的浪潮中&#xff0c;任务管理的智能化成为提升组织效能的关键。今天&#xff0c;我将带领大家深入了解我们最新开发的OFTS系统——一款创新的组织任务管理软…...

史上最全网络安全面试题+答案

1、什么是SQL注入攻击 前端代码未被解析被代入到数据库导致数据库报错 2、什么是XSS攻击 跨站脚本攻击 在网页中嵌入客户端恶意脚本&#xff0c;常用s语言&#xff0c;也会用其他脚本语言 属于客户端攻击&#xff0c;受害者是用户&#xff0c;网站管理员也属于用户&#xf…...

Python 爬虫入门(五):使用 lxml 解析网页

Python 爬虫入门&#xff08;五&#xff09;&#xff1a;使用 lxml 解析网页 前言1. lxml 简介1.1 什么是 lxml&#xff1f;1.2 为什么选择 lxml&#xff1f;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…...

《LeetCode热题100》---<滑动窗口篇两道>

本篇博客讲解LeetCode热题100道滑动窗口篇中的两道题 第一道&#xff1a;无重复字符的最长子串 第二道&#xff1a;找到字符当中的所有字母异位词 第一道&#xff1a;无重复字符的最长子串 哈希滑动窗口 class Solution {public int lengthOfLongestSubstring(String s0) {int…...

Python学习计划——9.1多线程编程

并发编程是一种在同一时间段内运行多个任务的方法&#xff0c;可以提高程序的效率和性能。Python中的多线程编程可以使用threading模块实现。以下是多线程编程的详细讲解和可运行的Python案例。 1. 什么是多线程 多线程是一种并发编程的方式&#xff0c;它允许在同一个进程中…...

借助 NGINX 对本地的 Kubernetes 服务进行自动化的 TCP 负载均衡

原文作者&#xff1a;Chris Akker - F5 技术解决方案架构师&#xff0c;Steve Wagner - F5 NGINX 解决方案架构师 原文链接&#xff1a;借助 NGINX 对本地的 Kubernetes 服务进行自动化的 TCP 负载均衡 转载来源&#xff1a;NGINX 中文官网 NGINX 唯一中文官方社区 &#xff0c…...

基于python的大学学生影响力分析系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…...

upload-labs靶场(1-19关)

upload-labs靶场 简介 upload-labs是一个使用php语言编写的&#xff0c;专门收集渗透测试过程中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共19关&#xff0c;每一关都包含着不同上传方式。 注意&#xff1a;能运行<?php phpinfo();?&…...

Python面向对象浅析

目录 面向对象基本概念 一、类和对象 类和对象是面向对象骗程的两个核心概念。 在程序开发中&#xff0c;要设计一个类&#xff0c;通常需要满足一下三个要素: self详解&#xff1a; 对象&#xff08;Object&#xff09; 魔法方法&#xff1a; 类里的一些特殊方法 __in…...

JS基本语法

JS代码写在body结束标签的上面 如点击按钮调用方法&#xff1a; 在浏览器的控制台打印测试数据 console.log() <body><button type"button" onclick"easymethod()">点击我</button><script>//JS代码&#xff0c;写在body标签的…...

LSTM详解总结

LSTM&#xff08;Long Short-Term Memory&#xff09;是一种用于处理和预测时间序列数据的递归神经网络&#xff08;RNN&#xff09;的改进版本。其设计初衷是为了解决普通RNN在长序列训练中出现的梯度消失和梯度爆炸问题。以下是对LSTM的详细解释&#xff0c;包括原理、公式、…...

制品库nexus

详见&#xff1a;Sonatype Nexus Repository搭建与使用&#xff08;详细教程3.70.1&#xff09;-CSDN博客 注意事项&#xff1a; 1.java8环境使用nexus-3.69.0-02-java8-unix.tar.gz包 2.java11环境使用nexus-3.70.1-02-java11-unix.tar.gz包 3.注意使用制品库/etc/yum.repos.…...

2022.11.17 阿里钉钉数据开发岗位一面

今天晚上和阿里钉钉面试官聊了一面&#xff0c;整个过程持续45分钟&#xff0c;还是相当持久的。前面先让我自我介绍&#xff0c;包括自身背景、工作经历和项目经验&#xff0c;在介绍的时候面试官几次打断&#xff0c;让我停下来&#xff0c;然后他提问&#xff0c;我很纳闷还…...