温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Servlet容器工作原理是什么

发布时间:2021-07-14 15:23:52 来源:亿速云 阅读:169 作者:chen 栏目:编程语言

这篇文章主要介绍“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 接口有五个方法,如下

  1. public void init(ServletConfig config) throws ServletException  

  2. public void service(ServletRequest request, ServletResponse response)
    throws ServletException, java.io.IOException    

  3. public void destroy()    

  4. public ServletConfig getServletConfig()    

  5. 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容器工作原理是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI