站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题Servlet容器工作原理

Servlet容器工作原理

摘要: 本文介绍servlet 容器的基本原理
<iframe src="http://training.yesky.com/ad/iframe/develop_java.htm" frameBorder=0 width=578 scrolling=no height=62></iframe>

  本文介绍servlet 容器的基本原理。现有两个Servlet容器,第一个很简单,第二个则是根据第一个写出。为了使第一个容器尽量简单,所以没有做得很完整。复杂一些的 servlet 容器 (包括 TOMCAT 4 和 5) 可以参考其他资料。

<iframe align=right marginWidth=0 marginHeight=0 src="http://images.chinabyte.com/adjs/iframe-pip/y-software-pip.html" frameBorder=0 width=360 scrolling=no height=300></iframe>  两个servlet容器都处理简单的servlet及staticResource。您可以使用 webroot/ 目录下的 PrimitiveServlet 来测试它。复杂一些的 servlet会超出这些容器的容量,创建复杂servlet容器不是本文的内容,所以在这里就不详细介绍了。

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

  javax.servlet.Servlet 接口

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

  Servlet 接口有五个方法,如下:

<table width="100%" bgColor=#ffffff> <tr> <td> 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() </td></tr></table>
  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

<table width="100%" bgColor=#ffffff> <tr> <td>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;
}
}</td></tr></table>



↑返回目录
前一篇: 用Java动态代理类实现记忆功能
后一篇: WebSphere SAP适配器编程基础