Servlet请求响应


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("地址") 方法;

猜你喜欢

转载自blog.csdn.net/qq_54525448/article/details/129337561