HTTP协议:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| HTTP是一个规范,是用来约束WEB服务器和浏览器之间的通讯协议 HTTP是HyperText Tranfer Protocol 超文本传输协议 基于TCP/IP的一个协议,用于连接WEB服务器和WEB浏览器
HTTP的协议版本: HTTP/1.0 HTTP/1.1 多数
HTTP协议对于浏览器来说可以分为 HTTP请求:从浏览器发送给服务器的请求内容 HTTP响应:浏览器接受服务器发送的数据内容 HTTP请求: HTTP请求头: GET / HTTP/1.1 --请求行 Host: www.baidu.com --请求的服务器地址 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*
使用GET请求方式: GET /Day40WEB/TestHttp?name=123&password=123 HTTP/1.1 ?之后就是GET请求的数据参数 使用POST请求方式 在URL中没有看到任何的参数 而且请求的方式也略有不同 POST /Day40WEB/TestHttp HTTP/1.1 请求的数据在POST请求特有的 请求体内保存 也就是谷歌浏览器 Form Data
响应头: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 --使用的服务器是什么 Content-Length: 0 --响应得到的数据长度,字节数 Date: Mon, 18 Jun 2018 09:49:20 GMT 格林尼治时间 标准时间 格式: HTTP/版本号(目前常用都是1.1) 状态码 原因的简单描述
|
状态码 |
含义 |
100 ~ 199 |
表示成功接收请求,要求客户端继续提交下一次请求 |
200 ~ 299 |
表示成功接收并且处理完成了整个操作流程,常用200 |
300 ~ 399 |
为了完成请求,要求客户做出进一步的操作,例如:跳转,资源不存在,跳转新界面 常用302 304 307 |
400 ~ 499 |
客户请求错误,常用404 |
500 ~ 599 |
服务器坏了!常用500 |
Servlet映射路径
1 2 3 4 5 6 7 8 9 10 11 12
| <servlet> <servlet-name>TestHttp</servlet-name> <servlet-class>zhaolong.TestHttp</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestHttp</servlet-name> <url-pattern>/TestHttp</url-pattern> </servlet-mapping>
|
浏览器访问服务器的URL分析
1.浏览器根据输入的URL来访问Tomcat服务器 http://localhost:8080
2./Day40WEB 访问Tomcat服务器下webapps里面的Day40WEB项目文件夹
3./TestHttp 用来匹配在【WEB-INF】下的【web.xml】文件里面的url-pattern
/TestHttp 称之为 映射路径
映射流程:
1.在【WEB-INF】下的web.xml文件中匹配url-pattern
2.匹配到,就可以获取到<servlet-mapping>,可以找到<servlet-name>标签内容,获取servlet-name属性
3.通过匹配<servlet-name>,找到<servlet>,也就可以获取到<servlet-class>标签内容
在这个标签中包含了servlet程序运行需要执行的.class文件
4.通过这个包名.类名就可以加载这个.class(字节码文件),运行servlet程序,这里用到【反射】思想
url-pattern 匹配形式:
精确匹配:
url-pattern规定的是什么样的匹配,就在URL中写什么
例如:
/TestHttp 在浏览器中只能输入:
http://localhost:8080/Day40WEB/TestHttp
模糊匹配:
/* http://localhost:8080/Day40WEB/任意内容 都可以访问当前的Servlet程序
*.do http://localhost:8080/Day40WEB/任意内容.do 以.do结尾
*.html (伪静态) http://localhost:8080/Day40WEB/任意内容.html
*.action
*.jsp
注意事项:
1.模糊匹配不能同时使用/和*
2.如果同时存在模糊匹配和精确匹配,精确匹配的优先级高
3.使用后缀名的模糊匹配优先级最低
4.要求所有的Servlet程序的url-pattern都不能为/ ,不允许和Tomcat默认Servlet冲突
Tomcat默认的Servlet程序 【缺省路径】
在URL中输入
http://localhost:8080/Day40WEB/
流程:
1.在Day40的项目目录下【WEB-INF】里面的web.xml中匹配url-pattern为/ 的标签 【精确匹配】
2.如果没有匹配到这个 / 映射路径,这个时候Tomact会把这个映射路径交给 在Tomcat中默认
的Servlet程序中,DefaultServlet
3.DefaultServlet会首先在Day40WEB的项目目录下找有没有对应的index.***文件
这里可以支持index.html index.htm index.jsp
4.如果有,将对应的index.***文件发送给浏览器
5.如果没有,报状态码 404 跳转到默认的404页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
|
Servlet生命周期【重点】
之前提到的生命周期:
成员变量,局部变量,类对象,线程的生命周期
Servlet程序的生命周期
是由Tomcat服务器控制的,因为Servlet程序,目前只能在Tomcat服务器上运行
Servlet生命周期的四个主要方法:
1)构造方法
用于创建Servlet对象
有且只执行一次
2)init方法
初始化构造方法创建好的Servlet对象
有且执行一次
3)Service方法
提供Servlet程序的服务
随便用几次
当指定的Servlet程序被创建,初始化之后,并没有销毁,而且从任何浏览器任何ip地址访问当前Servlet程序,
都不会重新创建,而是始终执行这一个Servlet程序
Servlet就是一个单例对象
4)Destroy方法
销毁Servlet对象,在Tomcat服务器关闭时执行
有且只执行一次
Servlet的自动加载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 在Tomcat服务器,假如在Servlet程序代码量巨大,操作的数据很大,并没有自动启动,而是当用户访问的时候才启动servlet, 这样会导致用户访问的友好度不够,时间效率低
如果一个Servlet程序运行启动过程比较长,操作复杂度较大,为了提供用户的访问体验,会设置自动加载
需要修改web.xml文件
<servlet> <servlet-name>LifeDome</servlet-name> <servlet-class>d_life.LifeDome</servlet-class> <load-on-startup>1</load-on-startup> </servlet>
用来在Tomcat服务器上提前加载一些重要的Servlet
|