servlte

来源:互联网 发布:贵州旅游大数据报告 编辑:程序博客网 时间:2024/06/02 05:35

1、servlte介绍

       servlte是基于java技术的web组件,可以被java的webserver动态加载,如tomcat。容器也叫作做servlte引擎,其实就是Tomcat的一部分。

       以下是一个典型的事件序列:
          1、客户端(如web浏览器)发送一个HTTP请求到web服务器;        

          2Web服务器接收到请求并且交给servlet容器处理,servlet容器可以运行在与宿主web服务器同一个进程中,也可以是同一主机的不同进程,或者位于不同的主机的

web 服务器中,对请求进行处理。

          3servlet容器根据servlet配置选择相应的servlet,并使用代表请求和响应对象的参数进行调用。

          4servlet通过请求对象得到远程用户,HTTP POST参数和其他有关数据可能作为请求的一部分随请求一起发送过来。Servlet执行我们编写的任意的逻辑,然后动态产生

响应内容发送回客户端。发送数据到客户端是通过响应对象完成的。

         5、一旦servlet完成请求的处理,servlet容器必须确保响应正确的刷出,并且将控制权还给宿主Web服务器。

2、Servlet 接口


      目前有 GenericServletHttpServlet这两个类实现了Servlet接口。通常使用HttpServlet就行了。

3、线程和servlte实例数量问题

     通常Web容器对于并发请求将使用同一个servlet处理,并且在不同的线程中并发执行service方法。对于web容器来说,一个servlte只有一个实例,多次访问都是同时访问一个实例的servlte。不过,如果你实现了SingleThreadModel,那么就是多实例的servlte,就是单线程对应一个servlte实例,不在是多线程调用同一个servlte。但是因为不断新建servlte对象实例,所以性能方面不好,同时也不能解决多线程问题。而且这个方法是在2.4api已经废弃。对于那些没有实现SingleThreadModel接口的Servlet,但是它的service方法(或者是那些HttpServlet中通过 service方法分派的doGetdoPost等分派方法)是通过synchronized关键词定义的,Servlet容器建议使用此方案,因为它只能使用序列化请求进行处理(就是队列的形式)

4、servlte生命周期和初始化

       servlte生命周期被容器所管理,在生命周期内规定servlte如何被加载、实例化、初始化、出来客户端请求,如何结束服务。可以通过重写servlte接口中的:initservice
destroy 这些 API 来表示,所有 Servlet必须直接或间接的实现GenericServletHttpServlet抽象类。

      容器负责初始化和加载servlte,加载和初始化可是在容器初始化的时候或者是请求来的时候。一单一个servlte加载完毕,就必须在处理客户端请求前初始化servlte实例,初始化的目的是为了加载一些 持久化的配置,如jdbc连接(init()方法)
5、异步处理

       内容太多

6、终止服务
     

      Servlet 容器没必要保持装载的 Servlet持续任何特定的一段时间。一个 Servlet实例可能会在 servlet 容器内保持活跃(active)持续一段时间(以毫秒为单位),Servlet

器的寿命可能是几天,几个月,或几年,或者是任何之间的时间。当Servlet 容器确定 servlet 应该从服务中移除时,将调用 Servlet 接口的 destroy方法以允许 Servlet 释放它使

用的任何资源和保存任何持久化的状态。例如,当想要节省内存资源或它被关闭时,容器可以做这个。servlet 容器调用 destroy 方法之前,它必须让当前正在执行 service

法的任何线程完成执行,或者超过了服务器定义的时间限制。一旦调用了servlet 实例的 destroy 方法,容器无法再路由其他请求到该servlet 实例了。如果容器需要再次使用该

servlet,它必须用该servlet 类的一个新的实例。在destroy 方法完成后, servlet 容器必须释放 servlet实例以便被垃圾回收。

    






原创粉丝点击