第十七章 Servlet
什么是Servlet
Servlet其实就是一个遵循Servlet开发的Java类。Servlet是由服务器调用的,运行在服务器端。
Servlet就是一个接口,定义了Java类被浏览器访问到tomcat的规则
将来我们自定义一个类,实现Servlet接口,复写方法。
为什么要用到Servlet
我们编写Java程序想要在网上实现聊天、发帖,这样一些的交互功能,普通的Java技术是非常难完成的。sun公司就提供了Servlet这种技术供我们使用。
快速入门
-
创建JavaEE项目
-
定义一个类,实现Servlet接口
-
public class ServletDemo1 implements Servlet
-
-
实现接口中的抽象方法
-
配置Servlet
在web.xml中配置<!-- 配置Servlet --> <!-- 给类的名称起了一个短的名字 --> <servlet> <servlet-name>demo1</servlet-name> <servlet-class>web.servlet.ServletDemo1</servlet-class> </servlet> <!-- 告诉系统通过什么路径访问Servlet --> <servlet-mapping> <servlet-name>demo1</servlet-name> <url-pattern>/demo1</url-pattern> </servlet-mapping>
执行原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ckGiWcbB-1596781799360)(D:\notebook\java\JAVA入门.assets\20200807095926-1596766738490.png)]
文字描述如下:
1.当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径。
2.查找web.xml文件,是否有对应的<url-patter>标签体内容。
3.如果有,则在找到对应的<servlet-class>全类名
4.tomcat会将字节码文件加载进内存,并且创建其对象
5.调用其方法
Servlet中的生命周期
- 被创建:执行init方法,只执行一次
- Servlet什么时候被创建?
- 默认情况下,第一次被访问时被创建
- 通过修改配置文件可修改创建时机
在<servlet>
标签下配置
- Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个一个对象,Servlet是单例的
- 多个用户同时访问时,可能存在线程安全问题。
- 解决:尽量不要再Servlet中定义成员变量。即使定义了成员变量,也不要修改值。
- Servlet什么时候被创建?
- 提供服务:执行service方法,执行多次
- 被销毁:执行destroy方法,只执行一次
- 只有服务器正常关闭时,才会执行destroy方法。
Servlet3.0
- 好处:
- 支持注解配置。可以不需要web.xml了
- 步骤:
- 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
- 定义一个类,实现Servlet接口
- 复写方法
- 在类上使用**@webServlet**注解,进行配置
- @webServlet(“Servlet资源路径”)
IDEA与Tomcat的相关配置
- IDEA会为每一个tomcat部署的项目单独建立一份配置文件
- 查看控制台的log:Using CATALINA_BASE:
- 工作空间项目 和 tomcat部署的web项目
- tomcat真正访问的是“tomcat部署的web项目”,“tomcat部署的web项目”对应着“工作空间项目” 的web目录下的所有资源
- WEB-INF目录下的资源不能被浏览器直接访问。
- 断电调制:使用“小虫子”启动 debug启动
Servlet的体系结构
Servlet —— 接口
|
GenericServlet —— 抽象类
|
HttpServlet —— 抽象类
- GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
- 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
- HttpServlet:对http协议的一种封装,简化操作
- 定义类继承HttpServlet
- 复写doGet/doPost方法
Servlet相关配置
- urlpartten:Servlet访问路径
- 一个Servlet可以定义多个访问路径:@WebServlet({“/d4”,"/dd4"})
- 路径定义规则:
- /xxx
- /xxx/xxx:多层路径,目录结构
- *.do
HTTP
-
概念:Hyper Text Transfer Protocol 超文本传输协议
- 传输协议:定义了客户端和服务器端通信时,发送数据的格式
- 特点:
- 基于TCP/IP的高级协议
- 默认端口号:80
- 基于请求/相应模型的:一次请求对应一次相应
- 无状态的:每次请求之间相互独立,不能交互数据
- 历史版本:
- 1.0:每一次请求相应都会建立新的连接
- 1.1:服用连接
-
请求消息数据格式
- 请求行
请求方式 请求url 请求协议/版本
GET /login.html HTTP/1.1- 请求方式:
- HTTP协议有7种请求方式,常用的有2种
- GET:
- 请求参数在请求行中,在url后。
- 请求的url长度有限制
- 不太安全
- POST:
- 请求参数在请求体中
- 请求的url长度没有限制的
- 相对安全
- GET:
- HTTP协议有7种请求方式,常用的有2种
- 请求方式:
- 请求头
- 请求空行
- 请求体
- 请求行
-
相应消息数据格式
Request_原理
- request对象和response对象的原理
- request和response对象是由服务器创建的。我们来使用它们
- request对象是用来获取请求消息,response对象是用来设置相应消息
- request对象继承体系结构:
- request:获取请求消息