Servlet/Http协议
一. Servlet基础
- Servlet :server applet(运行在服务器端的小程序)
- Servlet 就是一个接口,定义了Java类被浏览器访问到(被Tomcat识别)的规则
- 实现Servlet接口的类须要依赖服务器(如Tomcat)才能运行,由Tomcat执行
- 基本操作:
- 实现Servlet接口,重写方法,在重写的service()方法中写要输出的内容
- 在web.xml中添加访问类的映射地址
- 启动服务器,访问对应路径 (注意虚拟路径)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210301111804574.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzUwMDQyNzkz,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210301111823955.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzUwMDQyNzkz,size_16,color_FFFFFF,t_70)
5.执行原理 - tomcat服务器解析请求url路径,获取访问Servlet的资源路径
- 查找web.xml文件,查找是否有对应的< url-pattern>
- 找到对应的< servlet-class>全类名,将此类的字节码文件加载进内存,创建其对象,调用对应方法
- 注:tomcat服务器会创建request(封装请求消息)和response对象传递给service()方法,并调用
- Servlet的生命周期
- init()方法,在Servlet被创建时执行,只会执行一次(在内存中只存在一个对象,单例)
- service()执行服务的方法可以执行多次
- destroy()方法,在服务器正常关闭时执行,只会执行一次
- 指定Servlet的创建时机
<servlet>
<servlet-name>demo3</servlet-name>
<servlet-class>cn.itcast.web.servlet1.MyServlet</servlet-class>
<!--
Servlet的创建时机
1. 负数:第一次被访问时创建,默认是负数
2. 0或正数: 在启动服务器是被创建
-->
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>demo3</servlet-name>
<url-pattern>/demo3</url-pattern>
</servlet-mapping>
- 映射路径的注解配置
- @WebServlet("/xxx"):代替web.xml中的配置(JavaEE6 之后支持Servlet3.0,Servlet3.0之后支持注解配置)
- Servlet的体系结构
- Servlet(接口)
- GenericServlet(抽象类), 只需要重写service()方法
- HttpServlet(抽象类),内部的service()方法根据请求方式做了方法分发。最常用的是重写doGet()方法和doPost方法
- 浏览器直接访问为get方式,post方式如表单提交
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210301135158232.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzUwMDQyNzkz,size_16,color_FFFFFF,t_70)
- 路径的定义规则(可以为数组{"/xxx","/xxx"})
- /xxx
- /xxx/xxx (*代表任意)
- *.do (不加斜杠)
HTTP协议
- HTTP: Hyper Text Transfer Protocal 超文本传输协议
- 特点
- 基于TCP/IP的高级协议,默认端口80
- 基于请求/响应模型:一次请求对应一次响应
- 无状态的:每次请求之间相互独立,不能交互数据
- 请求消息的数据格式(request)
- 请求行
- 请求头 :客户端浏览器告诉服务器一些信息(如User-Agent ,referer )
- 请求空行:分割作用
- 请求体:正文 (get请求没有请求体部分)
- GET请求方式和POST的区别
- GET
- 请求参数会在地址栏中显示,URL后,封装在请求行中
- 请求参数的长度是有限制的
- 不太安全(在地址栏能看见)
- POST
- 请求参数不会在地址栏中显示,会封装在请求中
- 请求参数的大小没有限制(文件上传)
- 较为安全