1. http1.1
持久连接和流水线连接允许
Web
浏览器通过单个持久连接发送多个请求;(短链接)
在此期间,出现了
HTTPS
(安全超文本传输协议)。它是使用
SSL/TLS
进行安全加密通信的
HTTP
的安全版本。
底程是TCP:TCP 是
面向连接的、可靠的、基于字节流的传输层
通信协议。
请求和响应报文
客户端与服务端通过报文联系
报文的格式:主体上分为报文首部和报文主体,中间空行隔开,报文部首可以继续细分为 "行" 和 "头":
请求报文
请求首行(请求行); GET/POST 资源路径?参数 HTTP/1.1(请求行:请求方式、资源路径、协议及版本。)
请求头信息(请求头) ;
-主机虚拟地址
Host: localhost:8080
-长连接
Connection: keep-alive
-请求协议的自动升级[http的请求,服务器却是https的,浏览器自动会将请求协议升级为https的]
Upgrade-Insecure-Requests: 1
- 用户系统信息
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36
- 浏览器支持的文件类型
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*
;q=0.8
- 当前页面的上一个页面的路径[当前页面通过哪个页面跳转过来的]: 可以通过此路径跳转回上一个页面,广
告计费,防止盗链
Referer: http://localhost:8080/05_web_tomcat/login.html
- 浏览器支持的压缩格式
Accept-Encoding: gzip, deflate, br
- 浏览器支持的语言
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
空行;
请求体:
使用
form
表单发送
POST
请求,请求体中才有数据
响应报文
响应首行(
响应行
);协议
/
版本状态码状态码描述(HTTP/1.1 200)
响应头信息(
响应头
);
Server: Apache-Coyote/1.1 服务器的版本信息
Accept-Ranges: bytes
ETag: W/"157-1534126125811"
Last-Modified: Mon, 13 Aug 2018 02:08:45 GMT
Content-Type: text/html 响应体数据的类型[浏览器根据类型解析响应体数据]Content-Length: 157 响应体内容的字节数
Date: Mon, 13 Aug 2018 02:47:57 GMT 响应的时间,这可能会有8小时的时区差
空行;
响应体:
需要浏览器解析使用的内容
[
如果响应的是
html
页面,最终响应体内容会被浏览器显示到页面中
响应状态码
200
:
请求成功,浏览器会把响应体内容(通常是
html
)显示在浏览器中;
302
:
重定向,当响应码为
302
时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个
响应头
Location
指定新请求的
URL
地址;
304
:
使用了本地缓存;
404
:
请求的资源没有找到,说明客户端错误的请求了不存在的资源;
405
:
请求的方式不允许;
500
:
请求资源找到了,但服务器内部出现了错误;
2.servlet
静态资源:无需在程序运行时通过代码运行生成的资源,在程序运行之前就写好的资源. 例如:html css js img ,音频文件和视频文件;
动态资源:需要在程序运行时通过代码运行生成的资源,在程序运行之前无法确定的数据,运行时动态生成,例如Servlet,Thymeleaf ... ...; 动态资源指的不是视图上的动画效果或者是简单的人机交互效果;
Servlet:
用来接收、处理客户端请求、响应给浏览器的动态资源。在整个
Web
应用中,
Servlet
主要负责接收处理请求、协同调度功能以及响应数据。我们可以把Servlet
称为
Web
应用中的
控制器
。
for example:
校验注册时,用户名是否被占用。通过客户端向一个
Servlet
发送请求,携带
username
,如果用户
名是
'atguigu'
,则向客户端响应
NO
,如果是其他,响应
YES
。
publicclassUserServlet extendsHttpServlet {
@Override
protectedvoidservice(HttpServletRequestreq, HttpServletResponseresp) throws ServletException, IOException {
// 获取请求中的键值对参数 key=value
Stringusername=req.getParameter("username");
if("atguigu".equals(username)){
//通过响应对象响应信息
resp.getWriter().write("NO");
}else{
resp.getWriter().write("YES");
}
在service写:
自定义一个类,要继承
HttpServlet
类;
重写
service
方法,该方法主要就是用于处理用户请求的服务方法;
HttpServletRequest
代表请求对象,是有请求报文经过
Tomcat
转换而来的,通过该对象可以获取请
求中的信息;
HttpServletResponse
代表响应对象,该对象会被
Tomcat
转换为响应的报文,通过该对象可以设置
响应中的信息;
Servlet
对象的生命周期
(
创建、初始化、处理服务、销毁
)
是由
Tomcat
管理的,无需自己
new
;
HttpServletRequest HttpServletResponse
两个对象也是由
Tomcat
负责转换,在调用
service
方法时传
入给我们用的;
在web.xml写:有便捷方法@WebServlet("路径")
<?xmlversion="1.0" encoding="UTF-8"?>
<web-appxmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">
<servlet>
<!--给UserServlet起一个别名-->
<servlet-name>userServlet</servlet-name>
<servlet-class>com.atguigu.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<!--关联别名和映射路径-->
<servlet-name>userServlet</servlet-name>
<!--可以为一个Servlet匹配多个不同的映射路径,但是不同的Servlet不能使用相同的url-pattern-->
<url-pattern>/userServlet</url-pattern>
<!-- <url-pattern>/userServlet2</url-pattern>-->
<!--
/ 表示通配所有资源,不包括jsp文件
/* 表示通配所有资源,包括jsp文件
/a/* 匹配所有以a前缀的映射路径
*.action 匹配所有以action为后缀的映射路径
-->
<!-- <url-pattern>/*</url-pattern>-->
</servlet-mapping>
</web-app>