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实例之前,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 对象,并发送字符串到浏览器。
- 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;
- }
- }
现在,我们从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方法。然而,以下动作也被理解成Servlet容器的工作原理被执行:
◆等待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接口的关键方法。 首先,Servlet容器(如Tomcat)的核心职责是管理和调度Servlet实例。当一个HTTP请求到达服务器时,Servlet容器负责解析请求,识别...
在《深入剖析Tomcat》这本书中,作者详细讲解了如何从零开始构建一个简单的Servlet容器,涵盖了上述各个方面的实现原理和技术细节。通过学习这个过程,开发者能更好地理解Servlet容器的工作机制,这对于开发、调试和...
本项目基于《深入剖析Tomcat》一书中的第二章代码,进行了相应修改,旨在帮助开发者更深入地理解和运用Servlet容器。 首先,Servlet是Java平台上的一个标准接口,用于处理HTTP请求。当客户端向服务器发送请求时,...
本文将深入讲解Servlet的工作原理,包括Servlet容器的工作方式、Web工程的启动过程、Servlet的解析与分发,以及Servlet生命周期的管理。 首先,Servlet容器是Servlet执行的平台,它提供了一套标准接口,使得Servlet...
然后,每当有请求到达,Servlet容器会调用`service()`方法,这个方法会根据请求类型选择执行`doGet()`或`doPost()`。最后,当Servlet不再需要或者服务器关闭时,会调用`destroy()`方法,释放Servlet占用的资源。 在...
本教程将深入探讨 Java Servlet 的核心概念、工作原理及其在网络编程中的应用。 一、Java Servlet 基础 1.1 Servlet 定义:Servlet 是 Java 类,遵循 javax.servlet.Servlet 接口,用于接收和响应来自客户端(如...
本教程将深入讲解Servlet的基础概念、工作原理以及高级技术,旨在帮助读者从入门到精通。 1. **Servlet概述** Servlet是Java的一个接口,它定义了Web服务器如何与Web应用程序交互。在JavaEE体系规范中,Servlet和...
接着,韩顺平会深入到Servlet容器(如Tomcat)的工作原理,解释如何调用`init()`方法进行初始化,以及如何管理Servlet实例。 在动态图的帮助下,课程会清晰地展示HTTP请求的流程,包括`doGet()`和`doPost()`方法的...
【描述】本书涵盖了Java Servlet技术的基础知识,包括Servlet生命周期、请求处理、响应生成、会话管理以及Servlet容器的工作原理。此外,它还深入讨论了与EJB(Enterprise JavaBeans)、J2EE(Java 2 Platform, ...
标题中的“将OSGi嵌入Servlet容器”是一个关于在Java Web开发中整合OSGi(Open ...在实际学习或实践中,建议直接查看原文链接获取更具体的信息,同时,可以结合相关书籍和文档深入理解OSGi和Servlet容器的集成技术。
本篇文章将深入讲解Servlet的相关内容,包括其基本概念、生命周期、工作原理以及如何通过实例来理解和应用Servlet。 一、Servlet基本概念 Servlet是Java Servlet API规范定义的一种接口,用于扩展服务器的功能。在...
韩顺平老师的“2011细说Servlet笔记”是针对这一主题的深入讲解,旨在提供全面且实用的学习资料。在本篇中,我们将深入探讨Servlet的相关知识点,包括其原理、配置、生命周期以及与HTTP协议的交互。 1. **Servlet...
韩顺平老师的Servlet笔记是对这一技术的深入讲解,旨在帮助学习者掌握Servlet的使用和概念。以下是对Servlet技术的详细说明: 1. **Servlet简介**:Servlet是Java Servlet API的实现,它提供了一种标准的方式来扩展...
本篇文章将深入讲解Servlet的基本概念、工作原理以及如何使用Servlet API进行开发。 首先,Servlet是一个Java接口,位于javax.servlet.Servlet包中。它定义了服务器与应用程序之间的交互规范。Servlet的主要职责是...
该课程旨在帮助学习者深入理解Java Servlet的概念、原理以及实际运用。 1. **Servlet基础** - Servlet是一种Java类,遵循Java Servlet API规范,由Web服务器加载并执行,用于处理HTTP请求和响应。 - Java Servlet...
初始化时,Servlet容器(如Tomcat)会调用`init()`方法;每次请求时,调用`service()`方法;最后,当Servlet不再使用时,调用`destroy()`方法。 2. **DOJSP与SERVLET比较**:虽然两者都可以处理HTTP请求,但JSP更...
本资料"深入Java Servlet网络编程"旨在深入讲解Servlet API的使用和其他相关应用,对于想要提升Java Web开发技能的学习者来说,是一份宝贵的资源。 首先,Java Servlet API是Java Servlet的基础,它定义了Servlet、...
下面将详细讲解Servlet的基本概念、工作原理以及如何进行实践操作。 一、Servlet基本概念 Servlet是一种Java类,它遵循Servlet API规范,用于扩展服务器的功能。在Web应用中,Servlet主要用于接收和响应来自客户端...
在本文中,我们将深入探讨 Spring Boot 中 Servlet 的启动过程与原理,帮助读者更好地理解 Spring Boot 的工作机制。 启动过程 在 Spring Boot 应用程序中,启动过程是通过 `run` 方法来实现的。该方法主要负责...