`

[转] Servlet容器工作原理讲解(1)

阅读更多

Servlet容器工作原理讲解

本文介绍一个简单 servlet 容器的基本原理。
Servlet容器工作原理 讲解本文介绍一个简单 servlet 容器的基本原理。现有两个servlet容器,第一个很简单,第二个则是根据第一个写出。为了使第一个容器尽量简 单,所以没有做得很完整。复杂一些的 servlet容器(包括TOMCAT4和5)在TOMCAT运行内幕的其他章节有介绍。 

两个 servlet容器都处理简单的 servlet及staticResource。您可以使用 webroot/ 目录下的  PrimitiveServlet 来测试它。复杂一些的 servlet会超出这些容器的容量,您可以从 TOMCAT 运行内幕 一书学习创建复杂 的 servlet 容器。 

两个应用程序的类都封装在ex02.pyrmont 包下。在理解应用程序如何运作之前,您必须熟悉 javax.servlet.Servlet 接口。首先就来介绍这个接口。随后,就介绍servlet容器服务servlet的具体内容。 

javax.servlet.Servlet 接口 

servlet  编程,需要引用以下两个类和接口:javax.servlet 和 javax.servlet.http,在这些类和接口中, javax.servlet.Servlet接口尤为重要。所有的 servlet 必须实现这个接口或继承已实现这个接口的类。 

Servlet 接口有五个方法,如下 

public void init(ServletConfig config) throws ServletException
public void service(ServletRequest request, ServletResponse response)throws ServletException, java.io.IOException  
public void destroy()  
public ServletConfig getServletConfig()  
public java.lang.String getServletInfo()


init、  service和 destroy 方法是 Servlet 生命周期的方法。当 Servlet 类实例化后,容器加载 init,以通知  servlet 它已进入服务行列。init 方法必须被加载,Servelt 才能接收和请求。如果要载入数据库驱动程序、初始化一些值等等,程序员 可以重写这个方法。在其他情况下,这个方法一般为空。 

service 方法由 Servlet 容器调用,以允许 Servlet 响 应一个请求。Servlet 容器传递 javax.servlet.ServletRequest 对象和  javax.servlet.ServletResponse 对象。ServletRequest 对象包含客户端 HTTP 请求信息, ServletResponse 则封装servlet 响应。这两个对象,您可以写一些需要 servlet 怎样服务和客户怎样请求的代码。 

从service 中删除Servlet实例之前,容器调用destroy方法。在servlet容器关闭或servlet容器需要更多的内存时,就调用它。这个方法只有在 servlet的 service方法内的所有线程都退出的时候,或在超时的时候才会被调用。在 servlet 容器调用 destroy方法之后,它 将不再调用servlet的service方法。destroy 方法给了 servlet 机会,来清除所有候住的资源(比如:内存,文件处理和线 程),以确保在内存中所有的持续状态和 servlet的当前状态是同步的。Listing 2.1 包含了PrimitiveServlet 的代码, 此servlet非常简单,您 可以用它来测试本文中的servlet容器应用程序。 

PrimitiveServlet 类实现了 javax.servlet.Servlet 并提供了五个servlet方法的接口 。它做的事情也很简单:每次调用 init,service 或  destroy方法的时候,servlet就向控制口写入方法名。service 方法也从ServletResponsec对象中获得 java.io.PrintWriter 对象,并发送字符串到浏览器。 

Listing 2.1.PrimitiveServlet.java
import javax.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;
public class PrimitiveServlet implements Servlet { 
public void init(ServletConfig config) throws ServletException {
   System.out.println("init");
    } 
public void service(ServletRequest request, ServletResponse  response) throws ServletException, IOException {
      System.out.println("from service");
      PrintWriter out = response.getWriter();
      out.println("Hello.Roses are red.");
      out.print("Violets are blue.");
    } 
public void destroy() {
    System.out.println("destroy");
    }
public String getServletInfo() {
   return null;    
    } 
public ServletConfig getServletConfig() {
    return null;
    }
}

 
Application 1 

现在,我们从 servlet容器的角度来看看 servlet 编程。一个功能健全的 servlet容器对于每个 servlet 的HTTP请求会完成以下事情: 
当servlet 第一次被调用的时候,加载了 servlet类并调用它的init方法(仅调用一次) 
响应每次请求的时候 ,构建一个javax.servlet.ServletRequest 和 javax.servlet.ServletResponse实例。 
激活servlet的service方法,传递 ServletRequest 和 ServletResponse 对象。 
当servlet类关闭的时候,调用servlet的destroy方法,并卸载servlet类。 
发生在 servlet 容器内部的事就复杂多了。只是这个简单的servlet容器的功能不很健全,所以,这它只能运行非常简单的servelt ,并不能调用servlet的init和destroy方法。然而,它也执行了以下动作: 
等待HTTP请求。 
构建ServletRequest和ServletResponse对象 
如果请求的是一个staticResource,就会激活StaticResourceProcessor实例的 process方法,传递ServletRequest 和 ServletResponse 对象。 

如果请求的是一个servlet ,载入该类,并激活它的service方法,传递ServletRequest和ServletResponse 对象。注意:在这个servlet 容器,每当 servlet被请求的时候该类就被载入。 

在第一个应用程序中,servlet容器由六个类组成 。 

HttpServer1 
Request 
Response 
StaticResourceProcessor 
ServletProcessor1 
Constants 


证 如前文中的应用程序一样,这个程序的进入口(静态 main 方法)是HttpServer 类。这个方法创建了HttpServer实例,并调用它的 await方法。这个方法等待 HTTP 请示,然后创建一个 request 对象和 response对象,根据请求是否是 staticResource还是 servlet 来分派它们到 StaticResourceProcessor实例或 ServletProcessor实例。 

Constants 类包含 static find WEB_ROOT,它是从其他类引用的。 WEB_ROOT 指明 PrimitiveServlet 位置 和容器服务的staticResource。 
HttpServer1 实例等待 HTTP 请求,直到它收到一个 shutdown 命令。发布 shutdown命令和前文是一样的。

分享到:
评论

相关推荐

    Servlet容器工作原理讲解

    在这个讲解中,我们将深入探讨Servlet容器的工作原理以及Servlet接口的关键方法。 首先,Servlet容器(如Tomcat)的核心职责是管理和调度Servlet实例。当一个HTTP请求到达服务器时,Servlet容器负责解析请求,识别...

    一个简单的servlet容器

    在《深入剖析Tomcat》这本书中,作者详细讲解了如何从零开始构建一个简单的Servlet容器,涵盖了上述各个方面的实现原理和技术细节。通过学习这个过程,开发者能更好地理解Servlet容器的工作机制,这对于开发、调试和...

    简单的Servlet容器

    Servlet容器,如Tomcat,是Java Web应用程序的核心组成部分,它为Servlet提供运行环境。Tomcat是一个开源、轻量级的Servlet容器,由Apache软件基金会维护。本项目基于《深入剖析Tomcat》一书中的第二章代码,进行了...

    servlet教程ppt讲解

    然后,每当有请求到达,Servlet容器会调用`service()`方法,这个方法会根据请求类型选择执行`doGet()`或`doPost()`。最后,当Servlet不再需要或者服务器关闭时,会调用`destroy()`方法,释放Servlet占用的资源。 在...

    servlet 原理

    本文将深入讲解Servlet的工作原理,包括Servlet容器的工作方式、Web工程的启动过程、Servlet的解析与分发,以及Servlet生命周期的管理。 首先,Servlet容器是Servlet执行的平台,它提供了一套标准接口,使得Servlet...

    JSP+Servlet讲解MVC实现原理(改良版)

    2. 服务器上的Servlet容器接收到请求,根据URL映射找到对应的Servlet。 3. Servlet实例化并调用其`service()`方法来处理请求。在这个过程中,Servlet可以执行业务逻辑,例如从数据库获取数据。 4. Servlet将处理后的...

    Java Servlet详细讲解

    当Web容器启动或者接收到客户端请求时,容器会加载并实例化Servlet。在初始化阶段,Servlet可以通过ServletConfig对象获取容器中的配置信息,例如数据库连接设置。接着,Servlet进入处理请求的阶段,每个请求都会由...

    servlet重点讲解

    ### servlet重点讲解 #### 一、B/S与C/S架构的区别及优缺点 - **B/S(Browser/Server)架构**: ...综上所述,Servlet是Java Web开发的核心技术之一,理解其工作原理和使用方法对于构建高性能的Web应用程序至关重要。

    韩顺平细说Servlet源代码

    接着,韩顺平会深入到Servlet容器(如Tomcat)的工作原理,解释如何调用`init()`方法进行初始化,以及如何管理Servlet实例。 在动态图的帮助下,课程会清晰地展示HTTP请求的流程,包括`doGet()`和`doPost()`方法的...

    To embed OSGi in servlet container

    5. **创建和部署OSGi bundle**:讲解如何将现有的Java项目打包成OSGi bundle,并在Servlet容器中部署和管理这些bundle。 6. **示例应用**:提供一个简单的示例,展示如何在OSGi环境中创建一个Servlet并将其注册到...

    servlet的原理

    2. **初始化**:Servlet容器调用`init()`方法进行初始化工作,通常在此方法中设置配置参数等。 3. **服务请求**:当客户端发送请求时,Servlet容器调用`service()`方法来处理请求。根据请求类型(GET或POST),可能...

    Servlet框架基本源码

    以下将详细讲解Servlet框架的基本源码及其工作原理。 1. **Servlet的生命周期** Servlet的生命周期包括加载、初始化、服务、销毁四个阶段。在Web应用启动时,Servlet容器(如Tomcat)会根据web.xml配置文件加载...

    servlet 相关内容

    本篇文章将深入讲解Servlet的相关内容,包括其基本概念、生命周期、工作原理以及如何通过实例来理解和应用Servlet。 一、Servlet基本概念 Servlet是Java Servlet API规范定义的一种接口,用于扩展服务器的功能。在...

    达内 tts java_servlet课件 pdf 高清晰

    - Servlet是在Servlet容器(如Tomcat、Jetty等)中运行的,容器负责管理Servlet的生命周期,并处理与客户端的交互。 3. **Servlet配置** - 在`web.xml`部署描述符中配置Servlet,包括定义Servlet类、映射URL、...

    head first servlet&JSP讲解课件java-web

    JSP的执行过程涉及编译成Servlet,然后由Servlet容器运行。 学习JSP时,应了解JSP的生命周期,包括翻译、编译、初始化、服务和销毁。JSP的内置对象(如request、response、session、pageContext等)和EL...

    Servlet与JSP核心编程第1卷&第2卷的源码

    3. **Servlet容器**:解释Tomcat、Jetty等Servlet容器的工作原理,以及如何部署和运行Servlet应用。 4. **JSP基础**:讲解JSP语法,如何在页面中嵌入Java表达式、脚本元素和指令,以及JSP转换为Servlet的过程。 5....

    servlet 心的练习

    下面将详细讲解Servlet的基本概念、工作原理以及如何进行实践操作。 一、Servlet基本概念 Servlet是一种Java类,它遵循Servlet API规范,用于扩展服务器的功能。在Web应用中,Servlet主要用于接收和响应来自客户端...

    韩顺平 2011细说Servlet笔记

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

    最简单和最核心的servlet

    1. 当客户端发送一个HTTP请求到服务器时,服务器会通过Servlet容器(如Tomcat、Jetty)来查找对应的Servlet实例。 2. 如果Servlet尚未被实例化,容器会加载Servlet类并创建一个Servlet实例。 3. 容器调用Servlet的`...

Global site tag (gtag.js) - Google Analytics