【重拾基础】Servlet笔记(1)

  • 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版权协议,转载请附上原文出处链接和本声明。