首页 > 代码库 > JAVA学习之 浅析Servlet

JAVA学习之 浅析Servlet

一、什么是Servlet

       Servlet是一种在服务器端运行的java编写的程序,是按照Servlet规范编写的一个java类。

二、Servlet的工作过程

  

       如图所示:为了实现客户与服务器端的动态交互,需要一个遵循HTTP协议的服务器端应用软件,来处理客户的各种请求,并将结果发送给客户端。

三、Servlet的生命周期

       Servlet的生命周期是由Servlet的容器(例如:tomcat)来控制的;生命后期分为加载类及创建实例;初始化;服务;销毁

        1、加载类及创建实例

        在默认情况下,Servlet实例是在第一个请求到来的时候创建,即输入url的时候创建,以后复用。但是也可以通过配置文件进行设置参数:<load-on-startup>值</load-on-startup>;其中值默认为负数,当设置为大于等于0的数值时,则在tomcat启动的时候加载创建实例。

        2、初始化

        一旦Servlet实例被创建,web服务器会自动调用init(ServletConfig config)方法来初始化该Servlet,其中方法参数config中包含了Servlet的配置信息;下面说一下该如何配置Servlet的初始化参数:

   在web.xml中该Servlet的定义标记中,比如:

  

  <servlet>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>com.tgb.Test.TestServlet</servlet-class>
        <init-param>
           <param-name>encoding</param-name>
           <param-value>GB18030</param-value>
       </init-param>
       </servlet>
<servlet-mapping> 
 
 <servlet-name>TestServlet</servlet-name>   
 <url-pattern>/servlet/TestServlet</url-pattern>  
</servlet-mapping>

             <servlet-name>:sevlet对象的名称。

       <servlet-class>:创建servlet对象需要加载的类

       <init-param>:初始化

       <param-name>:参数名称

       <param-value>:参数值

      <load-on-startup>:创建servlet对象的时机以及顺序

      <servlet-mapping><servlet-name>要与

       <servlet><servlet-name>名称一致。

       <url-pattern>:客户端访问url地址。

          3、服务

        初始化成功后,该Servlet实例就可以被服务器用来服务客户端提出的请求并响应,在服务阶段服务器会调用该实例的Service(ServletRequest request, ServletResponse response)方法,两个参数由服务器创建并传给Servlet实例。其中request对象封装了客户端发往服务器端的信息,response对象则封装了服务器发往客户端的信息。

         4、销毁

       web应用被终止时,Servlet容器会先调用Servlet对象的destrory()方法,然后再销毁Servlet对象,同时也会销毁与Servlet对象相关联的ServletConfig对象。我们可以在destroy方法的实现中释放Servlet所占用的资源。

 

      需要注意的是,Servlet的生命周期中,Servlet的初始化和销毁阶段值会发生一次,而Service方法执行的次数则取决于客户端访问的次数。

 

四、Servlet的线程安全问题

         Servlet是单实例多线程的,如果存在可以修改的成员变量将会出现线程安全问题。

        使用Servlet最好保证Servlet是无状态的,也就是没有可以修改的成员变量。


总结:现在的感觉是,Servlet用起来很简单,但是让我很清楚的描述什么是Servlet,和Servlet的原理还有些困难,这篇博客说明了Servlet一些简单的原理,希望会对以后使用Servlet有很好额帮助。