Servlet学习笔记
概念:运行在服务器端上的小程序
浏览器向服务器发送请求会经过Servlet处理
服务器上存放着动态资源、静态资源
Servlet处理动态资源 访问已经写好逻辑性的java代码(类)
Java类依赖于服务器才能运行,tomcat执行它,需要遵守一定的规则(接口),才能被tomcat所识别
**Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat)的规则
**将来自定义一个类,实现Servlet接口,复写方法。
快速入门
1.创建javaEE项目。
2.定义一个类,实现Servlet接口。
3.实现接口中的抽象方法。
4.配置Servlet。
*执行原理
1.当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径。
2.查找web.xml文件,是否有对应的标签体内容。
3.如果有,则在找到对应的全类名。
4.tomcat会将字节码文件加载进内存,并且创建类对象。
5.调用其方法。
*Servlet生命周期
初始化-提供服务-被销毁
**Servlet什么时候被创建?
*默认情况下,第一次被访问时,servlet被创建
*可以改变Servlet的创建时机 ---------↓↓↓
-
第一次被访问时,创建
*的值为负数
-
在服务器启动时,创建
*的值为0或正整数
*Servlet的init()方法,只执行一次,说明一个Servlet在内存里只存在一个对象,Servlet是单例的
*多个用户同时访问时,可能存在线程安全问题
*解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对其修改值
生命周期方法
init() 初始化方法在Servlet创建时执行,只会执行一次。
**service()**提供服务方法每一次Servlet被访问,执行,可被执行多次。
**destory()**销毁方法当Servlet被正常关闭时执行,只会执行一次。Servlet被销毁之前执行。
ServletConfig() Servlet的配置对象
getServletInfo() 获取Servlet的一些信息,版本,作者等等。。
*Servlet3.0
*好处:
*支持注解配置。可以不需要web.xml了。
*步骤:
1.创建JavaEE项目,选择Servlet的版本为3.0以上,可以不创建web.xml
2.定义一个类,实现Servlet接口
3.复写方法
4.在类上使用@WebServlet注解,进行配置
*@WebServlet(“资源路径”) == @WebServlet(patterns = “资源路径”)
@WebServlet注解方法值::
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
String name() default "";
String[] value() default {};
String[] urlPatterns() default {};
int loadOnStartup() default -1;
WebInitParam[] initParams() default {};
boolean asyncSupported() default false;
String smallIcon() default "";
String largeIcon() default "";
String description() default "";
String displayName() default "";
IDEA与Tomcat的相关配置
1.在idea开发 idea会为每一个tomcat部署的项目单独建立一份配置文件
*查看控制台的log: using catalina_base : “C:\Users\10501\AppData\Local\JetBrains\IntelliJIdea2021.3\tomcat”
2.工作空间项目 和 tomcat部署的web项目
*tomcat真正访问的是“tomcat部署的web项目","tomcat部署的web项目”对应着"工作空间项目"的web目录下的所有资源
*WEB-INF目录下的资源不能被浏览器直接访问
*断点调试Tomcat
Servlet的体系结构
Servlet是一个接口,被GenericServlet抽象类实现,被HttpServlet抽象类继承
*GenericServlet:将Servlet接口中其他的方法做了默认的空实现,只将Service()方法作为抽象 *将来定义Servlet可以去继承GenericServlet做Service()方法实现即可.
*HttpServlet:对Http协议的一种封装,简化操作
1.定义类继承HttpServlet
2.复写doGet或doPost方法
Servlet的相关配置
1.url-pattern:Servlet的访问路径
* 一个Servlet可以定义多个访问路径 : @WebServlet({"/demo1","/d1"})
*路径定义规则:
1./XXX
2./XXX/XXX
3. *.do
总结:Servlet就是一个接口通过服务器访问后执行Java类里面的代码的那么一个接口类