HttpServlet类通过init是什么方法()方法和destory()方法管理Servlet自身的资源

init是什么方法方法: 是在servlet实例创建時调用的方法用于创建或打开任何与servlet相的资源和初始 化servlet的状态,Servlet规范保证调用init是什么方法方法前不会处理任何请求 

destory方法:是在servlet实例被销毀时由web容器调用Servlet规范确保在destroy方法调用之 前所有请求的处理均完成,需要覆盖destroy方法的情况:释放任何在init是什么方法方法中 打开的与servlet相关的資源存储servlet的状态

Servlet是线程不安全的在Servlet类中可能会定义共享的类变量,这样在并发的多线程访问的情况下不同的线程对成员变量的修改会引发错误。

这道题 我不服init是什么方法明明是在实例化servlet后才会调用,不能说是一加载servlet就调用

的线程同时访问了 servlet 的共享数据如成员变量,鈳能会引发线程安全问题

1 )把使用到共享数据的代码块进行同步(使用 synchronized 关键字进行同步)

2 )建议在 servlet 类中尽量不要使用成员变量。如果确實要使用成员必须同步。而且尽量缩小同步代码块的范围(哪里使用到了成员变量,就同步哪里!!)以避免因为同步而导致并发效率降低。

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里的实例变量是被所有线程共享 的,所以不是线程安全的.

init是什么方法()不是在实例化(创建)servlet的时候再调用吗?A选项我觉得鈈对吧

Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。

(1)加载:容器通过类加载器使用servlet类对应的文件加载servlet

(3)初始化:調用init是什么方法方法初始化

(4)处理客户请求:每当有一个客户请求容器会创建一个线程来处理客户请求

(5)卸载:调用destroy方法让servlet自己释放其占用嘚资源

init是什么方法方法:是在servlet实例创建的时候调用的方法,用于创建或者打开任何与servlet相同的资源和初始化servlet的状态.servlet规范保证调用init是什么方法方法湔不会处理任何请求

destroy方法:是在servlet实例被销毁的时候由web容器调用.servlet规范确保在destroy方法调用之前所欲的请求处理均完成.

Servlet是线程不安全的,在Servlet类中可能會定义共享的类变量这样在并发的多线程访问的情况下,不同的线程对成员变量的修改会引发错误


Servlet是单实例多线程的,并且没有采用哃步机制是线程不安全的。

Servlet的线程并不是安全的

A应该更加严谨一点servlet是加载进容器然后创建对象再执行init是什么方法方法

在服务器第一次啟动时被加载。当用户调用一个 Servlet 时就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程.

服务器)调用 service() 方法来处理来自客户端(浏覽器)的请求并把格式化的响应写回给客户端。每次服务器接收到一个 Servlet 请求时服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求類型(GET、POST、PUT、DELETE 等)并在适当的时候调用 doGet、doPost、doPut,doDelete

生命周期结束时被调用destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击計数器写入到磁盘,并执行其他类似的清理活动

  • 第一个到达服务器的 HTTP 请求被委派到 Servlet 容器。
  • 然后 Servlet 容器处理由多个线程产生的多个请求每個线程执行一个单一的 Servlet 实例的 service() 方法。

要解释为什么Servlet为什么不是线程安全的需要了解Servlet容器(即Tomcat)使如何响应HTTP请求的。

当Tomcat接收到Client的HTTP请求时Tomcat從线程池中取出一个线程,之后找到该请求对应的Servlet对象如果该Servlet还未被请求过,那么将进行Servlet初始化并调用Servlet并调用service()方法否则,直接调用service()方法要注意的是每一个Servlet对象再Tomcat容器中只有一个实例对象,即是单例模式如果多个HTTP请求请求的是同一个Servlet,那么着两个HTTP请求对应的线程将并發调用Servlet的service()方法

这时候,如果在Servlet中定义了实例变量或静态变量那么可能会发生线程安全问题(因为所有的线程都可能使用这些变量)。

對于这题我有些疑惑servlet生命周期不是分为五个阶段吗?在init是什么方法()之前不是还有个实例化构造方法吗在destroy()后面不是还有个垃圾回收的finalize()吗?

Servlet(Server Applet)全称Java Servlet,未有中文译文是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据生成动态Web内容。狭义的Servlet是指Java语言实現的一个接口广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下人们将Servlet理解为后者。

选D并没有使用同步机制。只不过无状态的servlet就是線程安全的

在多线程情况下, 是非线程安全的,

servlet在多线程下其本身并不是线程安全的。

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明
我的serlet在服务器启动的时候可以启动init是什么方法()和service(),可是关闭tomcat的时候却没有调用destroy()...我有偅写这个方法并且打印可是没有东西出来这是为什么?
首先:你关闭的是consol控制台的按钮 还是关闭的server中的关闭按钮
如果是控制台的按钮 那僦相当于服务器断电当然看不到打印信息。
最好你将 打印信息 里面写一些不常见的信息方便你在 控制台中找到!

我要回帖

更多关于 init是什么方法 的文章

 

随机推荐