Servlet :server applet
1、概念:运行在服务器端的小程序
Servlet就是一个接口, 定义了Java类被浏览器访问到(tomcat识别)的规则。
将来我们自定义一个类,实现Servlet接口,复写方法。
2、入门:
(1)创建JavaEE项目
(2)定义一个类,实现Servlet接口
public class ServletDemo1 implements Servlet
(3)实现接口中的抽象方法
(4)配置Servlet
3、执行原理:
1.当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet 的资源路径
2.查找web. xml文件,否有对应的<url-pattern>
标签体内容。
3.如果有,则在找到对应的<servlet-class>
全类名
4. tomcat会将字节码文件加载进内存,并且创建其对象
5.调用其方法
4、Servlet中的生命周期方法:
生命周期:被创建,提供服务,被销毁
方法:
(1)被创建:执行init方法,只执行一次
Servlet什么时候被创建?
默认情况下,Servlet对象第一次访问时,Servlet被创建
配置(在<servlet>标签下配置)执行Servlet的创建时机
1.Servlet对象第一次被访问时创建
* <load-on-startup>的值为负数
2.在服务器启动时创建
* <load-on-startup>的值为0或正整数
Servlet的init方法,只执行一次,说明一个Servlet在内存中只存
在一个对象,Servlet是单例的
多个用户同时访问时,可能存在线程安全问题。
解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,
也不要对其赋初始值
(2)提供服务:执行service方法,执行多次
(3)被销毁:执行destroy方法,只执行一次
服务器正常关闭时才会调用该方法,destroy方法在Servlet销毁前
执行,释放资源
5、Servlet3.0 :
好处:支持注解配置,可以不需要web. xml。
步骤:
(1)创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web. xml
(2)定义一个类,实现Servlet接口
(3)重写Servlet接口方法
(4)在类上使用@WebServlet注解,进行配置:@WebServlet( “资源路径”)
如:@WebServlet(“/demo”),我的虚拟路径为NO2_servlet
那么在浏览器地址栏上输入:localhost:8080/NO2_servlet/demo就可以了
6、IDEA与tomcat的相关配置
(1)IDEA会为每一个tomcat部署的项目单独建立一份配置文件
(2)查看控制台的log : `Using CATALINA_ BASE: "C: \Users\fqy\. IntelliJIdea2018.1\system\tomcat\_ itcast"`
(3)工作空间项目和tomcat部署的web项目
tomcat真正访问的是“tomcat部署的web项目”,而"tomcat部署的web项目”
对应着"工作空间项目"的web目录下的所有资源
注意:WEB- INF目录下的资源不能被浏览器直接访问。
7、Servlet的体系结构
Servlet --接口
|
|(extends)
V
Genericservlet --抽象类
|
|(extends)
V
HttpServlet -- 抽象类
(1) GenericServlet :将servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象,将来定义servlet类时,可以继承GenericServlet, 实现service( )方法即可
(2)HttpServlet :对http协议的一种封装,简化操作
实现:定义一个类继承HttpServlet,同时该类复写doGet/ doPost方法
8、Servlet相关配置
urlpartten:Servlet访问路径
1. 一个Servlet可以定义多个访问路径:
@WebServlet({"/d4" , "/dd4" , "/ddd4"})
2.路径定义规则:
(1)/xxx
(2)/xxx/xxx:多层路径,目录结构(如:/user/demo2)
(3)*.do(如:访问demo,只能输入demo.do,输入demo访问不到)