收藏 分享(赏)

Java Servlet和JSP教程(DOC 141页).doc

上传人:gnk289057 文档编号:6810293 上传时间:2019-04-23 格式:DOC 页数:159 大小:322.50KB
下载 相关 举报
Java Servlet和JSP教程(DOC 141页).doc_第1页
第1页 / 共159页
Java Servlet和JSP教程(DOC 141页).doc_第2页
第2页 / 共159页
Java Servlet和JSP教程(DOC 141页).doc_第3页
第3页 / 共159页
Java Servlet和JSP教程(DOC 141页).doc_第4页
第4页 / 共159页
Java Servlet和JSP教程(DOC 141页).doc_第5页
第5页 / 共159页
点击查看更多>>
资源描述

1、Java Servlet 和 JSP 教程1 概述 1.1 Java Servlet 及其特点 Servlet 是 Java 技术对 CGI 编程的回答。Servlet 程序在服务器端运行,动态地生成 Web 页面。与传统的 CGI 和许多其他类似 CGI 的技术相比,Java Servlet 具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资(更重要的是, Servlet 程序员收入要比 Perl 程序员高:-): 高效 在传统的 CGI 中,每个请求都要启动一个新的进程,如果CGI 程序本身的执行时间较短,启动进程所需要的开销很可能反而超过实际执行时间。而在 Servl

2、et 中,每个请求由一个轻量级的 Java 线程处理(而不是重量级的操作系统进程) 。 在传统 CGI 中,如果有 N 个并发的对同一 CGI 程序的请求,则该 CGI 程序的代码在内存中重复装载了 N 次;而对于Servlet,处理请求的是 N 个线程,只需要一份 Servlet 类代码。在性能优化方面,Servlet 也比 CGI 有着更多的选择,比如缓冲以前的计算结果,保持数据库连接的活动,等等。 方便 Servlet 提供了大量的实用工具例程,例如自动地解析和解码 HTML 表单数据、读取和设置 HTTP 头、处理 Cookie、跟踪会话状态等。 功能强大 在 Servlet 中,许多

3、使用传统 CGI 程序很难完成的任务都可以轻松地完成。例如,Servlet 能够直接和 Web 服务器交互,而普通的 CGI 程序不能。Servlet 还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。 可移植性好 Servlet 用 Java 编写,Servlet API 具有完善的标准。因此,为 I-Planet Enterprise Server 写的 Servlet 无需任何实质上的改动即可移植到 Apache、Microsoft IIS 或者 WebStar?负跛?有的主流服务器都直接或通过插件支持 Servlet。 节省投资 不仅有许多廉价甚至免费的 Web 服务

4、器可供个人或小规模网站使用,而且对于现有的服务器,如果它不支持 Servlet 的话,要加上这部分功能也往往是免费的(或只需要极少的投资) 。1.2 JSP 及其特点 JavaServer Pages(JSP)是一种实现普通静态 HTML 和动态 HTML 混合编码的技术,有关 JSP 基础概念的说明请参见JSP 技术简介 。 许多由 CGI 程序生成的页面大部分仍旧是静态 HTML,动态内容只在页面中有限的几个部分出现。但是包括 Servlet 在内的大多数 CGI 技术及其变种,总是通过程序生成整个页面。JSP 使得我们可以分别创建这两个部分。例如,下面就是一个简单的 JSP 页面: 欢迎

5、访问网上商店 欢迎 欢迎, 要设置帐号信息,请点击 这里 页面的其余内容. 下面是 JSP 和其他类似或相关技术的一个简单比较: JSP 和 Active Server Pages(ASP)相比 Microsoft 的 ASP 是一种和 JSP 类似的技术。JSP 和 ASP 相比具有两方面的优点。首先,动态部分用 Java 编写,而不是VB Script 或其他 Microsoft 语言,不仅功能更强大而且更易于使用。第二,JSP 应用可以移植到其他操作系统和非Microsoft 的 Web 服务器上。 JSP 和纯 Servlet 相比 JSP 并没有增加任何本质上不能用 Servlet

6、实现的功能。但是,在 JSP 中编写静态 HTML 更加方便,不必再用 println语句来输出每一行 HTML 代码。更重要的是,借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开:比如,由页面设计专家进行 HTML 设计,同时留出供 Servlet 程序员插入动态内容的空间。 JSP 和服务器端包含(Server-Side Include,SSI)相比SSI 是一种受到广泛支持的在静态 HTML 中引入外部代码的技术。JSP 在这方面的支持更为完善,因为它可以用 Servlet而不是独立的程序来生成动态内容。另外,SSI 实际上只用于简单的包含,而不是面向那些能够处理表单数据、访

7、问数据库的“真正的”程序。 JSP 和 JavaScript 相比 JavaScript 能够在客户端动态地生成 HTML。虽然JavaScript 很有用,但它只能处理以客户端环境为基础的动态信息。除了 Cookie 之外,HTTP 状态和表单提交数据对JavaScript 来说都是不可用的。另外,由于是在客户端运行,JavaScript 不能访问服务器端资源,比如数据库、目录信息等等。 2 安装 2.1 安装 Servlet 和 JSP 开发工具 要学习 Servlet 和 JSP 开发,首先你必须准备一个符合Java Servlet 2.1/2.2 和 JavaServer Pages1

8、.0/1.1 规范的开发环境。Sun 提供免费的JavaServer Web Development Kit(JSWDK) ,可以从http:/ 安装好 JSWDK 之后,你还要告诉 javac,在编译文件的时候到哪里去寻找 Servlet 和 JSP 类。JSWDK 安装指南对此有详细说明,但主要就是把 servlet.jar 和 jsp.jar 加入CLASSPATH。CLASSPATH 是一个指示 Java 如何寻找类文件的环境变量,如果不设置 CLASSPATH,Java 在当前目录和标准系统库中寻找类;如果你自己设置了 CLASSPATH,不要忘记包含当前目录(即在 CLASSPAT

9、H 中包含“.” ) 。 另外,为了避免和其他开发者安装到同一 Web 服务器上的Servlet 产生命名冲突,最好把自己的 Servlet 放入包里面。此时,把包层次结构中的顶级目录也加入 CLASSPATH 会带来不少方便。请参见下文具体说明。 2.2 安装支持 Servlet 的 Web 服务器 除了开发工具之外,你还要安装一个支持 Java Servlet的 Web 服务器,或者在现有的 Web 服务器上安装 Servlet 软件包。如果你使用的是最新的 Web 服务器或应用服务器,很可能它已经有了所有必需的软件。请查看 Web 服务器的文档,或访问 http:/ 查看支持 Servl

10、et 的服务器软件清单。 虽然最终运行 Servlet 的往往是商业级的服务器,但是开始学习的时候,用一个能够在台式机上运行的免费系统进行开发和测试也足够了。下面是几种当前最受欢迎的产品。 Apache Tomcat. Tomcat 是 Servlet 2.2 和 JSP 1.1 规范的官方参考实现。Tomcat 既可以单独作为小型 Servlet、JSP 测试服务器,也可以集成到 Apache Web 服务器。直到 2000 年早期,Tomcat 还是唯一的支持 Servlet 2.2 和 JSP 1.1 规范的服务器,但已经有许多其它服务器宣布提供这方面的支持。 Tomcat 和 Apac

11、he 一样是免费的。不过,快速、稳定的Apache 服务器安装和配置起来有点麻烦,Tomcat 也有同样的缺点。和其他商业级 Servlet 引擎相比,配置 Tomcat 的工作量显然要多一点?咛迩氩渭?http:/jakarta.apache.org/。 JavaServer Web Development Kit (JSWDK). JSWDK 是 Servlet 2.1 和 JSP 1.0 的官方参考实现。把Servlet 和 JSP 应用部署到正式运行它们的服务器之前,JSWDK可以单独作为小型的 Servlet、JSP 测试服务器。JSWDK 也是免费的,而且具有很好的稳定性,但它的安

12、装和配置也较为复杂?咛迩氩渭?http:/ Allaire JRun. JRun 是一个 Servlet 和 JSP 引擎,它可以集成到Netscape Enterprise 或FastTrack Server、IIS、Microsoft Personal Web Server、版本较低的 Apache、Oeilly 的 WebSite 或者StarNine Web STAR。最多支持 5 个并发连接的限制版本是免费的,商业版本中不存在这个限制,而且增加了远程管理控制台之类的功能?咛迩氩渭?http:/ New Atlanta 的 ServletExec ServletExec 是一个快速的

13、Servlet 和 JSP 引擎,它可以集成到大多数流行的 Web 服务器,支持平台包括Solaris、Windows、MacOS、HP-UX 和 Linux。ServletExec 可以免费下载和使用,但许多高级功能和管理工具只有在购买了许可之后才可以使用。New Atlanta 还提供一个免费的 Servlet调试器,该调试器可以在许多流行的 Java IDE 下工作?咛迩氩渭?http:/ Gefion 的 LiteWebServer (LWS) LWS 是一个支持 Servlet 2.2 和 JSP 1.1 的免费小型 Web服务器。 Gefion 还有一个免费的 WAICoolRun

14、ner 插件,利用该插件可以为 Netscape FastTrack 和 Enterprise Server 增加Servlet 2.2 和 JSP 1.1 支持?咛迩氩渭?http:/ Sun 的 Java Web Server. 该服务器全部用 Java 写成,而且是首先提供 Servlet 2.1和 JSP 1.0 规范完整支持的 Web 服务器之一。虽然 Sun 现在已转向 Netscape/I-Planet Server,不再发展Java Web Server,但它仍旧是一个广受欢迎的 Servlet、JSP学习平台。要得到免费试用版本,请访问http:/ 3 Servlet 3.1

15、 Servlet 基本结构 下面的代码显示了一个简单 Servlet 的基本结构。该Servlet 处理的是 GET 请求,所谓的 GET 请求,如果你不熟悉HTTP,可以把它看成是当用户在浏览器地址栏输入 URL、点击Web 页面中的链接、提交没有指定 METHOD 的表单时浏览器所发出的请求。Servlet 也可以很方便地处理 POST 请求。POST 请求是提交那些指定了 METHOD=“POST”的表单时所发出的请求,具体请参见稍后几节的讨论。 import java.io.*; import javax.servlet.*; import javax.servlet.http.*;

16、public class SomeServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException / 使用“request”读取和请求有关的信息(比如Cookies) / 和表单数据 / 使用“response”指定 HTTP 应答状态代码和应答头 / (比如指定内容类型,设置 Cookie) PrintWriter out = response.getWriter(); / 使

17、用 “out“把应答内容发送到浏览器 如果某个类要成为 Servlet,则它应该从 HttpServlet 继承,根据数据是通过 GET 还是 POST 发送,覆盖 doGet、doPost方法之一或全部。doGet 和 doPost 方法都有两个参数,分别为HttpServletRequest 类型和 HttpServletResponse 类型。HttpServletRequest 提供访问有关请求的信息的方法,例如表单数据、HTTP 请求头等等。HttpServletResponse 除了提供用于指定 HTTP 应答状态(200,404 等) 、应答头(Content-Type,Set-

18、Cookie 等)的方法之外,最重要的是它提供了一个用于向客户端发送数据的 PrintWriter 。对于简单的 Servlet来说,它的大部分工作是通过 println 语句生成向客户端发送的页面。 注意 doGet 和 doPost 抛出两个异常,因此你必须在声明中包含它们。另外,你还必须导入 java.io 包(要用到PrintWriter 等类) 、javax.servlet 包(要用到 HttpServlet等类)以及 javax.servlet.http 包(要用到HttpServletRequest 类和 HttpServletResponse 类) 。 最后,doGet 和 d

19、oPost 这两个方法是由 service 方法调用的,有时你可能需要直接覆盖 service 方法,比如 Servlet 要处理 GET 和 POST 两种请求时。 3.2 输出纯文本的简单 Servlet 下面是一个输出纯文本的简单 Servlet。 3.2.1 HelloWorld.java package hall; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet public void doGet(Htt

20、pServletRequest request, HttpServletResponse response) throws ServletException, IOException PrintWriter out = response.getWriter(); out.println(“Hello World“); 3.2.2 Servlet 的编译和安装 不同的 Web 服务器上安装 Servlet 的具体细节可能不同,请参考 Web 服务器文档了解更权威的说明?俣褂?Java Web Server(JWS)2.0,则 Servlet 应该安装到 JWS 安装目录的 servlets 子目

21、录下。在本文中,为了避免同一服务器上不同用户的 Servlet 命名冲突,我们把所有 Servlet 都放入一个独立的包 hall 中;如果你和其他人共用一个服务器,而且该服务器没有“虚拟服务器”机制来避免这种命名冲突,那么最好也使用包。把 Servlet 放入了包 hall 之后,HelloWorld.java 实际上是放在 servlets 目录的 hall 子目录下。 大多数其他服务器的配置方法也相似,除了 JWS 之外,本文的 Servlet 和 JSP 示例已经在 BEA WebLogic 和IBM WebSphere 3.0 下经过测试。WebSphere 具有优秀的虚拟服务器机制

22、,因此,如果只是为了避免命名冲突的话并非一定要用包。 对于没有使用过包的初学者,下面我们介绍编译包里面的类的两种方法。 一种方法是设置 CLASSPATH,使其指向实际存放 Servlet的目录的上一级目录(Servlet 主目录) ,然后在该目录中按正常的方式编译。例如,如果 Servlet 的主目录是C:JavaWebServerservlets,包的名字(即主目录下的子目录名字)是 hall,在 Windows 下,编译过程如下: DOS set CLASSPATH=C:JavaWebServerservlets;%CLASSPATH% DOS cd C:JavaWebServerser

23、vletshall DOS javac YourServlet.java 第二种编译包里面的 Servlet 的方法是进入 Servlet 主目录,执行“javac directoryYourServlet.java” (Windows)或者“javac directory/YourServlet.java”(Unix) 。例如,再次假定 Servlet 主目录是 C:JavaWebServerservlets,包的名字是 hall,在 Windows 中编译过程如下: DOS cd C:JavaWebServerservlets DOS javac hallYourServlet.java

24、注意在 Windows 下,大多数 JDK 1.1 版本的 javac 要求目录名字后面加反斜杠()。JDK1.2 已经改正这个问题,然而由于许多 Web 服务器仍旧使用 JDK 1.1,因此大量的 Servlet 开发者仍旧在使用 JDK 1.1。 最后,Javac 还有一个高级选项用于支持源代码和.class文件的分开放置,即你可以用 javac 的“-d”选项把.class 文件安装到 Web 服务器所要求的目录。 3.2.3 运行 Servlet 在 Java Web Server 下,Servlet 应该放到 JWS 安装目录的 servlets 子目录下,而调用 Servlet 的

25、 URL 是http:/host/servlet/ServletName。注意子目录的名字是servlets(带“s” ) ,而 URL 使用的是“servlet” 。由于HelloWorld Servlet 放入包 hall,因此调用它的 URL 应该是http:/host/servlet/hall.HelloWorld。在其他的服务器上,安装和调用 Servlet 的方法可能略有不同。 大多数 Web 服务器还允许定义 Servlet 的别名,因此Servlet 也可能用 http:/host/any-path/any-file.html 形式的 URL 调用?咛迦绾谓?行配置完全依赖于服

26、务器类型,请参考服务器文档了解细节? 3.3 输出 HTML 的 Servlet 大多数 Servlet 都输出 HTML,而不象上例一样输出纯文本。要输出 HTML 还有两个额外的步骤要做:告诉浏览器接下来发送的是 HTML;修改 println 语句构造出合法的 HTML 页面。 第一步通过设置 Content-Type(内容类型)应答头完成。一般地,应答头可以通过 HttpServletResponse 的 setHeader方法设置,但由于设置内容类型是一个很频繁的操作,因此Servlet API 提供了一个专用的方法 setContentType。注意设置应答头应该在通过 Print

27、Writer 发送内容之前进行。下面是一个实例: HelloWWW.java package hall; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWWW extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentTy

28、pe(“text/html“); PrintWriter out = response.getWriter(); out.println(“n“ + “n“ + “Hello WWWn“ + “n“ + “Hello WWWn“ + “); 3.4 几个 HTML 工具函数 通过 println 语句输出 HTML 并不方便,根本的解决方法是使用 JavaServer Pages(JSP) 。然而,对于标准的 Servlet 来说,由于 Web 页面中有两个部分(DOCTYPE 和 HEAD)一般不会改变,因此可以用工具函数来封装生成这些内容的代码。 虽然大多数主流浏览器都会忽略 DOCTYP

29、E 行,但严格地说HTML 规范是要求有 DOCTYPE 行的,它有助于 HTML 语法检查器根据所声明的 HTML 版本检查 HTML 文档合法性。在许多 Web 页面中,HEAD 部分只包含。虽然许多有经验的编写者都会在 HEAD 中包含许多 META 标记和样式声明,但这里只考虑最简单的情况。 下面的 Java 方法只接受页面标题为参数,然后输出页面的DOCTYPE、HEAD、TITLE 部分。清单如下: ServletUtilities.java package hall; public class ServletUtilities public static final String

30、 DOCTYPE = “; public static String headWithTitle(String title) return(DOCTYPE + “n“ + “n“ + “ + title + “n“); / 其他工具函数的代码在本文后面介绍 HelloWWW2.java 下面是应用了 ServletUtilities 之后重写 HelloWWW 类得到的 HelloWWW2: package hall; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Hell

31、oWWW2 extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType(“text/html“); PrintWriter out = response.getWriter(); out.println(ServletUtilities.headWithTitle(“Hello WWW“)+ “n“ + “Hello WWWn“ + “); 4

32、 表单 4.1 表单数据概述 如果你曾经使用过 Web 搜索引擎,或者浏览过在线书店、股票价格、机票信息,或许会留意到一些古怪的 URL,比如“http:/host/path?user=Marty+Hall import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; public class ThreeParams extends HttpServlet public void doGet(HttpServletRequest request, HttpServletRes

33、ponse response) throws ServletException, IOException response.setContentType(“text/html“); PrintWriter out = response.getWriter(); String title = “读取三个请求参数“; out.println(ServletUtilities.headWithTitle(title) + “n“ + “ + title + “n“ + “n“ + “ param1: “ + request.getParameter(“param1“) + “n“ + “ param2: “ + request.getParameter(“param2“) + “n“ + “ param3: “ + request.getParameter(“param3“) + “n“ + “n“ + “); public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException doGet(request, response); 4.3 实例:输出所有的表单数据

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 实用文档 > 简明教程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报