response对象设置返回状态_request&response:请求和响应详解

  • request请求对象

本文记录我在java的学习之路。一、Request请求对象介绍

  • 介绍
    1.请求:获取资源。
    在BS架构中,就是客户端浏览器向服务器发出的一次请求。

2. 请求对象:
ServletRequest
httpServletRequest

二、Servlet继承结构

d50efffa99fe9551de7c3bc28aae4fc2.png


三、底层执行流程

  1. 服务器创建Servlet对象后、创建request请求和response响应对象;
  2. request对象用于封装HTTP在当次请求中的数据;
    response对象用于封装响应给客户端浏览器的数据;
  3. 服务器会调用Servlet对象的service()方法。将request对象和response对象作为参数传递给service()方法;
  4. 我们再使用请求和响应对象对数据进行操作;
  5. 服务器在进行响应之前会将response对象中的数据编译成HTTP响应的格式,响应给浏览器。

四、请求对象中常用方法

  • 获取路径

0f8bf196e566cd090307bfc61b8fb9e2.png


URI:统一资源标识符;由项目虚拟目录/Servlet映射路径组成,访问内部资源居多;
URL:统一资源定位符;浏览器访问路径;访问项目外部的资源就使用URL;

图示:

2e22a4fc6732f6a7dc3560e7123f0f0b.png
//获取统一资源标识符:虚拟路径/Servlet映射路径        

99d4b195db71ee9241abfa059d66abf5.png
运行结果:
  • 获取请求头

c6decfb8043e3b27eaa24c521ae21525.png
  • 获取请求参数信息

3fe1cdeafc0277ae5473a8260a505280.png

注意:
1. getParameterNames():
注意看返回值,返回的是枚举;
2. getParameterMap():
返回的是一个map集合,通过map集合,获取到键值对,有keyset()和entrySet()两个方法;
通过键找值,返回的是一个字符串数组,可使用Arrays的alist方法去方便打印。

655e25680ce4ff5c03f2b8858f80d87e.png
  • 流对象获取请求信息

aa03bc05a08dda3c514a392ea21997d0.png


注意:用于获取请求体,主要用于post请求方式。

五、获取请求参数并封装成对象

1. 手动封装方式
(1) 先获取数据,getParameter
(2) 拿到数据封装到学生对象
(3) 打印学生对象2. 反射封装方式
基于反射的技术–内省(专门用于操作对象的get和set方法的)
①先拿到所有的请求参数:getparameterMap();
②遍历集合,KeySet拿到所有的key,通过key拿到value数组;
③获取学生对象的属性描述器: PropertyDescriptor( 通过key,拿到的是当前key所对应的get和set方法);
④获取对应的set方法:getWriteMethod();
⑤执行方法:invoke();
注意:属性描述器要传入两个参数,对应的key和学生对象的class对象;3. 工具类封装方式
①第三方的beanutils工具封装参数;

050e5a34251a5dcc3587eb91386ef02a.png


前提: 学生类的属性名必须和标签的name一一对应;

六、请求行和请求头的说明

  • 请求行:请求方式 请求路径(包含请求参数)协议/版本;
  • 请求头:浏览器告知服务器的一些额外信息,格式是键值对;
  • 通常是一个key对应一个value,也有一个key对应多个value的情况。
  • 常见的请求头:
    User-Agent:客户端浏览器的相关信息(浏览器类型,版本等);
    referer:网页来源(从哪跳转过来的)
    cookie:客户端会话技术所需要的请求头。

七、中文乱码问题

请求参数的中文乱码

  • GET方式:没有乱码问题。在Tomcat 8.5版本后已经解决。
  • POST方式:有乱码问题,可以通过setCharacterEncoding()方法解决。

八、请求域

概述: 可以在一次请求范围内进行共享数据(即发起请求到响应结束)。作用: 一般用于请求转发的多个资源中共享数据。常用方法:

6fba7fa6a7e8fa28482de67ab3b04ec1.png


九、请求转发(重点)

  • 请求转发: 客户端的一次请求到达后,发现需要借助其他Servlet来实现功能;整个操作都在一次请求内。
  • 打个比方:你的老板让你改一下ppt,你把ppt发给你的下一级去修改,最后由你的下一级将ppt返回给你的老板。
  • 特点:
    浏览器地址栏不变;
    由于是在一次请求内,所以域对象中的数据不会丢失;
    负责转发的Servlet转发前后的响应正文会丢失;
    由转发的目的地来响应客户端;
  • 方法:

3db977f96a5e0851a1f3458c83c14f4f.png


注意:getRequestDispatcher()方法里面传的是你要转发的页面的路径。
图示:

eb681e638f36fbf385b30fe813ddd972.png

十、请求包含

  • 请求包含: 可以合并其他Servlet中的功能一起响应给客户端。
  • 特点:
    浏览器地址栏不变;
    域对象中的数据不丢失;
    被包含的Servlet响应头会丢失;

c74e0326eb01c88ca8499a11d81b7368.png


注意:请求包含跟请求转发用法一样。

  • 响应对象

一、Response响应对象介绍响应: 回馈结果。
在BS架构中,就是服务器给客户端浏览器反馈结果。响应对象: 就是在项目中用于发送响应的对象。

二、 常见的状态码

f31e4730a2488303ded24f1dfa158f7f.png


三、字节流响应消息

036ecfcd8fa182e9a236df2a2b73d9e4.png


代码演示:

e1ddd31924f6f1efd4a38a09793be8e9.png


四、字符流响应消息

3e100cc9314ebdea28d2143165753b50.png


注意:缓冲字符输出流内部有一个缓冲区,这个缓冲区的默认字符集是ISO-8859-1;
一般把设置编码的代码放在过滤器中
五、设置缓存

  • 缓存: 对于不经常变化的数据,我们可以设置合理缓存时间,以避免浏览器频紧请求服务器。以此来提高效率。

f2878d811cca4298227adc5463f0c4fb.png

六、定时刷新(重点)

  • 定时刷新: 过了指定时间后,页面自动进行跳转。

87653e2088371c79235692d3347bda15.png


图示:

049db788b657dac1c525b33b0bec98be.png


注意:
定时刷新是通过设置响应头的方式来完成的;
同时定时刷新也是请求重定向

七、请求重定向(重点)

  • 概念: 重定向。我们可以选择让别人来为我们处理响应,把请求重定向到一个完全不同的URL,或者可以把请求分派给Web应用的另一个组件(通常是一个JSP)。
    重定向需要用到 :request.sendRedirect(重定向路径) ,注意要使用相对URL。
  • 实现重定向的方式:
    1. 标准方式:(设置请求头和状态码)

227a4cdb3efe73a55bf06e74ffbe5c98.png


2. 简写形式:

dfa7079cf188d10042da1c722d35e007.png

6a7bf2c04e9cc31d8f659be83b44ec48.png

八、转发和重定向的区别
最终实现的功能是相同的。不同之处如下。

  • 地址栏变化转发: 不改变地址栏中的URL;重定向: 改变地址栏;
  • 跳转范围

转发: 只能访问到当前web应用中的内容;重定向: 则可以访问到任意web应用中的内容;

  • request对象作用范围

转发: 在转发后的页面中仍然可以使用原来的request对象;重定向: 原来的request对象则失去作用;所以,如果想要在多个页面使用相同的request对象,那么只能使用转发,而不能使用重定向。
注意:
这一句话意思是,重定向其实是发生了两次请求,而request的请求域作用范围是一次请求内,所以不能实现数据共享。
要想实现数据共享,要么提升作用域,要么只能在当前作用域范围能实现对应的操作。

九、文件下载概述: 即浏览器上显示的文件,你不希望用户直接可以查看到,而已以附件的方式展示给用户,让用户下载;

  • 文件下载的操作步骤:
  1. 创建字节输入流,关联读取的文件。
  2. 设置响应消息头支持的类型。
  3. 设置响应消息头以下载方式打开资源。
  4. 通过响应对象获取字节输出流对象。
  5. 循环读写。
  6. 释放资源。
  • 文件下载记忆方式

两头流:两个响应头

  1. Content-Type: 告知响应体的数据类型(mime类型)
  2. Content-Disposition: 告知浏览器不要渲染响应体,以附件形式处理。

输入流和输出流的对接:

  1. 输入流: 关联文件的输入流
  2. 输出流: 通过响应对象获取的输出流
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值