一. Servlet
server applet
1.1 概念:
运行在服务器的Java程序
Servlet是一个接口,定义了Java类被tomcat识别的规则
1.2 Servlet的实现步骤
1、创建类实现Servlet接口
2、重写方法
3、配置Servlet的映射,在WebContent -> WEB-INF -> web.xml
具体实现:
1、implements Servlet
2、init()、service()、destroy()
3、
<servlet>
<servlet-name>标识</servlet-name>
<servlet-class>全类名</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>标识</servlet-name>
<url-pattern>/资源</url-pattern>
</servlet-mapping>
执行原理:
1、当服务器接收到客户端的请求后,会解析地址栏中请求的资源,获取访问的Servlet的路径
2、它会自动查找web.xml文件,是否有一个url-pattern与请求的资源对应
3、如果有,则找到对应的servlet-class中的指定类
4、tomcat会将这个对应的Servlet类编译成字节码文件,放在WEB-INF -> classes下,
然后会将这个字节码文件加载进内存,并创建这个Servlet的对象
5、调用它的方法
二.Servlet的生命周期
2.1 init
Servlet被创建时执行,并且只执行一次
Servlet何时被创建?
1、默认情况下,是在第一次被访问时候执行
2、可以在web.xml中的某个servlet标签下配置<load-on-startup>n</load-on-startup>
,让该Servlet在服务器启动时就创建
n:
- 负整数,仍然是默认是第一次被访问时创建
- 0:当服务器启动时就创建
- 正整数:同上
- n越小,越先执行
2.2 service
每次Servlet被访问都会执行
2.3 destroy
Servlet被销毁时执行,只执行一次
destroy方法在Servlet被释放前执行,用于释放资源
只有服务器正常关闭时,才会执行destroy方法
三. HttpServlet
Servlet 接口
GenericServlet 抽象类
HttpServlet 抽象类
实际开发中,我们采用继承HttpServlet的方式来创建Servlet
步骤:
1、创建类继承HttpServlet
2、重写doGet()和doPost()方法
四. (练习)使用Servlet结合数据库完成注册功能
4.1 页面
1、两个输入框,一个提交按钮
2、action的提交位置
4.2 数据库
1、建库,建表
2、导入3个包:connector、c3p0、dbutils
3、c3p0-config.xml
4、获取连接池
5、定义注册方法
4.3 服务器
1、通过键获取对应的值
2、调用注册功能
五. url-pattern的配置
1、完全匹配
请求的资源与url的配置完全一致
2、目录匹配
格式:/ 目录 / *
表示:只要目录一致,目录后可以写任意内容来访问
3、扩展名匹配
格式:*.扩展名
表示:只要扩展名一致,文件名可以是任意的
注:目录匹配和扩展名匹配不能混用
4、缺省匹配
格式:/ 或 /*
表示:请求的资源不存在时就有该url对应的Servlet来处理
六. HTTP
概念:超文本传输协议
Hypertext Transfer Protocol
作用:定义客户端与服务器端通信时需要遵循的规则,它定义的数据的格式
特点:
- 它是基于TCP / IP 的高级传输协议
- 它是基于 请求响应对的 ,一次请求对应一次响应
- 它是无状态的:每次请求都相互独立,不能有数据的通信、交互
版本:
- HTTP 1.0:每次请求都会创建新的连接,在响应后都会断开连接。
- HTTP 1.1:请求后创建的连接会被下次请求重复使用
请求消息的数据格式:
- 请求行:请求方式 请求地址 请求协议
- 请求方式:一共有7种,最常用的是get和post
- get:
- 请求的参数在地址后
- 相对不安全
- 提交的长度有限
- post:
- 请求的参数在请求体中
- 相对安全
- 提交的长度没有限制
- get:
- 请求地址:http://localhost:8080/day24_4url/request
- 请求协议:HTTP/1.1
- 请求方式:一共有7种,最常用的是get和post
- 请求头:客户端告知服务器的信息
- Accept:允许接收的资源
- Referer:告知服务器当前的请求从哪个url来,一般用于防盗链
- User-Agent:告知服务器,所使用浏览器的版本
- 请求体:封装请求的参数
- get请求没有请求体,get请求的参数在url上
- 只有post有请求体