Servlet规范是一个什么规范呢?
- 遵循servlet规范的webapp,这个webapp就可以在不同的WEB Service中去运行。
- servlet规范包括那些东西呢?
- 规范了哪些接口
- 规范了那些类
- 规范了一个webapp应该有哪些配置文件,存放的路径,叫什么名字
- 规范了一个webapp配置文件中应该有什么内容
- 规范了一个合法有效的web应用它的目录结构应该是怎样的
- ……
servlet对象的生命周期
- 什么是servlet对象的生命周期?
- servlet对象什么时候被创建?
- 什么时候被销毁?
- 创建了几个?
- servlet对象是由谁来维护的?
- servlet的生命周期是由tomcat服务器(WEB SERVE)全权负责的
- tomcat服务器通常又称为WEB容器
- 思考:我们自己new的servlet对象归不归WEB容器管理?
- 不归,可以理解为只是一个普通的对象
- WEB容器创建的servlet对象,都会被存放到一个集合当中(HashMap),只有在这个集合中的servlet对象才会被WEB容器所管理
- 研究:服务器在启动的时候servlet对象有没有被创建出来?
- 实验显示,服务器启动的时候servlet对象并没有被实例化
- 那么服务器启动的时候干了些什么事情呢?
- 解析web.xml文件,将请求的路径和servlet对象的类名,放到上面说的集合当中
- 如何让服务器启动的时候就实例化servlet对象呢?
- 在web.xml中,在<servlet></servlet>标签中添加上<load-on-startup>非负整数</load-on-startup>
- 注:非负整数代表了实例化的优先级,越小优先级越高
- 关于servlet类中方法的调用次数
- 构造方法执行一次
- init方法执行一次
- service方法:用户请求一次就调用一次
- destroy方法执行一次
ServletConfig详解
- ServletConfig是什么?
- jakarta.servlet.ServletConfig 很显然,ServletConfig是servlet规范中的一员
- ServletConfig也是一个接口
- 谁实现了ServletConfig接口?
- org.apache.catalina.core.StandardWrapperFacade
- 结论:tomcat服务器实现了ServletConfig接口
- 思考:如果把tomcat服务器换成jetty服务器那么输出的还是StandardWrapperFacade这个吗?
- 不一定了,包名类名可能跟tomcat服务器的不一样,但是他们都实现了ServletConfig接口!
- 一个servlet对象中,有一个ServletConfig对象,他们俩是一对一的关系
- ServletConfig对象是谁创建的?在什么时间创建的呢?
- 是tomcat(服务器)创建的
- 在创建Servlet对象的时候,同时创建了ServletConfig对象
- ServletConfig对象中到底包装了什么信息?
- 是web.xml文件中<servlet></servlet>标签的配置信息
- 在<servlet></servlet>标签中也是可以初始化一些参数信息的

- ServletConfig接口中也有对应的方法获取到name和value的制

- ServletConfig中有哪些常用的方法呢?
- public String getInitParameter(String name);
- public Enumeration<String> getInitParameterNames();
- public ServletContext getServletContext();
- public String getServlerName();
- 以上方法都可以在servlet类中通过this.去调用,因为GenericServlet实现了ServletConfig接口
ServletContext详解
- ServletContext是什么?
- jakarta.servlet.ServletContext 很显然,ServletContext是servlet规范中的一员
- ServletContext也是一个接口
- 谁实现了ServletContext接口?
- org.apache.catalina.core.ApplicationContextFacade
- 结论:tomcat服务器实现了ServletContext接口
- ServletContext对象是谁创建的?在什么时间创建的呢?
- 是tomcat(服务器)创建的
- 在服务器启动的时候就创建了,在服务器关闭的时候被销毁
- 对于一个webapp来说ServletContext对象只有一个
- ServletContext被称为Servlet上下文对象,对应的就是整个web.xml文件
- ServletContext对象中的数据,是所有servlet共享的
- ServletContext中有哪些常用的方法呢?
- public String getInitParameter(String name);
- public Enumeration<String> getInitParameterNames();
- 以上两个方法是ServletContext对象的方法,获取的是以下的配置信息
<context-param>
<param-name>pageNum</param-name>
<param-value>10</param-value>
</context-param>
相当于全局变量,要和ServletConfig中的(局部变量)区分开来
- public String getRealPath(String path) 获取文件的绝对路径(真实路径)
- ServletContext对象还有另外一个名字:应用域
- 如果所有用户共享一份数据,并且这个数据很少被修改,并且这个数据量很少,可以将这些数据放到ServletContext这个应用域中
- 为什么要数据量小?
- 因为数据量大的太占用堆内存,并且这个对象的生命周期比较长,服务器关闭的时候,这个对象才会被销毁。
- 数据量大会影响服务器的性能
- 怎么存?取?删?
- 存:public void setAttribute(String name, Object value);
- 取:public Object getAttribute(String name);
- 删:public void removeAttribute(String name);
- 注意:以后我们编写Servlet类的时候,实际上是不会继承GenericServlet类的,因为我们是B/S架构,在Servlet规范中,提供了一个HttpServlet的类
使用HttpServlet处理Http协议更加便捷,但是你需要知道它的继承结构:
- jakarta.servlet.Servlet(接口)
- jakarta.servlet.GenericServlet implements Servlet(抽象类)
- jakarta.servlet.http.HttpServlet extends GenericServlet(抽象类)
版权声明:本文为qq_45933810原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。