Servlet请求响应

news2025/1/15 20:08:50

文章目录

  • Servlet请求响应进阶
    • 内容回顾
      • Servlet 体系结构
      • get/post 请求
      • Servlet 的生命周期
      • web.xml 配置文件
  • HttpServletRequest 接口
      • 文件上传
      • HttpServletResponse 接口
      • 文件下载
      • 响应表格的案例
  • 转发与重定向
    • 简介
    • 请求转发原理
    • 请求转发案例
    • 重定向原理
    • 重定义与请求转发的区别


Servlet请求响应进阶

内容回顾

Servlet 体系结构

Servlet --> GenericServlet --> HttpServlet 如果需要将自定义类变成一个 servlet,最简单的方式是继承 HttpServlet; HttpServlet实现了接口和抽象类中所有的抽象方法,在使用时不用再去重写所有的抽象方 法,只需要重写需要的方法即可;

get/post 请求

	
页面进行数据提交(发送请求)的方式;
servlet 中对应处理请求的方法:
get --- doGet
post -- doPost
或者用 service 进行通用处理,service 方法可以获取真正的请求方式,并且调用对应
doXX 方法来进行请求的处理;
get 请求和 post 请求的区别:
① 参数传递方式不同
② 传递数据的大小不同
③ 信息缓存不同
④ 编码方式以及中文乱码解决方案

Servlet 的生命周期

① 初始化 -- init()
初始化 servlet 容器,将我们需要的一些对象创建好并且交给容器来管理;初始化的
过程只执行一次,可以在服务器启动时初始化,也可以是在第一次访问 servlet 时初始化;
默认在第一次访问时初始化;如果想要在启动时就初始化,需要 web.xml 配置文件中的
servlet 标签中添加一个配置 <load_on_startup>大于等于0的整数
</load_on_startup>
例如:请求对象、响应对象
② 提供服务 -- service -- doXX
对页面发送请求的处理,先通过 service 方法请求的请求方式判断,根据判断结果调
用对应的 doXX 方法,进行请求的处理;服务可以多次被使用;
③ 销毁 -- destroy
服务关闭,停止服务,被销毁;

web.xml 配置文件

<servlet>
<servlet-name></servlet-name>
<servlet-class></servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name></servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
url-pattern 用于页面请求的拦截,然后通过 servlet-name 标签进行 servlet 类的
匹配,意味着将拦截的请求交给对应的 servlet 类来处理	

HttpServletRequest 接口

① 请求行
有关于协议名、服务器名、端口号等信息描述
② 请求头
关于浏览器的一些信息描述
getHeader("请求头关键字");
getHeaderNames();
③ 请求体
请求数据
String -- getParamter("参数名")
String[] -- getParamterValue("参数名")

文件上传

① 需要给进行文件上传的表单添加属性 enctype = "multipart/form-data"
并且的请求的方式必须是 post
② 需要给处理请求的 servlet 类添加注解 @MultipartConfig
文件上传的原理:
页面通过 input 文件上传框进行文件的选择;然后在后台通过 request 对象的
getPart() 方法进行文件的获取;获取完为了保证文件的格式不会发生变化,所以需要从请
求头中获取文件的名称,然后在将文件名和指定的路径进行拼接写入到指定的目录中即可;

HttpServletResponse 接口

简介

HttpServletResponse 接口是 ServletResponse 接口的子接口,位于
javax.servlet.http 包下; 该接口用来表示响应对象;在初始化 servlet 容器时被
创建,并且交个容器进行管理,给 service 方法用来进行响应服务;
HttpServletResponse 主要作用:针对页面发送的请求作为对应的响应,向页面输出文
本、图片、视频、音频等。
响应结果包含三部分:响应行、响应头、响应体

响应行

主要包含有关协议、状态码的具体信息;

在这里插入图片描述

http 协议

HttpServletResponse 接口是 ServletResponse 接口的子接口,位于
javax.servlet.http 包下; 该接口用来表示响应对象;在初始化 servlet 容器时被
创建,并且交个容器进行管理,给 service 方法用来进行响应服务;
HttpServletResponse 主要作用:针对页面发送的请求作为对应的响应,向页面输出文
本、图片、视频、音频等。
响应结果包含三部分:响应行、响应头、响应体
主要包含有关协议、状态码的具体信息;
http 协议是一种网路访问规则,类似于玩游戏的规则,想要进行网络之间访问或者数据传输
必须按照 http 指定的规则进行;
三次握手建立服务器与客户端的连接:
第一次握手:客户端向服务器发送一个请求信息,服务器收到信息知道自己与客户端是可以进
行连接的;
第二次握手:此时的客户端并不知道服务端是否已经接收到了它的请求信息,所以服务端需要
给客户端做出响应,客户端在接收到反馈后,才能确定自己与服务端连接上了;
第三次握手:客户端也服务端确定建立连接,进行数据传输

状态码

状态码是根据当前请求是否成功返回的一个信息,不同的状态码表示不同的情况;
1xx -- 服务器收到请求,需要请求者继续操作
2xx -- 请求成功,客户端的请求被成功接受并处理
3xx -- 重定向,需要进一步操作完成请求
4xx -- 客户端错误,请求包含的路径或者语法有问题
5xx -- 服务端错误,服务器在处理请求过程中出现了错误
常见的状态码有:
200 -- 表示响应成功
404 -- 表示请求资源不存在
500 -- 服务器代码出现问题,可以通过控制查看异常信息	

响应头
在这里插入图片描述

每一次请求的发送如果成功,都会有对应数据响应,这些响应都可以被捕捉到;
重要的响应头信息:
① Content-Type:设置响应内容的类型,常见的值有:
text/html;charset=utf-8
image/jpg
② Content-Length:响应长度,通常使用的是 utf-8 编码格式,一个汉字等于3个字节
③ Date:响应时间
④ Content-Disposition:支持文件下载或者打开方式(一般在文件支持下载功能时使
用)	

响应头信息设置

响应头信息设置具有两种方式:
response.setHeader("Content-Type","image/png");
response.addHeader("Content-Type","image/png");
两者的区别:
setHeader -- 一个关键字,对应一个值,如果重复进行设置,值会覆盖
addHeader -- 一个关键字可以对应多个值

图片响应案例

① 准备一张图片,存放到指定路径下
② 使用 IO 流进行图片的读取
③ 使用响应对象,设置响应有信息,将内存中读取的图片数据响应给页面;

jsp 页面

在这里插入图片描述

web.xml

在这里插入图片描述

servlet 类

在这里插入图片描述

文件下载

jsp 页面

在这里插入图片描述

web.xml

在这里插入图片描述

servlet 类

在这里插入图片描述

运行结果

在这里插入图片描述

响应体

	响应给页面的数据,通过响应对象进行数的返回;数据的格式可以文本、html等格式的数据;
响应对象 HttpServletResponse 可以获取不同的响应输出对象,如果是文本的操作可以
通过字符输出流实现,其他类型的操作可以使用字节数输出流;
① PrintWriter writer = response.getWriter();
② ServletOutputStream sos = response.getOutPutStream();

响应表格的案例

jsp 页面

在这里插入图片描述

web.xml

在这里插入图片描述

servlet 类

在这里插入图片描述

运行结果

在这里插入图片描述

转发与重定向

简介

转发与重定向是实现页面跳转的2种不同方式;这两种方式分别对应 request 对象和 response 对象; 请求转发:request.getRequestDipachter(“页面/请求”).forward(req,resp); 重定向: response.sendRedirect(“url”);

请求转发原理

转发是服务器的行为,对于客户端来说并不知道服务器到底经历此次处理后才返回的数据,因
为客户端的请求地址时不会发生变化的,如果转发是一次范围内,请求域中参数时可以共享
的;

在这里插入图片描述

请求转发案例

jsp 页面

在这里插入图片描述
web.xml
在这里插入图片描述

servlet 类
在这里插入图片描述
在这里插入图片描述

客户端浏览器
在这里插入图片描述

转发时数据传递

转发时可以使用 request 对象进行数据的传递,通过 request 的 setAttribute 方法
进行参数的设置,在转发后 servlet 或者 jsp 页面可以使用 request 对象的
getAttribute 方法进行参数的获取;
数据的传递只能在一次转发内生效,如果是多次转发数据无法传递;
例如:在 servletA 中将请求转发给 ServletB,并且在转发之前使用 setAttribute
方法进行参数的设置;那么在 ServletB 中可以使用 getAttribute 方法进行参数的获
取,如果 ServletB 也进行的请求的转发,将请求转发给 servletC ,那么在
servletC 当中无法获取 servletA 当中设置的参数值;

servlet 类
在这里插入图片描述

jsp 页面
在这里插入图片描述

重定向原理

重定向是客户端的行为,当客户端浏览器向服务器发送一个请求,经过处理后向客户端做出响
应,该响应是向服务器再次发送一个新的请求、去请求新的 servlet ;新的请求会在浏览器
的地址做出响应,改变请求的地址,由于是多次请求,请求对象中携带的数据会自动销毁;

在这里插入图片描述

jsp 页面
在这里插入图片描述

web.xml
在这里插入图片描述

servlet
在这里插入图片描述
在这里插入图片描述

浏览器 url 变化过程
在这里插入图片描述

重定义与请求转发的区别

① 发生的位置不同,重定向是浏览器行为,请求转发时服务器行为
② 请求转发浏览器的地址栏不会发生变化,不管服务器转发多少次;重定向浏览器地址栏会发
生变化,最终显示为最后一次重定向的地址;
③ 转发是一次请求,重定向是多次请求
④ 转发时 request 对象能够在一次转发内进行数据的传递,重定向不允许进行数据的传递
⑤ 转发必须是当前 web 应用内的页面或者 servlet,重定向可以是任意地址;
⑥ 转发和重定向的方式不同;转发使用 request 对象的 getRequestispatcher("请求
地址").forward(request,response);
重定向使用 response 对象 sendRedirect("地址") 方法;

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

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

相关文章

分巧克力(二分)

儿童节那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有 N 块巧克力&#xff0c;其中第 i 块是 HiWi 的方格组成的长方形。为了公平起见&#xff0c;小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。切出的巧克力需要满足&#xff1a;形…

百度“松果“ OJ赛第一周 题解

百度"松果" OJ赛第一周 题解 第一周的周赛基本考察的都是模拟和递推递归问题&#xff0c;虽然不涉及很难的算法&#xff0c;但是还是比较考察代码能力和思维能力的。 1.数据流的中位数 题意&#xff1a;要求你做一个系统可以进行两个操作&#xff0c;第一个操作是…

cloud flare 真不错(常规思路)

2022-10-20 前言 接到一个测试目标&#xff0c;开局cloudflare&#xff0c;最后运气不错还是拿下了。因授权测试等原因&#xff0c;文章仅展示思路历程。 过程 信息搜集 给的目标是test.com&#xff0c;前期经过一些基本的信息搜集&#xff0c;发现了一个求职子域employee…

FreeRTOS入门

目录 一、简介 二、堆的概念 三、栈的概念 四、从官方源码中精简出第一个FreeRTOS程序 五、修改官方源码增加串口打印 一、简介 FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统&#xff0c;功能包括&#xff1a;任务管理、时间管理、信号量、消息队列、…

嵌入式开发:McObject eXtremeDB嵌入式数据库系统

嵌入式数据库已经成为数据库技术的一种流行应用&#xff0c;尤其是对于企业中的物联网应用。有很多理由将数据库嵌入到应用程序的端点中&#xff0c;而不仅仅是将数据推送到设备中。嵌入式开发人员在选择嵌入式数据库时&#xff0c;真正重要且与众不同的解决方案是写入速度、大…

【边缘端环境配置】英伟达Jetson系列安装pytorch/tensorflow/ml/tensorrt环境(docker一键拉取)

【边缘端环境配置】英伟达Jetson系列安装pytorch/tensorflow/ml/tensorrt环境&#xff08;docker一键拉取&#xff09;0.JetPack1.安装输入法2.安装docker和nvidia-docker3.拉取l4t-pytorch镜像4.拉取l4t-tensorflow镜像5.拉取l4t-ml镜像6.拉取tensorrt镜像7.镜像换源8.其他&am…

三数之和(双指针 or hash表)

给你一个整数数组nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]]满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 3 < …

ubuntu22.04 Desktop 服务器安装

操作系统 使用的是Uubntu22.04 Desktop的版本&#xff0c;系统安装后&#xff0c;默认开启了53端口和631端口 关闭udp 5353、53791端口&#xff08;avahi-daemon服务&#xff09; sudo systemctl stop avahi-daemon.socket avahi-daemon.service sudo systemctl disable ava…

[1.2]计算机系统概述——操作系统的发展与分类

文章目录第一章 计算机系统概述操作系统的发展与分类&#xff08;一&#xff09;手工操作阶段&#xff08;二&#xff09;批处理阶段——单道批处理系统&#xff08;三&#xff09;批处理阶段——多道批处理系统&#xff08;四&#xff09;分时操作系统&#xff08;五&#xff…

【Java开发】JUC进阶 01:Lock锁详解

1 Lock锁介绍已经在【JUC基础】04简单介绍过了&#xff0c;本文做进一步的拓展&#xff0c;比如公平锁和非公平锁、&#x1f4cc; 明白锁的核心四个对象&#xff1a;线程&#xff0c;共享资源&#xff0c;锁&#xff0c;锁操作包括线程如何操作资源&#xff0c;使用锁锁哪个资源…

xgboost: 分割查找算法:贪婪算法、分桶算法

1、Basic Exact Greedy Algorithm 树学习的关键问题之一是找到最好的分割&#xff0c;如Eq(7)所示。 贪婪算法:分割查找算法枚举所有特征上的所有可能的分割。精确的贪婪算法如Alg. 1所示。为了高效地完成这一任务&#xff0c;算法必须首先根据特征值对数据进行排序&#xff…

SpringMVC 参数绑定(视图传参到控制器)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Vue组件基础(父向子、子向父、子向子传值)

Vue组件基础-父向子、子向父、子向子传值一、Vue组件概念,创建和使用1.1 组件概念1.2 组件基础使用1.3 组件-scoped作用二、Vue组件通信2.1 父向子传值(props)2.2 子向父传值($emit)2.3 子与子传值(EventBus)一、Vue组件概念,创建和使用 1.1 组件概念 组件是可复用的Vue实例,封…

【100个 Unity实用技能】 | 脚本无需挂载到游戏对象上也可执行的方法

Unity 小科普 老规矩&#xff0c;先介绍一下 Unity 的科普小知识&#xff1a; Unity是 实时3D互动内容创作和运营平台 。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者&#xff0c;借助 Unity 将创意变成现实。Unity 平台提供一整套完善的软件解决方案&#xff…

springboot使用ssh公钥连接mysql(含账号密码连接)

引言 在项目开发过程中&#xff0c;遇到了连接数据库时需要使用ssh公钥的情况。在本地使用navicat可以直接通过可视化界面去进行ssh的连接&#xff0c;但是在java中无法直接去进行连接。 后来经过查询资料&#xff0c;发现必须要在java中编写相关配置文件后才可以正常连接。 …

Linux内核源码进程原理分析

Linux内核源码进程原理分析一、Linux 内核架构图二、进程基础知识三、Linux 进程四要素四、task_struct 数据结构主要成员五、创建新进程分析六、剖析进程状态迁移七、写时复制技术一、Linux 内核架构图 二、进程基础知识 Linux 内核把进程称为任务(task)&#xff0c;进程的虚…

Linux下MQTT客户端消息订阅与发布实现

MQTT(消息队列遥测传输)是一个基于客户端-服务器的消息发布/订阅传输协议。它基于TCP协议&#xff0c;默认端口号为1883&#xff0c;为此&#xff0c;它也需要一个消息中间件 。MQTT协议是轻量、简单、开放和易于实现的&#xff0c;这些特点使它适用范围非常广泛。在很多情况下…

蓝桥杯三月刷题 第一天

文章目录&#x1f4a5;前言&#x1f609;解题报告&#x1f4a5;数列求值&#x1f914;一、思路:&#x1f60e;二、代码&#xff1a;&#x1f4a5;质数&#x1f914;一、思路:&#x1f60e;二、代码&#xff1a;&#x1f4a5;饮料换购&#x1f914;一、思路:&#x1f60e;二、代…

23.3.4打卡 AtCoder Beginner Contest 291(Sponsored by TOYOTA SYSTEMS)A~E

F题题面都看不懂嘞!开摆! 没找到合适的markdown, 截图网页翻译了我真是天才 比赛链接: https://atcoder.jp/contests/abc291 A题 题意 给出一个字符串, 找到第一个大写字母的下标 简单题就不多说了, 直接放代码 代码 void solve() {cin>>str;nstr.size();str"…

CentOS7操作系统安装nginx实战(多种方法,超详细)

文章目录前言一. 实验环境二. 使用yum安装nginx2.1 添加yum源2.1.1 使用官网提供的源地址&#xff08;方法一&#xff09;2.1.2 使用epel的方式进行安装&#xff08;方法二&#xff09;2.2 开始安装nginx2.3 启动并进行测试2.4 其他的一些用法&#xff1a;三. 编译方式安装ngin…