Servlet生命周期和工作原理

Posted du001011

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet生命周期和工作原理相关的知识,希望对你有一定的参考价值。

首先说一下如何创建Servlet,

第一步定义一个类,继承HttpServlet类 

第二步重写doGet()和doPost()方法

第三步Servlet程序会自动交给tomcat服务器运行 
第四步 在web.xml文件中进行配置

说明:博主创建的自定义类名为FirstServlet

配置的具体内容如下:

 <!--网站首页的配置-->
    <welcome-file-list>
        <welcome-file>02.html</welcome-file>
    </welcome-file-list>

    <!--网站信息的配置-->

    <!--配置servlet的信息-->
    <servlet>
        <!--建议和类名一致-->
        <servlet-name>FirstServlet</servlet-name>
        <servlet-class>com.dkc.demo.FirstServlet</servlet-class>
    </servlet>

    <!--Servlet的映射信息的配置-->
    <servlet-mapping>
        <servlet-name>FirstServlet</servlet-name>
        <!--地址栏输入的映射路径
        必须“/”-->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

Servelt生命周期主要分为:

init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet
时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。
service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”
(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。
destroy():仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的
线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。

Servlet的执行过程:

1.启动tomcat
2.在web工程下的web.xml查找是否存在url-pattern,如果有直接访问Servlet没有的话看下面解释
  <servlet>
        <servlet-name>MyFirstServlet</servlet-name>  (c)
        <servlet-class>com.dkc.a_hello.MyFirstServlet</servlet-class>(d)  通过反射找到对应的文件
    </servlet>
    <servlet-mapping>
        <servlet-name>MyFirstServlet</servlet-name>  (b)
        <url-pattern>/hello</url-pattern>   (a)
    </servlet-mapping>
3.通过反射获取当前Servlet的class对象
4.解析Servlet中的方法,给我们用户响应!

解释:访问servlet先动态(web.xml),在静态(webapp下寻找是否存在xxx.html/jsp)如果有就访问,没有就打开的页面会报错Not 404)

Servlet工作原理:

1.首先简单解释一下Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见service()方法中对请求的方式进行了
匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。在Servlet接口和GenericServlet中是没有doGet()、doPost()等等这些方
法的,HttpServlet中定义了这些方法,但是都是返回error信息,所以,我们每次定义一个Servlet的时候,都必须实现doGet或doPost等这些方法。
2.每一个自定义的Servlet都必须实现Servlet的接口,Servlet接口中定义了五个方法,其中比较重要的三个方法涉及到Servlet的生命周期,分别是上文提到的init(),service(),
destroy()方法。GenericServlet是一个通用的,不特定于任何协议的Servlet,它实现了Servlet接口。而HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet接
口。所以我们定义Servlet的时候只需要继承HttpServlet即可。
3.Servlet接口和GenericServlet是不特定于任何协议的,而HttpServlet是特定于HTTP协议的类,所以HttpServlet中实现了service()方法,并将请求ServletRequest、
ServletResponse强转为HttpRequest 和 HttpResponse。

 

以上是关于Servlet生命周期和工作原理的主要内容,如果未能解决你的问题,请参考以下文章

servlet生命周期与工作原理

servlet的生命周期与工作原理使用!

JSP 和 Servlet 的工作原理和生命周期

Servlet生命周期工作原理配置

Servlet的生命周期及工作原理

Servlet 生命周期工作原理