zoukankan      html  css  js  c++  java
  • 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。
  • 相关阅读:
    MySQL 中 where id in (1,2,3,4,...) 的效率问题讨论
    创建,增加,删除mysql表分区
    mysql分区及实例演示
    MySQL的表分区详解
    MySQL 存储过程传参之in, out, inout 参数用法
    MySQL里面的子查询实例
    超详细mysql left join,right join,inner join用法分析
    MySQL force Index 强制索引概述
    MyISAM和InnoDB的索引在实现上的不同
    java中的守护线程
  • 原文地址:https://www.cnblogs.com/du001011/p/11123751.html
Copyright © 2011-2022 走看看