HTTP&Servlet
Http协议&Servlet
Http协议
- 什么是协议
双方在通讯的时候,遵守的一种规范、规则。
- http 协议
针对网络上的客户端与服务器端在执行http请求的时候,遵守的一种规范。其实就是规定了客户端在访问服务器端的时候,要带上哪些东西,服务器在返回数据的时候,也要带上什么东西
- 版本
- 1.0
请求数据,服务器返回后,将会断开连接 - 1.1
请求数据,服务器返回后,连接还会保持。有一定的时间限制,如果有空着这个连接,那么后面会自己断掉
- 1.0
演示客户端如何与服务器端通讯
- 打开 tomcat 首页
- 在首页上找到 Example
- 选择 Servlets examples - - - > Request Parameters - - - > Excute 超链接
- 用 chrome 开发者工具查看抓包
Http请求数据解释
请求的数据里面包含三个部分的内容:请求行,请求头,请求体
-
请求行
Post: 请求方式,以 post 去提交数据
请求的地址路径,就是要访问哪个地方。
什么版本 -
请求头
Host:主机地址
Connection:保持连接
Content-Length:数据长度
Cache-Control:对缓存的操作
Content-Type:提交的数据类型。form表单
User-Agent:用户代理,向服务器表明,当前来访的客户端信息
Accept:客户端向服务器表示,我能支持什么类型的数据
Referer:真正请求的地址路径,全路径
Accept-Encoding:可以接收的压缩算法
Accept-Language:支持语言格式 -
请求体
即浏览器真正发送给服务器的数据,发送的数据呈现的是 key=value,如果存在多个数据,那么使用 &
Http响应数据解析
请求的数据里面包含三个部分的内容:响应行、请求头、请求体
…这里还有很多数据…
- 响应行
协议版本,状态码(200代表成功,正常处理得到数据)
404: Not Found
500:服务器异常
403:Forbidden - 响应头
Content-Type:服务器返回给客户端的内容类型
Content-Length:返回的数据长度
Data:通讯的日期,响应的时间
Get和Post的区别
- 请求路径不同。post请求,在 url 后面不跟上任何的数据,Get 请求,在地址后面跟上数据
- 带上的数据不同,Post 请求会使用流的方式写数据,Get请求是在地址栏上跟数据
- 由于 post 请求使用流的方式写数据,所以一定需要一个 Content-Length 的头来说明数据长度有多少
- post
1.数据是以流的方式写过去,不会在地址栏上显示。现在一般提交数据到服务器使用的都是 post
2.以流的方式写数据,数据没有大小限制 - get
1.会在地址栏后面拼接数据,所以有安全隐患。一般从服务器获取数据,并且客户端也不用提交上面数据的时候,可以使用 Get
2.能够带的数据有限,1kb大小
Web资源
在 http 协议当中,规定了请求和响应双方,客户端和服务器端。与 web 相关的资源。
有两种分类
- 静态资源
- html
- js/css
- 动态资源
- servlet/jsp
Servlet
其实就是一个 java 程序,运行在我们的 web 服务器上,用于接收和响应客户端的 http 请求。(tomcat其实就是 servlet的一个容器)
更多的是配合动态资源来做。当然静态资源也需要用到 servlet,只不过是 tomcat 里面已经定义好了一个 DefaultServlet
HelloServlet
- 得到一个 web 工程,要有一个服务器。
- 测试运行 web 工程
- 新建一个类,实现 Servlet接口
- 配置 Servlet,在WEB-INF- - - web.xml写上以下内容,用意:告诉服务器我们的应用有这么些个 servlet
<!-- 向tomcat报告,我这个应用里面有这个servlet,名字叫做HelloServlet,具体路径是XXX -->
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>servlet.HelloServlet</servlet-class>
</servlet>
<!-- 注册servlet的映射,servlet-name:找到上面注册的具体servlet,url:在地址栏上的path路径,path要以/打头 -->
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/a</url-pattern>
</servlet-mapping>
执行过程
- 找到 tomcat 应用
- 找到项目
- 找 web.xml,然后在里面找到 url-pattern,有没有哪一个 pattern 的内容是 /a
- 找到 servlet-mapping 中的那个 servlet-name [HelloServlet]
- 找到上面定义的 servlet 元素中的 servlet-name 中的 [HelloServlet]
- 找到下面定义的 servlet-class 然后开始创建该类的实例
- 继而执行该 servlet 中的 service 方法
Servlet 的通用写法
Servlet(接口)
|
GenericServlet
|
HttpServlet(用于处理 http 的请求)
- 定义一个类,继承 HttpServlet 复写 doGet 和 doPost