网站首页 > 技术文章 正文
今天是刘小爱自学Java的第90天。
感谢你的观看,谢谢你。
话不多说,开始今天的学习:
昨天学习了request,做一个简单的回顾:
request是浏览器向服务器发起请求,会传递一些信息。
那么现在问题来了,我向你发起了请求,你是不是应该给我一个回应?
这就需要使用到response响应了。
response和request有一定的类似之处,今天就来仔细学一学这个response。
一、响应response
1响应流程
①浏览器向服务器发起请求
浏览器通过映射路径向服务器发起请求,昨天已详细讲解,不再赘述。
②服务器响应浏览器
既然是响应,肯定是通过response对象调用方法响应,其API为:
getWriter().print("hello")。
就是一个输出语句,这样在服务器中就将信息响应给浏览器了。
我这里使用的是一个字符串,也可是使用某个对应路径的文件,比如图片。
2响应报文
在请求中有请求行、请求头、请求体;在响应中也会有响应行、响应头、响应体。
同样的操作,使用抓包工具查看响应数据:
①响应行
昨天学请求报文的时候,我一直以为General中的都是请求头。
事实上这是由请求行和响应行共同组成,其中它们还有重复的部分。
- 请求行包括:请求方式 ,url 和协议/版本
- 响应行包括:状态码,协议/版本。
②响应头
同样也是以键值对的形式传递一些信息。
③响应体
在Response选项卡中可以看到响应体,也就是输出的内容。
3响应行中的状态码
关于状态码是非常多的,状态码由三个数字组成,根据开头第一个数字有不同的功能。
根据第2、3个数字又有进一步垂直细分。
因为状态码太多了,很难将其每一个都记下来,了解常用的几个即可。
- 200:请求成功,上述例子中的也就是200
- 301:资源永久被转移到其他URL了
- 302:请求的资源临时从不同的URI响应请求。
- 404:资源不存在,这也是非常常见的状态码了。
- 500:服务器内部错误,通常也就是代码哪里写错了。
二、响应API
和请求API一样,响应API是通过Java中HttpServletResponse这个类对应的对象操作。
1响应行
setStatus(200)方法,参数即为状态码,可以向服务器发送对应的额状态码。
虽然说响应行中也有协议/版本,但是这些服务器是不能设定的,这也很好理解,都是由统一制定的规则。
2响应头
setHeader(参数a,参数b)方法,一共有两个参数,可以实现对应的功能,逐一讲解:
①关于页面定时刷新:
- 参数a:refresh,刷新的意思。
- 参数b:由时间和url组成,两者之间使用分号隔开。
- 比如“2;url”即表示2秒后页面刷新到对应的url。
我做了一个测试,发现如果时间不写,只写一个url,刷新页面时竟然不会跳转。
也不知道我是不是忽视了什么,暂且就以这个测试作为一个结果好了。
②内容类型为简单文本:
- 参数a:content-type,也就是内容类型。
- 参数b:text/plain;charset=utf-8,两者之间也是使用分号隔开,前者为文本内容,后者为编码。
因为该方式时常被使用,所以其有一个简化版的方法:
setContentType(text/plain;charset=utf-8)
说白了也就是将setHeader()方法中的参数a变成方法名里的一部分了,也好理解记忆。
③内容类型为HTML:
②中参数为text/plain,plain,简单的朴素的意思,也就是其输出的内容是没有经过渲染的,输出什么就是什么。
而③中是text/html,html是超文本标记语言,在浏览器中会经过渲染成对应的格式。
输出的虽然是h1标签,但是在浏览器中会被渲染成一个标题格式的字体。
3响应体
也就是最先开始说的API:getWriter().print()
三、重定向
昨天学习了request中的转发,在response中有个和其非常类似的功能,叫重定向。
重定向,重新定了一个方向。浏览器访问服务器是有多次的。
①第一次访问服务器
根据浏览器的访问路径,服务器通过响应头实现重定向:
setHeader("location","/responseServletTwo")
前面参数为location,后面参数为对应的路径。
这个的意思就是服务器响应浏览器,告诉它:你去找我给你设定的这个路径。
事实上,这时就已经完成一次请求一次响应了。
其还有一种简写方法:
response.sendRedirect("/responseServletTwo")
Redirect,翻译就是重定向的意思。
②第二次访问服务器
浏览器根据服务器重定向的路径再次访问,这样就找到了ResponseServletTwo。
该servlet再次响应浏览器,从而输出内容。
以上就是对于重定向的说明,其作用和request中的转发非常的相似。
但转发与重定向也有一定的区别,画图分析:
转发本质上只有一次请求一次响应,是服务器内部的转发行为。
无论多少次转发就一次请求和一次响应,浏览器上的路径不变。
重定向是多次请求多次响应,浏览器上的路径发生了改变。
用现实生活中的一个例子来理解:
- 我去吃饭的时候,发现碗里有不喜欢的菜。
- 我将菜直接给我妈妈了,这就叫转发。
- 我将菜重新放回菜碗里了,并对我妈说您吃,妈妈从菜碗里夹过去吃了,这就叫重定向。
- 菜碗就相当于浏览器,我和我妈都是服务器中的servlet之一。
当然,这个例子不太准确,毕竟浏览器是主动方,是由它发起请求的,菜碗是被动的。
这是暂且使用这个例子来加深自己对其的理解。
最后
谢谢你的观看。
如果可以的话,麻烦帮忙点个赞,谢谢你。
猜你喜欢
- 2024-10-10 SpringBoot整合Grpc实现跨语言RPC通讯
- 2024-10-10 RequestMapping属性详解 - SpringMVC高手进阶
- 2024-10-10 《Servlet》第22节:获取ServletContext上下文对象的四种方式
- 2024-10-10 阿里Java二面:说说Spring MVC执行流程及原理?这样聊能吊打面试官
- 2024-10-10 Springboot——用更优雅的方式发HTTP请求(RestTemplate详解)
- 2024-10-10 JavaServlet生命周期、HttpServletRequest和HttpServletResponse
- 2024-10-10 关于RESTful一些注意事项和自己整理的接口开发规范
- 2024-10-10 java版gRPC实战之二:服务发布和调用
- 2024-10-10 Servlet 点击计数器 点击计数在线
- 2024-10-10 Java开发架构篇:初识领域驱动设计DDD落地
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)