关于servlet的生命周期和线程的安全性

生命周期:

Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由其运行的WEB容器负责的,具体是指Servlet

1实例化(被创建)

2初始化init()

3处理请求service() --doGet()和,

4最后销毁destory()的过程

线程安全性:

当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。这样的话,当两个或多个线程同时访问同一个Servlet时,可能会发生多个线程同时访问同一资源的情况,数据可能会变得不一致,所以就很容易造成一系列的一些安全性问题。

解决此问题的方法:

  1、实现 SingleThreadModel 接口

  该接口指定了系统如何处理对同一个Servlet的调用。如果一个Servlet被这个接口指定,那么在这个Servlet中的service方法将不会有两个线程被同时执行,当然也就不存在线程安全的问题。这种方法只要继承这个接口就行了

  public class XXXXX extends HttpServlet implements SingleThreadModel { ………… }

  2、同步对共享数据的操作

  使用synchronized 关键字能保证一次只有一个线程可以访问被保护的区段,在本论文中可以通过同步块操作来保证Servlet的线程安全。同步后的代码如下:

  Public class XXXXXX extends HttpServlet { ………… synchronized (this){XXXX} }

  3、避免使用实例变量

  线程安全问题还有些是由实例变量造成的,只要在Servlet里面的任何方法里面都不使用实例变量,那么该Servlet就是线程安全的。

时间: 2024-10-13 14:43:54

关于servlet的生命周期和线程的安全性的相关文章

servlet的生命周期与运行时的线程模型

第 14 章 生命周期 注意 讲一下servlet的生命周期与运行时的线程模型,对了解servlet的运行原理有所帮助,这样才能避免一些有冲突的设计. 如果你不满足以下任一条件,请继续阅读,否则请跳过此后的部分,进入下一章:第 15 章 分页. 了解servlet的生命周期. 了解servlet运行时的线程模型,及设计程序时需要注意的部分. 14.1. 生命周期 我们之前使用的都是javax.servlet.http.HttpServlet,这个类实现了javax.servlet.Servlet

Servlet的生命周期+实现方式

1.Servlet的生命周期:        (1)被创建:            默认情况下,Servlet第一次被访问时,被服务器创建.会调用init()方法.                一个Servlet只会被创建一次.init()方法也只会被调用一次.                Servlet是单例的.而服务器时多线程的.可能存在线程安全问题.                  为了避免安全问题,在Servlet中尽量不要定义成员变量.即使定义了.也不要进行其他操作(只能查询).

Servlet的生命周期及工作原理

Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在下列时刻Servlet容器装载Servlet: 1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的<Servlet></Servlet>之间添加如下代码: ? <loadon-startup>1</loadon-startup

Java Web -- Servlet(5) 开发Servlet的三种方法、配置Servlet详解、Servlet的生命周期(2)

三.Servlet的生命周期 一个Java servlet具有一个生命周期,这个生命周期定义了一个Servlet如何被载入并被初始化,如何接收请求并作出对请求的响应,如何被从服务中清除.Servlet的生命周期被javax.servlet.Servlet这个接口所定义. 所有的Java Servlet都会直接地或间接地执行javax.servlet.Servlet接口,这样它才能在一个Servlet引擎中运行. Servlet引擎是Web 服务器按照Java Servlet API定制的扩展.S

Servlet的生命周期以及简单工作原理

Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在下列时刻Servlet容器装载Servlet: 1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的<Servlet></Servlet>之间添加如下代码: <loadon-startup>1</loadon-startup&g

Servlet的生命周期与运行原理

Servlet的生命周期:    1 加载classLoader    2 实例化 new    3 初始化 init(ServletConfig)    4 处理请求 service doGet doPost    5 退出服务 destroy() 整个过程中只有一个对象API中的过程:    init()只执行一次,第一次初始化的时候     public void init(ServletConfig config) throws ServletException    public vo

Servlet的生命周期和工作原理

Servlet的生命周期和工作原理 一.Servlet生命周期分为三个阶段:             1).初始化阶段:调用init()方法             2).响应客户端请求阶段:调用service()方法             3).终止阶段:调用destroy()方法        1).初始化阶段:             在下列时刻Servlet容器装载Servlet:                 1.Servlet容器启动时自动装载某些Servlet,实现它只需要在w

HTTP Servlet的生命周期

Servlet运行在容器中,没有main方法,所以生命周期由容器控制.简单地说,Servlet的生命周期只有两个状态:未创建状态和初始化状态,通过3个方法来控制:init().service()和destroy().其中,init()方法是Servlet生命的起点,用于占有与Servlet相关的资源以及完成初始化工作:service()方法根据HTTP请求方法(get.post等)将请求分发给doGet()和doPost()等方法:destroy()方法释放在init()方法中占有的与Servl

Servlet 的生命周期 及 注意事项 总结

Servlet的生命周期 图解Servlet的生命周期 生命周期的各个阶段 实例化 :Servlet 容器创建 Servlet 的实例 初始化 :该容器调用init() 方法 请求处理 :如果请求Servlet,则容器调用 service()方法 服务终止 :销毁实例之前调用destroy() 方法 Servlet生命周期详解 Servlet是运行在Servlet容器(有时候也叫Servlet引擎,是web服务器和应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的