web学习04(Servlet方法)

Servlet的五个方法

public void init(ServletConfig servletConfig) throws ServletException {}
public ServletConfig getServletConfig() {
    return null;
}
public void service(ServletRequest request, ServletResponse response)
        throws ServletException, IOException {}
public String getServletInfo() {
    return null;
}
public void destroy() {}

 1.init方法

        init方法被翻译为初始化,只执行一次,在Servlet对象被创建后执行

        init方法通常是完成初始化操作的,在init执行的时候Servlet已经被创建出来了

2.service方法

        service方法是处理用户请求的核心方法,只要用户发送一次请求,service方法必然会执行一次,发送100次请求,service方法就执行100次

3.destroy方法

        destroy发也是只执行一次,Tomcat服务器在销毁Servlet对象之前会调用一次destroy方法

        destroy方法执行时候,Servlet对象的内存还没有被销毁,但是即将被销毁

        destroy方法中可以编写销毁前的准备

        比如说,服务器关闭的时候,Servlet对象开启了一些资源,这些资源可能是流

        那么在关闭服务器的时候,要关闭这些流,关闭这些数据库连接,关闭资源的带啊吗就可以写在destroy方法中。

GenericServlet

GenericServlet是一个适配器

所有的GenericServlet都要继承Servlet

public abstract class GenericServlet implements Servlet{  }

因为编写Servlet类直接实现Servlet 有可能一个类中只需要service方法,其他方法大部分情况下是不需要使用的,导致代码很丑陋

所以用一个GenericServlet类作为适配器,这个类是一个抽象类,其中有一个抽象方法service

GenericServlet实现Servle接口,是一个Servlet的适配器,以后编写的Servlet直接继承GenericServlet,重写service方法即可(之后写代码是继承HttpServlet的,HttpServlet又是继承GenericServlet的)

        在init.service.destory方法中使用最多的是service方法,service方法是一定要实现的

        init方法只是执行了初始化操作,并且初始化操作只需要在服务器启动的时候执行一次,是         Tomcat服务器调用的。例如:初始化数据库连接池。初始化线程池、、、

        注:init方法中的ServletConfig对象是Tomcat创建的,Tomcat服务器先创建了ServletConfig对         象,然后调用init方法,并将ServletConfig对象传给了init对象

        destroy方法也很少使用,通常在destroy方法中,进行资源的关闭,在Servlet对象被销毁之 ·       前,保存要保存的数据,关闭未关闭的资源

ServletConfig

1.ServletConfig

1.ServletConfig:jakarta.servlet.ServletConfig

        是Servlet规范当中的一个

        ServletConfig是一个接口

2.WEB服务器实现了这个接口

如果是jetty服务器输出的ServletConfig对象,输出的内容可能不太一样,输出的包名不同

public class org.apache.catalina.core.StandardWrapperFacade implements ServletConfig{}

输出了org.apache.catalina.core.StandardWrapperFacade@。。。

因为toString方法

public String toString(){

         return getClass ().getName()+"@"+Integer.toHexString(hashCode());

}

3,一个Servlet对象中有一个ServletConfig对象。(Servlet和ServletConfig对象是一对一)
100个Servlet,就应该有100个ServletConfig对象。
4. Servletconfig对象是谁创建的?在什么时候创建的?
Tomcat服务器(WEB服务器)创建了ServletConfig对象。在创建Servlet对象的时候,同时创建ServletConfig对象。

5. config是configuration的缩写,servletConfig对象被翻译为:Servlet对象的配置信息对象。一个Servlet对象就有一个配置信息对象。

6. Servletconfig对象中到底包装了什么信息呢?
<servlet>
        <servlet-name>configTest</servlet-name>
        <servlet-class>com. bjpowernode.javaweb.servlet.ConfigTestServlet</servlet-class></servlet>
ServletConfig对象中包装的信息是:
        web.xml文件中<servlet></servlet>标签的配置信息。

Tomcat解析web.xml文件,将web.xml文件中<servlet></servlet>标签中的配置信息自动包装到ServletConfig对象中。

7.ServletConfig接口中的方法

<!--

        配置一个Servlet对象的初始化信息,初始化参数自动被Tomcat封装在ServletConfig对象         中

-->

        <init-parm>

                <parm-name></parm-name>

                <parm-value></parm-value>

        </init-parm>

8. ServletConfig接口中有4个方法:
(1);
        public String getInitParameter(String name);

(2):
        public Enumeration<String> getInitParameterNames();

(3):
        public servletcontext getServletdontext();

(4):
        public String getServletName();
以上的4个方法,在自己编写的Servlet类当中也可以使用this去调用。(这个Servlet继承了GenericServlet)

servletContext

1.Servletcontext是什么?
        Servletcontext是接口,是Servlet规范中的一员。

2.ServletContext是谁实现的?
        Tomcat服务器(WEB服务器)实现了Servletcontext接口。
        public class org.apache.catalina.core.ApplicationContextFacade implements ServletContext

3. ServletContext对象在WEB服务器启动的时候创建。ServletContext对象是WEB服务器创建的。
对于一个webapp来说,ServletContext对象只有一个。ServletContext对象在服务器关闭的时候销毁。

4. ServletContext怎么理解?
context : Servlet对象的环境对象。(Servlet对象的上下文对象。)

ServletContext对象其实对应的就是整个web.xml文件。
50个学生,每个学生都是一个Servlet,这50个学生都在同一个教室当中。那么这个教室就相当于ServletContext对象。放在ServletContext对象当中的数据,所有Servlet一定是共享的。
比如:一个教室中的空调是所有学生共享的

Tomcat是一个容器,一个容器当中可以放多个webapp,一个webapp对应一个ServletContext对象。

缓存机制

堆内存当中的字符串常量池。
         "abc"先在字符串常星池中查找,如果有,直接拿来用。如果没有则新建,然后再放入字符串          常量池

堆内存当中的整数型常量池。
        [-128~127]一共256个Integer类型的引用,放在整数型常量池中。没有超出这个范围的话,直         接从常量池中取

连接池(Connection Cache)
        a.这里所说的连接池中的连接是java语言连接数据库的连接对象: java.sql.Connection对象

        b.JVM是一个进程。MySQL数据库是一个进程。进程和进程之间建立连接,打开通道是很耗         费资源的。怎么办?可以提前先创建好N个Connection连接对象,将连接对象放到一个集合当         中,我们把这个放有Connection对象的集合称为连接池。每一次用户连接的时候不需要再新         建连接对象,省去了新建的环节,直接从连接池中获取连接对象,大大提升访问效率。

        c.连接池
                最小连接数
                最大连接数
                连接池可以提高用户的访问效率。当然也可以保证数据库的安全性。

线程池
        Tomcat服务器本身就是支持多线程的。
        Tomcat服务器是在用户发送一次请求,就新建一个Thread线程对象吗?
                当然不是,实际上是在Tomcat服务器启动的时候,会先创建好N多个线程Thread对象,                 然后将线程对象放到集合当中,称为线程池。用户发送请求过来之后,需要有一个对应                 的线程来处理这个请求,这个时候线程对象就会直接从线程池中拿,效率比较高。

                所有的WEB服务器,或者应用服务器,都是支持多线程的,都有线程池机制。

redis
        NoSQL教据库。非关系型教据库。缓存数据库。
向ServletContext应用域中存储数据,也等于是将数据存放到缓存cache当中了。

猜你喜欢

转载自blog.csdn.net/m0_63061397/article/details/125814048
今日推荐