继上次了解了Servlet入门开发之后,那么服务端是如何具体地获得客户端发来的请求数据的,又是如何去响应的,接下来紧接着来介绍一下。

一.HTTP协议

在这之前,首先,我们来了解一下什么是http协议,http协议(HyperText Transfer Protocal)互联网上应用最为广泛的一种网络协议,是浏览器和后台进行信息交互时要遵循的规则。
所谓的请求和响应,本质上就是数据之间的传递,这些数据传递必须遵从统一的约定,只有这样客户端和服务器之间才能够相互识别传递的数据,进而解析这些数据。

Http协议是基于请求/响应模型的协议,请求和响应必须成对,先有请求后有响应。
Http协议的结构包括两部分:请求报文,响应报文。

请求报文:浏览器给服务器发送的请求数据的格式。请求报文主要包括:请求行、请求头、请求体。
通过抓包方法可以发现,这里以get请求和post请求为例:get请求提交数据是在url后面拼接参数,而post请求提交数据是在请求体中的。
请求行:位于请求报文的第一行,由请求方式、url、协议/版本 组成。
请求头:位于请求行下面,以键值对的形式。
请求体:get请求是没有请求体的,post请求体中传递请求参数。

响应报文:服务器给客户端响应的数据的格式。响应报文主要包括:响应行、响应头、响应体。
响应行:协议/版本、状态码、状态码描述组成。
响应头:键值对形式,是通知浏览器的行为。
响应体:服务器发送给浏览器的数据,浏览器想要什么,服务器就给什么。

二.Request

了解完HTTP协议之后,对于数据传递的规范有了一定的了解后,接下来具体来看看它们之间是如何操作的。
在客户端将数据按照http协议中的请求报文格式传递到服务器端后,那么服务器是如何获取这些数据的?
HttpServlet中提供了HttpServletRequest对象来处理请求数据。
首先,HttpServletRequest对象是由tomcat创建的,它代表客户端的请求,请求中的所有信息都封装在这个对象里,通过这个对象的方法,可以获取请求的数据。
1.获取请求行信息
String getMethod():获取请求方式的类型。
StringBuffer getRequestURL(): 获取客户端发出请求完整的URL。
String getRemoteAddr():获取IP地址。
String getProtocol():获取当前协议的名称和版本。
request&response
request&response
2.获取请求头信息
请求头的信息是比较多的,是以关键字:值的形式的数据组成的。
String getHeader(String name):根据请求头的key关键字获取请求头信息。
常见的请求头key:
cookie:与会话有关技术,用于存放浏览器缓存的cookie信息。
host:请求的服务器主机名。
content-length:请求体的长度。
accept:浏览器可支持的MIME类型,文件类型的一种描述语言。
等等等………
3.获取请求体
请求体中包含了浏览器发送的请求参数,因此请求体的获取是比较重要的。
String getParameter(String name):getParameter获得指定参数名对应的值。
String[] getParameterValues(name):getParameterValues[]获取请求数据key的多个数据。

request&response
request&response
request&response
request&response

三.Response

同样的,servlet容器创建了HttpServletResponse对象用来响应给客户端。
这个对象的作用:
向客户端发送数据,即响应体内容。
设置响应行状态码。
设置响应头信息。
1.设置响应头
setHeader(String name,String value):设置响应头信息
常见的响应头:
location:指定响应的路径,需要和状态码302配合使用,可以完成跳转。
content-Type:设置响应正文的类型(MIME类型)。
set-cookie:向浏览器写入cookie。
refresh:页面的刷新,例:3;url=www.baidu.com //三秒后刷新到百度。
等等等……
2.设置响应行状态码
setStatus(int sc):向浏览器发送状态码
常用的状态码:
200:响应成功
404:资源路径错误或资源被删除
500:服务器内部错误
302:重定向
3.向客户端发送数据
java.io.PrintWriter getWriter():用于向浏览器输出字符数据。
request&response
request&response

PS:
服务器:tomcat 8
开发环境:IDEA 2017.5.2

相关文章: