英语原文共 12 页,剩余内容已隐藏,支付完成后下载完整资料
Java Servlet
在本章中,解释了Servlet的概念,而不是整个Servlet规范;这是对Servlet规范的介绍,严格地从Servlet开始。。有时,这一章的内容可能会显得枯燥乏味,甚至会让人想起实际的规范。虽然人们总是试图使这些资料活跃起来,但是,Servlet开发现在需要呈现几个相关但枯燥的方面。一定要试着直接读完整个章节,但也要记住,你总是可以在需要的时候参考这一章。本章将讨论以下主题:
bull;解释什么是Servlet以及为什么要使用他们
bull;Servlet的生命周期——即容器如何管理Servlet。
bull;构建可在万维网上使用的服务集,其中包括对HTTP协议的回顾。
bull;使用web.xml配置Servlet。
bull;同时对文本生成和非文本生成的servlet进行编码。
bull;处理HTML表单和文件上传。
bull;请求分派-servlet到servlet通信和包含或转发到Web应用程序中的其他资源。
bull;应用程序上下文,并通过Servlet与容器通信。
bull;Servlet事件监听器。。
什么是Servlet,为什么你会想要使用它们
JavaServlet是为Web创建动态内容的一个高效而强大的解决方案。在过去的几年里,Servlet已经成为主流服务器端Java的基本构建块。Servlet背后的强大功能来自于Java作为平台的使用以及与Servlet容器的交互。Java平台为Servlet开发人员提供了一个健壮的API、面向对象的专业语法、平台中立性、严格的类型、垃圾收集以及JVM的所有安全特性。为了补充这一点,Servlet容器提供了生命周期管理、共享和管理应用程序范围内的资源的单个流程,以及与Web服务器的交互。这些功能使Servlet成为服务器端Java开发人员的理想技术。
JavaServlet目前处于2.4版本中,是Java2企业版(J2EE)的一部分。J2SE的下载不包括ServletAPI,但官方的ServletAPI可以在Sun微系统公司的Servlet产品页面上找到,http://java.sun.com/products/servlets,或与Java2企业版捆绑使用。ServletAPI的开发是通过Java社区流程完成的,http://www.jcp.org,但是ServletAPI的官方参考实现是开源的,可以通过Tomcat项目进行公共访问。
Servlet2.4API包括了许多由Servlet2.4规范正式定义的特性,http://java.sun.com/products/servlets,并且可以分解如下。
Web应用
servlet总是一个被称为Web应用程序的大型项目的一部分。Web应用程序是一个网站的资源的完整集合。没有什么能阻止Web应用程序由零、一个或多个Servlet组成,但是Servlet容器在每个Web应用程序的基础上管理Servlet。Web应用程序和它们的配置文件由Servlet规范指定。
Servlet和HTTPServlet
Servlet规范的主要目的是定义一种健壮的机制,用于向客户机/服务器模型定义的客户机发送内容。servlet最常用来生成Web上的动态内容,并且具有对HTTP的本机支持。
过滤器
过滤器已在Servlet2.3规范中正式引入。过滤器提供了一种抽象的方法,用于在客户端实际到达请求端点之前操作客户端请求和/或响应。过滤器极大地补充了servlet,通常用于身份验证、内容压缩和日志记录等方面。
安全
Servlet已经使用了Java虚拟机提供的安全特性,但是Servlet规范还定义了一种机制,用于控制对Web应用程序中的资源的访问。
国际化
Servlet最好的特性之一是能够为几乎任何语言开发内容。该功能的很大一部分直接来自于Java平台对国际化和本地化的支持。ServletAPI保留了这个功能,并且可以很容易地用于在大多数现有语言中创建内容。
本章的重点是介绍Servlet,并解释如何使用HTTPServlet在Web上创建动态内容。为简单起见,本章重点介绍servlet的基础知识,并留下更复杂但更实用的例子,以便在后面的相关章节中讨论。过滤器、安全性和真正的国际化问题都将在后面的章节中讨论,因为它们都与Servlet和JSP有关。
Servlet生命周期
理解servlet的底层功能的关键是理解它们所遵循的简单生命周期。这个生命周期管理着Servlet中运行的多线程环境,并为开发人员共享服务器端资源提供了一些可用的机制。理解Servlet的生命周期也是这本书下降到一个较低层次的开始,本书的大部分内容都遵循这一点。函数代码示例经常用来说明一个想法或观点。我们鼓励编译和运行这些示例来充分理解概念,并熟悉后面章节中的Servlet。
Servlet的生命周期(见图2-1)
Initialization
(Load Resources)
Service
(Accept Requests)
Destruction
(Unload Resources)
图2-1Servlet生命周期示意图
是Servlet和JSP的性能都优于传统CGI的主要原因。与一次性CGI生命周期相反,servlet遵循三个阶段的生命周期:初始化、服务和销毁,初始化和销毁通常执行一次,服务执行多次。
初始化是Servlet生命周期的第一阶段,它表示Servlet为服务请求可能需要资源的创建和初始化。所有的servlet都必须实现javax.servlet.Servlet接口。此接口定义了init()方法,以匹配Servlet生命周期的初始化阶段。当容器加载Servlet时,它会在处理任何请求之前调用init()方法。
Servlet生命周期的服务阶段表示Servlet被销毁之前与请求的所有交互。Servlet接口将Servlet生命周期的服务阶段与service()方法相匹配。Servlet的service()方法将为每个请求调用一次,并负责生成对该请求的响应。Servlet规范定义了service()方法来接受两个参数:javax. servlet . ServletRequest和javax.servlet.ServletResponse对象。这两个对象表示客户机对动态资源的请求和Servlet对客户机的响应。默认情况下,Servlet是多线程的,这意味着在任何给定的时间内,JSP容器通常只加载Servlet的一个实例。初始化只完成一次,之后的每个请求都由执行Servlet的service()方法的线程并发处理。
Servlet生命周期的销毁阶段表示将Servlet从容器中移除。Servlet接口定义了与销毁生命周期阶段相对应的destroy() 方法。每当一个Servlet即将被从使用中移除时,一个容器就会调用destroy() 方法,允许Servlet优雅地终止并整理它可能创建的任何资源。通过正确使用Servlet生命周期的初始化、服务和销毁阶段,Servlet可以有效地管理应用程序资源。在初始化过程中,Servlet加载它需要用于服务请求的所有内容。这些资源在服务阶段很容易使用,然后在销毁阶段进行清理。
这三个事件构成了Servlet的生命周期,但在实践中,Web开发人员需要考虑更多的方法。Web上的内容主要是通过超文本传输协议(HTTP)进行访问的。一个基本的Servlet对HTTP一无所知,但是有一个特殊的Servlet实现,javax.servlet.http.HttpServlet。这是专门为它设计的。
用于万维网的servlet
当提到Servlet一词时,它几乎总是暗示着Servlet是HttpServlet的一个实例。对这个问题的解释很简单。超文本传输协议(HTTP)用于万维网上的绝大多数事务——您访问的每个Web页面都使用HTTP传输,因此使用Http://前缀。这并不是说HTTP是有史以来最好的协议,但HTTP确实能够使用,而且HTTP已经被广泛使用了。对HTTP事务的Servlet支持以javax.servlet.http.HttpServlet类的形式出现。
在展示一个HttpServlet的示例之前,重申一下超文本传输协议的基础知识是很有帮助的。许多开发人员并没有完全理解HTTP,而这对于完全理解HttpServlet是至关重要的。HTTP是一个简单的、无状态的协议。该协议依赖于客户端,通常是Web浏览器来发出请求,依赖服务器来发送响应。连接的持续时间只够处理一个事务。一个事务可以是一个或多个请求/响应对。例如,浏览器将发送一个HTML页面的请求,然后对该页面上的每个图像发送多个请求。请求和响应将在同一连接上完成。然后,该连接将在最后一个响应结束时被关闭。整个过程相对简单,每次浏览器从HTTP服务器请求资源时都会发生
请求、响应和头信息
HTTP事务的第一部分是当HTTP客户端创建并向服务器发送请求时。一个最简单形式的HTTP请求只不过是一条指定客户端想要检索的资源的文本。文本行分为三个部分:客户机想要做的操作类型或方法;客户机希望访问的资源;以及正在使用的HTTP协议的版本。例如:GET /index.html HTTP/1.0
前面的请求是一个完全有效的HTTP请求。第一个单词GET是由HTTP定义的方法,用来请求服务器提供特定的资源;/index.html是从服务器请求的资源;HTTP/1.0是正在使用的HTTP版本。当任何使用HTTP的设备都希望从服务器获取资源时,它将使用类似于上面这行的内容。试试连接Tomcat。在80端口上打开一个与本地计算机相连的telnet会话。根据命令提示符,这通常通过以下方式完成:telnet 127.0.0.1 80
应该会出现一些类似于图2-2的东西。
telnet程序刚刚打开了与Tomcat的Web服务器的连接。Tomcat理解HTTP,因此输入示例HTTP语句。此HTTP请求可以通过空白行终止,所以第二次按Enter以放置一个额外的空行并完成请求。
GET /jspbook/index.html HTTP/1.0
index.html的内容从/jspbook映射到Web应用程序(我们上一章开始的应用程序),如图2-3所示。
图2-2Telnet到本地主机:80
图2-3手动HTTP请求和服务器的响应
您只发送了一个基本的HTTP请求,并且Tomcat返回了一个HTTP响应。虽然通常是在幕
后完成的,但所有的HTTP请求都与前面的类似。伴随GET还有一些方法,但在讨论这些之前,让我们仔细看看Tomcat寄回了什么。
Tomcat首先返回的是一行文字:
HTTP/1.1 200 OK
这是一个HTTP状态行。每个HTTP响应都以一个状态行开始。状态行由HTTP版本、状态代码和原因短语组成。HTTP响应代码200意味着一切都很好;这就是为什么Tomcat在响应中包含了所请求的内容。如果请求出现某些问题,则会使用不同的响应代码。您可能熟悉的另一个HTTP响应代码是404“文件未找到”代码。如果您曾经跟踪过一个断开的超链接,那么这很可能是返回的代码。
HTTP响应代码
在实践中,您通常不需要理解所有特定的HTTP响应代码。JSP、Servlet和Web服务器通常会自动处理这些代码,但没有什么能阻止您发送特定的HTTP响应代码。稍后我们将看到同时使用Servlet和JSP执行此操作的例子。完整的HTTP规范提供了HTTP响应代码列表以及其他HTTP信息,http://www.ietf.org/rfc/ rfc2616.txt.
除了HTTP响应代码外,Tomcat还在index.html的内容之前发送了几行信息,如图2-4所示。
所有这些行都是HTTP头信息。HTTP使用头信息来发送带有请求或响应的元信息。头信息是一个冒号分隔的名称:值对——也就是说,它包含头信息的名称,由冒号和头信息的值分隔。典型的响应标头包括内容类型描述、内容长度、时间戳、服务器信息和上次更改内容的日期。这些信息可以帮助客户机找出正在发送的内容,它有多大,以及数据是否比以前看到的响应更新。HTTP请求总是包含一些头信息。公共请求头信息包括用户代理详细信息和首选格式、语言和要接收的内容编码。这些头信息帮助告诉服务器客户端是什么以及它们希望如何获取信息。理解HTTP头信息很重要,但是现在请暂停这个概念,直到您了解更多关于servlet的知识。HTTP头信息提供了一些非常有用的功能,但是最好用一些HttpServlet示例进一步解释它们。
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[603274],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。