【servlet篇】servlet相关类介绍

目录

 servlet对象什么时候被创建?

2.servlet接口中各个方法的作用

3.相关类和接口介绍

GenericServlet

ServletConfig

ServletContext

HttpServlet


 servlet对象什么时候被创建?

1,通常情况下,tomcat启动时,并没有立刻创建Servlet对象,而是客户端第一次访问这个servlet所配置的映射目录时,由tomcat构造servlet对象,调用init方法,同时执service方法。以后再访问,不会执行init方法,直接调用service,当tomcat重启或者正常关闭时调用destory方法。那么,init为客户端第一次访问时所用,service为客户端每次访问时所用,并且要知道每调用一次servlet对象的service方法,就创建一个了新线程。destory为tomcat正常关闭时所调用。

2,特殊情况下,如果我们在XML文件中配置了load-On-Startup,那么Servlet对象是tomcat启动时被创建。

通过上面描述我们可以知道,Servlet只有在第一次访问的时候创建,以后不创建了,那么Servlet就是单例的了。Servlet是单例多线程。但是他是假单例,因为单例模式中规定无参构造方法必须是抽象的,外界无法直接访问构造方法,需要从我们提供的指定方法中获取;

2.servlet接口中各个方法的作用

方法名     方法描述
init(ServletConfig config)   servlet实例的初始化方法
ServletConfig getServletConfig 获取servlet实例启动时候的配置信息
service(ServletRequest req, ServletResponse res)  处理web客户端的请求
getServletInfo()  获取servlet本身的服务信息
destroy();     servlet被web容器销毁时候调用的销毁方法

3.相关类和接口介绍

GenericServlet

为什么会有GenericServlet呢?

        我们通常编写一个servletdemo时,需要实现servlet接口,实现servlet接口就必须重写servlet接口中的五个方法,然而这五个方法中我们真正使用到的其实只有一个service()方法,每次实现servlet接口就要重写这五个方法实在太麻烦,很繁琐,所以我们就创建了一个中间类GenericServlet,让它其实现servlet接口并重写五个方法,然后将主要方法service()方法定义成抽象方法,类定义成抽象类,这样我们在编写servletdemo类时就可以只继承GenericServlet这个类,仅仅只需重写一个方法service();这里涉及到一个设计模式(适配器设计模式);

ServletConfig

        我们在手写一个servletdemo类之后,就会在XML文件中配置相关信息,那么我们如何在之后的运用中获取到这些信息呢?此时就需要ServletConfig接口了,ServletConfig接口中就存储了servlet对象的所有配置信息,如何理解呢?我们在手写一个servletdemo类之后,就会在XML文件中配置相关信息,ServletConfig中就存储了XML文件中标签<servlet></servlet>中的信息;

        我们在同一个工程下每写一个servletdemo类就必须要在XML文件中配置一次相关数据,由此可得每个servlet都对应这一个servletConfig接口;servletConfig是不需要我们自己去创建的,它是由Tomcat服务器创建的;
        ServletConfig接口有哪些常用的方法?

      public String getInitParameter(String name); // 通过初始化参数的name获取value
      public Enumeration<String> getInitParameterNames(); // 获取所有的初始化参数的name
      public ServletContext getServletContext(); // 获取ServletContext对象
      public String getServletName(); // 获取Servlet的name

        以上方法在Servlet类当中,都可以使用this去调用。因为GenericServlet实现了ServletConfig接口。

ServletContext

  • 一个Servlet对象对应一个ServletConfig。100个Servlet对象则对应100个ServletConfig对象。

  • 只要在同一个webapp当中,只要在同一个应用当中,所有的Servlet对象都是共享同一个ServletContext对象的。

  • ServletContext对象在服务器启动阶段创建,在服务器关闭的时候销毁。这就是ServletContext对象的生命周期。ServletContext对象是应用级对象。

  • Tomcat服务器中有一个webapps,这个webapps下可以存放webapp,可以存放多个webapp,假设有100个webapp,那么就有100个ServletContext对象。但是,总之,一个应用,一个webapp肯定是只有一个ServletContext对象。

  • ServletContext被称为Servlet上下文对象。(Servlet对象的四周环境对象。)

  • 一个ServletContext对象通常对应的是一个web.xml文件。

  • ServletContext对应显示生活中的什么例子呢?

    • 一个教室里有多个学生,那么每一个学生就是一个Servlet,这些学生都在同一个教室当中,那么我们可以把这个教室叫做ServletContext对象。那么也就是说放在这个ServletContext对象(环境)当中的数据,在同一个教室当中,物品都是共享的。比如:教室中有一个空调,所有的学生都可以操作。可见,空调是共享的。因为空调放在教室当中。教室就是ServletContext对象。

  • ServletContext是一个接口,Tomcat服务器对ServletContext接口进行了实现。

    • ServletContext对象的创建也是Tomcat服务器来完成的。启动webapp的时候创建的。

HttpServlet

我们知道,我们写一个servlet,并不需要实现顶层接口Servlet,只需要继承HttpServlet,并且实现doGet和doPost方法即可了。

Servlet接口的提出,就是为了解决基于请求-响应模型的数据处理,并没有涉及HTTP协议及相关API,GenericServlet是 实现接口的通用Servlet,也没有提供与 HTTP协议相关 API ,而在HttpServlet中引入与 协议相关 API 。

猜你喜欢

转载自blog.csdn.net/m0_64231944/article/details/128757900