`
laorer
  • 浏览: 435641 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

当服务器启动之后,servlet的实例个数

阅读更多

上次面试时,问到了当服务器启动之后,多个用户访问servlet时,如何解决并发问题,当时感觉并发问题好像是由web容器解决的吧,后来问到那会有多少个实例呢?这个没有印象,就说好像是一个吧,他又追问,多个用户请求servlet,容器中只有一个servlet实例吗?又改口了,多个.

后来查了下资料,说法如下

===========================

一般来说servlet是线程安全的,所以每个用户每一次的调用都是独立的
一般由容器解决,但对于类变量,则需要自己控制,数据库访问,就有同步控制
当一个SERVLET被创建并且被装载到内存,它在内存中仅有一个实例,采用多线程去访问这个SERVLET实例

=====================================

还是不是很肯定,所以写了个例子验证了一下,确实只有一个实例,思想是在这个servlet中加一个int 型成员变量,第次访问,成员变量加1,多次访问,如果每次访问的成员变量都是加一的,则说明容器中只有一个servlet实例,反之则有多个实例.代码如下,

java 代码
  1. private int i=0 ;   
  2. private int k ;    
  3. private static int j=0;    
  4.   
  5. ublic void doGet(HttpServletRequest request, HttpServletResponse response)   
  6.         throws ServletException, IOException {   
  7.   
  8.     response.setContentType("text/html");   
  9.     PrintWriter out = response.getWriter();   
  10.     out   
  11.             .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");   
  12.     out.println("<HTML>");   
  13.     out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");   
  14.     out.println("  <BODY>");   
  15.     out.print("    This is ");   
  16.     out.print(this.getClass());   
  17.     out.println(", using the GET method");   
  18.     out.println("------------------");  
  19.     out.println(" private i= " + i++);   
  20.     out.println(" private k= " + k++);       
  21.     out.println(" static j= " + j++);   
  22.     out.println("------------------");   
  23.     out.println("  </BODY>");   
  24.     out.println("</HTML>");   
  25.     out.flush();   
  26.     out.close();   
  27. }   

其余代码都是自动生成的.结果是每次访问,成员变量都加一 .

下面面试时好像都会问到,只初始化一次,记住,

sevlet 生命周期
(1)加载和实例化
(2)初始化(容器调用Servlet的init()方法初始化这个对象init()只能用一次)
(3)请求处理(容器调用Servlet的service()方法对请求进行处理)
(4)服务终止(容器调用Servlet的destroy()方法将servlet实例从容器中移除,释放所有资源)

感觉好多问题都是相关的,但平时没有仔细想想,面试时,又不会有太多的思考机会,哎,愿大家有所收获吧.

分享到:
评论

相关推荐

    JAVA项目服务器启动时自启动指定的Servlet,并定时执行任务

    在这个例子中,我们在`init()`方法中创建了一个`ScheduledExecutorService`实例,并设置了一个定时任务,它将在服务器启动后每小时执行一次。在`destroy()`方法中,我们关闭了`executor`以释放资源。 总结,通过在`...

    一个支持servlet的web服务器.rar

    总之,"一个支持servlet的web服务器.rar"这个压缩包可能包含了一个可运行的Servlet服务器实例或者一个与Servlet相关的项目。如果你打算学习或使用Servlet,你需要了解Servlet的基本概念、生命周期、API以及如何在...

    java web servlet实例

    当服务器启动或第一次接收到对Servlet的请求时,Servlet被加载并初始化。然后,每次有新的请求到来,Servlet都会调用`service()`方法来处理。当服务器关闭或不再需要Servlet时,会执行销毁方法。 2. **Servlet配置*...

    深入学习:Java Servlet开发与实例

    在服务器启动时或首次接收到请求时,Servlet会被加载和初始化。然后,每当有请求到达,Servlet会处理该请求并返回响应。最后,当服务器关闭或者Servlet不再需要时,Servlet会被销毁。 2. **Servlet配置**:在`web....

    javaee Servlet实例 含源码

    JavaEE Servlet实例是一个...通过深入研究这个Servlet实例,开发者不仅可以掌握Servlet的基本用法,还能了解到如何在实际项目中组织和管理代码。同时,这也是进一步学习JavaEE框架如Spring MVC、Struts或JSF的基础。

    tomcat启动服务运行servlet

    4. 销毁:当Servlet不再需要时,Tomcat会调用`destroy()`方法释放资源,然后销毁Servlet实例。 在描述中提到的“博文链接:https://hbiao68.iteye.com/blog/1570415”可能提供了一个具体的示例或问题解决方案,但...

    servlet及MVC学习实例

    Servlet生命周期包括加载、初始化、服务、销毁四个阶段,它们在服务器启动、首次请求或配置改变时触发。Servlet通过`service()`方法接收客户端请求,然后根据请求类型调用`doGet()`或`doPost()`等方法进行处理。此外...

    servlet实例代码,不得不看

    当服务器启动或第一次接收到对Servlet的请求时,Servlet容器(如Tomcat)会加载并初始化Servlet。初始化过程通常涉及配置信息的读取,如在web.xml中定义的初始化参数。Servlet在服务完成后,如果服务器关闭或手动...

    说一说servlet的生命周期

    当服务器启动或者用户首次发起对Servlet的请求时,如果服务器中还没有Servlet的实例,容器(例如Tomcat)会根据`web.xml`配置文件或Java注解找到对应的Servlet类,并加载这个类。加载后,服务器将创建Servlet的一个...

    servlet是如何同时处理多个请求的

    当Web应用启动时,Servlet容器会根据web.xml配置或者基于注解的配置创建Servlet实例。对于高并发场景,为了提高性能和资源利用率,Servlet容器通常会采用线程池来处理请求,而不是为每个请求创建一个新的Servlet实例...

    基于Java的实例源码-一个支持servlet的web服务器.zip

    1. **服务器启动与配置**:源码可能包含一个主类,负责启动服务器,并配置监听端口、根目录等设置。这通常涉及到Java的ServerSocket或Socket编程。 2. **HTTP协议解析**:服务器需要解析接收到的HTTP请求,包括请求...

    Servlet实例

    - **加载与实例化**:当服务器启动或首次接收到对Servlet的请求时,会加载Servlet类并创建其单个实例。 - **初始化**:创建实例后,调用`init()`方法进行初始化。在这里,可以设置Servlet的初始配置。 - **服务**...

    servlet简单实例

    通过这个简单的Servlet实例,你已经掌握了创建和运行Servlet的基础知识。随着进一步的学习,你可以利用Servlet处理更复杂的任务,如会话管理、文件上传、数据库操作等。继续深入研究Servlet API和其他相关技术,如...

    Java Servlet开发与实例

    当服务器启动或第一次接收到对Servlet的请求时,Servlet容器会加载并实例化Servlet。接着,调用`init()`方法进行初始化,通常在这里设置配置参数。在处理客户端请求时,服务器会调用`service()`方法。最后,当服务器...

    servlet程序小实例

    当服务器启动或第一次接收到对Servlet的请求时,Servlet会被加载和初始化。初始化通常在`init()`方法中完成,这里可以进行配置文件读取、数据库连接等初始化操作。然后,每当有请求到达,`service()`方法会被调用,...

    使用servlet的一些实例

    1. **加载与实例化**:当服务器启动或第一次接收到对Servlet的请求时,会加载Servlet类并创建其单个实例。 2. **初始化**:创建实例后,服务器调用`init()`方法进行初始化,通常用于配置Servlet。 3. **服务**:每当...

    HTTP1.1 服务器端及servlet引擎 java实现

    服务器启动后,创建一个ServerSocket监听指定端口,等待客户端的连接。当接收到请求时,通过Socket读取请求数据,解析出HTTP报文的各个部分,如方法(GET、POST等)、URL、状态码、头部信息和可能的请求体。 ...

    手工编写Servlet的详细过程+实例

    当服务器启动或第一次接收到对Servlet的请求时,会加载Servlet类并创建其实例。这是通过Servlet容器(如Tomcat)来完成的,容器使用Java的`Class.forName()`方法加载Servlet类,并通过`newInstance()`创建对象。 2...

    Ext3写的一个用servlet的例子

    为了在服务器上运行Servlet,我们需要一个Web容器,如Tomcat或Jetty,这些容器能加载并管理Servlet实例。 对于这个例子,我们可以推测它可能包含以下步骤: 1. **创建Servlet**:首先,开发者会编写一个Java类,...

    3 Servlet编程范例(1)

    Servlet的基本运行方式如下:当第一个HTTP请求到达时,Servlet容器创建Servlet实例,并启动一个线程来处理请求。后续的请求,Servlet容器会重用已有的Servlet实例,为每个请求启动新的线程,这样可以避免频繁的实例...

Global site tag (gtag.js) - Google Analytics