初级 Web 开发人员的 Tomcat
介绍使用 Tomcat 对 JavaServer Pages (JSP)、servlet 和 Web 服务进行编程,Tomcat 是来自 Apache Foundation 的开源应用服务器。本教程引导您完成以下任务:
- 下载和安装您自己的 Tomcat 服务器。
- 在 Tomcat 上编码和部署 JSP。
- 在 Tomcat 上编码和部署 servlet。
- 使用 Tomcat 和 Apache Axis 编码和部署 Web 服务。
本教程概述 JSP、servlet 和 Web 服务,但不会深入讨论这些技术。
必要条件
要最大限度地利用本教程,您需要熟悉 Java 编程语言、面向对象设计原理和基本 TCP/IP 网络概念。最好理解 JDK 中的网络 API,但并非必须如此。
要运行本教程中的示例,需要:
- 有效的 JDK 1.5.0 或更高版本的安装程序。
- 有效的 Tomcat 5.5 或更高版本的安装程序,可从 http://jakarta.apache.org/tomcat/ 获得。本教程包含详细的 Tomcat 下载、安装和设置说明。
要运行 Web 服务示例,还需要安装:
- Apache Ant 1.5.2 或更高版本,可从 http://ant.apache.org/ 获得
- Apache Axis 1.2.1 或更高版本,可从 http://ws.apache.org/axis/ 获得。本教程包含详细的 Axis 安装说明。
运行本教程推荐的系统配置:
- 支持 JDK 1.5.0 且内存至少为 512MB 的系统。本教程中的说明基于运行 Microsoft Windows 的系统。
- 安装软件和示例至少需要 50MB 的磁盘空间。
Tomcat 是什么?
Tomcat 是来自 Apache Software Foundation 的开源服务器。它是一个 Web 应用服务器,这说明它支持 JavaServer Pages (JSP) 和 servlet 进行编程。
自 2000 年初期,Tomcat 一直担当着最新的 Java Servlet 和 JSP 规范的参考实现。Tomcat 5.5 是编写本教程时的最新版本,支持最新的 Java Servlet 2.4 和 JavaServer Pages 2.0 标准(参见 参考资料)。Tomcat 还包括一个受限的 Web 服务器,该服务器以独立模式(默认情况下)执行时能服务于静态网页。
由于有多种开源库和扩展,因此 Tomcat 支持:
- 使用 Apache Axis servlet 的 Web 服务
- 开发框架,如 Apache Struts
- 模板引擎,如 Apache Jakarta Velocity
- 对象关系映射技术,如 Hibernate
本教程展示如何使用 Tomcat 学习 JSP、servlet 和 Web 服务编程。与 Tomcat 结合使用 Struts、Velocity 和 Hibernate 不属于本教程的范围。
过去,因为配置和管理 Tomcat 需要高级专业知识,主要的 Tomcat 用户都是高级的服务器端应用程序开发人员。现在,由于 Tomcat 的 GUI 安装程序的出现、将服务器安装为系统服务的能力以及服务器功能的稳定性,甚至初级 Web 开发人员都能使用这个通用的服务器。
Tomcat 安装与设置
下载 Tomcat
要下载最新版本的 Tomcat,请访问 Apache Tomcat 主页(参见 必要条件),如图 1 所示,并单击 Download 标题下的 Tomcat 5.x 链接(图 1 中红色边框内的区域):
图1. Apache Tomcat 项目主页
第3页,共11页 文档选项 打印此页 PDF - A4 475 KB PDF - Letter 479 KB 获取 Adobe® Reader® 样例代码 对本教程的评价 帮助我们改进此内容 Tomcat 安装与设置 下载 Tomcat 要下载最新版本的 Tomcat,请访问 Apache Tomcat 主页(参见必要条件),如图 1 所示,并单击 Download 标题下的 Tomcat 5.x 链接(图 1 中红色边框内的区域): 图1. Apache Tomcat 项目主页 可以在最新的 5.5.x 发行版中进行选择。选择最新的稳定(非 Beta 和非 Alpha)发行版的二进制分发版。对于 Windows 系统,下载 EXE 二进制文件进行简单安装。
安装 Tomcat
EXE 二进制安装程序完成以下事项:
- 解压并安装 Tomcat 服务器组件。
- 要求您指定侦听传入请求时,服务器将使用的 TCP 端口。(TCP 端口是一个网络端点,用数字表示,客户机应用程序可以在连接到服务器时指定该数字。)
- 将服务器配置为作为系统服务运行。
启动 EXE 安装程序。您将看到最初的欢迎屏幕,如图 2 所示:
图 2. Tomcat 设置向导欢迎屏幕
EXE 安装程序使用运行一个带有逐步说明的向导。必须拥有对机器的管理权限,因为 Tomcat 是作为系统服务安装的。如果使用自己的 PC,作为默认用户并成功安装了其他软件,可能就已经有了管理权限。
表 1 描述了设置向导的各个屏幕所提示的项以及您应该做出的响应。
设置向导屏幕 | 描述 |
---|---|
许可协议 | 这是 Apache License 2.0,是现有的开源软件许可中的一种。仔细阅读许可条款。如果同意条款,请单击 I Agree 按钮继续。 |
选择组件 | 选择 Tomcat 组件进行安装。默认情况下会选中必需的组件。如果有足够的磁盘空间,可以考虑安装示例。它们对于 Web 应用程序编程很有用。 |
选择安装位置 | 选择在计算机上安装 Tomcat 服务器的目录。如果是初次安装,使用向导选择的默认设置即可。该屏幕还显示了 Tomcat 安装将占用的磁盘空间以及磁盘上可用的空间。 |
配置 | 该屏幕用于执行基本 Tomcat 服务器配置。可以选择安装服务器的 TCP 端口,以及管理员用户名和密码。建议将 TCP 端口设置为 8080。保留管理员用户名为 admin 并输入自己的管理员密码。不要忘记密码;稍后将需要使用它来部署本教程中的示例。 |
Java 虚拟机 | 该屏幕用于选择运行 Tomcat 的 JVM。除非机器上安装了多个 JDK,否则使用默认设置即可。对于最新的 Tomcat 5.5 发行版,应该选择 JVM 1.5.0 版或更高版本。 |
完成 Apache Tomcat 设置向导 | 这是安装的最后一步。选择 Run Apache Tomcat 复选框。这将在安装后立即启动系统服务。 |
注意,在某些带有防火墙的 Windows 版本中,可能需要赋予 Tomcat 明确的权限,以侦听用于请求的 TCP 端口。
安装后,Tomcat 服务器将运行,同时,Apache 服务监控程序图标将显示在 Windows 任务栏(屏幕底部的长条)的右下角,如图 3 所示:
图 3. 服务监控程序显示 Tomcat 正在运行
在图 3 中,监控程序图标上的绿色箭头指示 Tomcat 服务正在运行。
验证服务器操作
访问运行的 Tomcat 服务器和验证安装是否成功很简单。启动浏览器并指向地址 http://localhost:8080/ 即可。
Tomcat 服务器在端口 8080 上侦听。(在安装期间配置该端口。)图 4 展示了 Tomcat 显示的欢迎屏幕:
图 4. Tomcat 的欢迎屏幕
通过让 Tomcat 服务器与浏览器在同一机器上运行,可以模拟网络环境。图 5 显示了这个回环网络配置:
图 5. 用于单机服务器端开发的回环配置
在图 5 中,客户机(浏览器)与服务器 (Tomcat) 在同一台机器上运行。客户机与服务器之间的连接以回环模式运行。这是 Web 开发中的一个常用实践,允许使用单机执行服务器端开发。在实际生产中,可以将 URL 的主机名从 localhost 更改为联网的生产 Tomcat 服务器的 IP 地址(如图 5 中的虚线内所显示的)。
Tomcat 上的第一个 JSP 应用程序
JSP 编程简介
JSP 是一种流行的脚本和模板语言,用于创建服务器端 Java 应用程序的表示层。通常,JSP 与动态用户界面一起用于网页。它可以动态地生成 HTML、XML、级联样式表(Cascading Style Sheets,CSS)、JavaScript 以及任何客户端表示内容。最新的广泛实现的 JSP 版本是 2.0,基于 Java 规范要求(Java Specification Request,JSR)152(参见 参考资料)。
JSP 语言的基本元素如下:
- 指令
- 标准动作
- 表达式语言(Expression Language,EL)
- 自定义标记库
- JavaBean
JSP 内建了访问 JavaBean 的能力。在生产应用程序中,JavaBean 通常用于在应用程序逻辑(使用 servlet 和其他组件实现)和 JSP 中传递数据值。JSP 代码的主要职责是显示 JavaBean 中包含的值。
JSP 频繁使用的一个标记库是 JSP 标准标记库(JSP Standard Tag Library,JSTL)。JSTL 在 JSR 52 中定义(参见 参考资料),它包含一个大型的标记库,可与 JSP 中的 EL 联合使用。JSTL 的最新版本(到 2005 年 10 月为止)是 1.1。
与 Java 程序不同,JSP 程序不需要进行预编译。Tomcat 在 JSP 首次执行时对它进行编译,并保留一份编译的二进制文件副本,用于后续执行。这能够加快开发和测试周期。
对于早期的 JSP 版本(2.0 之前),如果不求助于嵌入式 Java 编码,则很难编写一般的应用程序逻辑。事实上,2.0 之前的 JSP 版本允许并鼓励使用混合 Java/JSP 编码。该实践通常会创建混乱和难以维护的代码。
从 JSP 2.0 开始,因为支持 EL 和 JSTL,所以 JSP 程序中不再需要 Java 代码。建议所有新的 JSP 开发人员不要将嵌入式 Java 代码与 JSP 混用。此方法通常称为无脚本 JSP。
学完本教程后,可以了解更多关于 JSP 编程的内容(参见 参考资料 了解更多关于 JSP 的信息)。本部分其余内容说明如何使用 Tomcat 创建和运行 JSP 应用程序,以便立即开始编写自己的 JSP 程序。
一个简单 JSP 程序
本教程中的 JSP 程序示例演示 JSP 的动态 HTML 生成能力。该程序输出一条包含当前服务器端时间的信息和一个乘法表。每次访问该页时,数据信息都会更改。该乘法表使用一个编程算法生成。
可以在代码分发版的 step1 子目录中找到该 JSP 程序示例(参见 下载)。清单 1 展示了 index.jsp:
清单 1. 示例 JSP 程序:index.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<jsp:useBean id="timeNow" class="java.util.Date" /> <html>
<head>
<title>developerWorks Tomcat Tutorial</title>
<link rel=stylesheet type="text/css" href="specials.css">
</head>
<body>
<table width="600">
<tr>
<td class="mainHead" colspan="9">
<h1>Today is
<fmt:formatDate value="${timeNow}"
type="date" dateStyle="long" /></h1>
</td>
</tr>
<tr>
<c:forEach var="i" begin="1" end="9" step="1">
<th>${i}x</th>
</c:forEach>
</tr>
<c:forEach var="row" begin="1" end="9" step="1">
<tr>
<c:forEach var="col" begin="1" end="9" step="1">
<td><c:out value="${row * col}" /></td>
</c:forEach>
</tr>
</c:forEach>
</table>
</body>
</html>
该程序中一些要注意的 JSP 技术包括:
<%@taglib>
指令,用于包含 JSTL 的核心和格式化组件,并将它们的标记分别与名称空间前缀c:
和fmt:
关联。<jsp:useBean>
标准动作将java.util.Date
类的一个实例实例化为一个 JavaBean,表示当前时间。- 在
${timeNow}
表达式中使用 EL,表示java.util.Date
的 JavaBean 实例,以输出当前的月和日。 - 使用 JSTL 中的日期格式化库标记来格式化日期值。
- 使用 JSTL 中的
<c:forEach>
标记创建输出乘法表的循环。 - 将静态 HTML 内容与 JSP 生成动态内容混合。
准备在 Tomcat 上运行 JSP 应用程序
完成一些包装工作后,才能在 Tomcat 上运行 index.jsp 程序。通常需要按照以下步骤操作:
- 创建 JSP 应用程序。如果只使用一个页面,则称它为 index.jsp,就像在示例程序中所做的 一样。
- 创建一个部署描述符(一个 web.xml 文件)并将它放在 WEB-INF 目录中。
- 将 JSTL 库复制到 WEB-INF/lib 目录。
- 使用 JDK 中的 JAR 工具将所有代码捆绑成一个 Web 应用程序归档 (WAR) 文件,用于部署。
- 使用 Tomcat Web 应用程序管理器部署和运行 WAR 文件。
WAR 文件是一个标准 Java 企业版(Java Enterprise Edition,Java EE)部署单元。它是一种格式非常特殊的 JAR 文件,文件扩展名为 .war。 在此 WAR 文件中,必须已经部署了一个名为 web.xml 的部署描述符文件,其中包含一些指令告诉服务器如何部署 WAR 内容。
对于该示例程序,web.xml 文件(参见清单 2)的作用不大,因为应用程序只包含一个 JSP 页面:
清单 2. web.xml 部署描述符
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4"> <description>
developerWorks Beginning Tomcat Tutorial
</description>
<display-name>IBM developerWorks Beginning Tomcat Tutorial
</display-name>
</web-app>
清单 2 中的 web.xml 文件只为 Tomcat 提供描述和显示名称,这些内容稍后将被 Tomcat 应用程序管理器使用。
要创建 WAR 文件,运行代码分发版(参见下载)中的 makewar.bat 文件。该批处理文件仅使用 JAR 实用工具来创建 JAR 文件。清单 3 显示了 makewar.bat 的内容:
清单 3. makewar.bat
jar cvf step1.war .
如果是在 Linux 系统上操作,可以在控制台上输入 jar cvf step1.war .
来手动创建 WAR 文件。
使用 Tomact Web 应用程序管理器部署应用程序
要在 Tomcat 上运行应用程序,首先需要部署 WAR 文件。使用 Tomcat Web 应用程序管理器(简称为管理器)实用工具完成该操作。转到 http://localhost:8080/manager/html 可以访问管理器。
Tomcat 会询问用户名和密码。输入在设置期间提供的管理员用户名和密码。登录服务器后,将看到管理器的显示。它显示了当前加载的并在 Tomcat 服务器上运行的所有应用程序,如图 6 所示:
图 6. Tomcat Web 应用程序管理器实用工具
要部署 step1.war,向下滚动到管理器页面底部。单击 WAR file to deploy 区域旁的 Browse 按钮。使用浏览器选择 step1.war 文件,然后单击 Deploy 按钮。该动作将 WAR 文件发送到 Tomcat 服务器并启动它。
现在应该能看到 step1.war 应用程序在管理器的运行应用程序列表中运行。另请注意,该列表使用在 web.xml 中设置的显示名称来标识应用程序。
最后,转到 http://localhost:8080/step1/ 可以看到 JSP 应用程序正在运行。
默认情况下,Tomcat 使用 WAR 文件的名称为应用程序提供上下文。该上下文被指定为用于访问应用程序的地址的一部分。在本例中, 上下文是 step1。Tomcat 在应用程序的根目录中查找名为 index.jsp 的文件并执行(如果存在)。图 7 显示了运行的 JSP 应用程序:
图 7. 在 Tomcat 上运行的一个 JSP 应用程序
如果对 JSP 代码进行任何修改(比如在学习 JSP 时),可以执行以下步骤来运行新代码:
- 使用
makewar
创建新的 WAR 文件。 - 单击管理器中的 undeploy 取消旧 step1.WAR 的部署。
- 使用管理器部署新的 WAR 文件。
使用 Tomcat 进行 servlet 部署
servlet 简介
Servlet 是服务器端 Java 代码,在 servlet 容器(如 Tomcat 服务器)的控制下执行。Servlet 与 JSP 一样,接受传入请求,进行处理或转换,然后生成传出响应。因为 servlet 实际上是 Java 代码,所以可以任意使用 Java 编程语言的功能和灵活性来创建服务器端逻辑。
所有 servlet 都会直接或间接通过实现 javax.servlet.Servlet
接口的辅助类来实现该接口。Servlet 还可以使用容器提供的 API 公开容器服务。例如,servlet 可以从容器获得数据库连接来访问关系数据库。
Servlet 通常用于实现 Web 应用程序逻辑。Servlet 可以获取和处理数据,然后将数据传递给 JSP 进行显示(例如,动态生成用户界面)。Servlet 还可用于频繁地处理通过基于 Web 形式提交的数据。
Tomcat 5.5 实现 Servlet 2.4 —— JSR 154 中指定的最新完成的 servlet 标准(参见 参考资料)。
本节说明如何使用 Tomcat 学习 servlet 编程。参见 参考资料 了解关于 servlet 的更多信息。
生成菜单特价项的 Servlet 示例
本节中的示例显示某虚构餐馆当日的特价菜单项。Servlet 负责获取数据,JSP 负责动态生成 HTML 来显示事项。本例中的 JSP 称为 showspecials.jsp,Servlet 位于 com.ibm.dw.tutorial.tomcat.SpecialsServlet
Java 类中。
本例演示 Web 应用程序中的一种典型模式:
- 一个 servlet 接受来自用户的传入请求。
- 该 servlet 根据传入请求进行处理。
- 该 servlet 使用作为属性附加的数据将请求分派给一个 JSP。
- JSP 生成一个动态响应来显示数据。
清单 4 显示 SpecialsServlet
的代码:
清单 4. SpecialsServlet
servlet
package com.ibm.dw.tutorial.tomcat;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException; public class SpecialsServlet extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
ServletContext context = getServletContext();
request.setAttribute("specials", getSpecials());
context.getRequestDispatcher("/showspecials.jsp")
.forward(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
private List getSpecials() {
List retval = new Vector();
retval.add(new Special("Coq au Vin", 15));
retval.add(new Special("Pad Thai", 10));
retval.add(new Special("Lobster Thermador", 10));
retval.add(new Special("Baked Alaska", 8));
return retval;
}
public class Special {
int price;
String menuItem;
public Special(String item, int inPrice) {
menuItem = item;
price = inPrice;
}
public int getPrice() {
return price;
}
public String getMenuItem() {
return menuItem;
}
}
}
清单 4 中的 servlet 代码:
- 声明一个名为
Special
的内部类来保存菜单特价项。 - 在名为
getSpecials()
的方法中创建特价项项列表。 - 在
doGet()
方法(Tomcat 调用该方法来处理传入 HTTP 请求)中,将特价项列表作为名为specials
的属性附加到request
。 - 将请求转发给 showspecials.jsp 进行显示。
显示当日特价项的 JSP
清单 5 显示 showspecials.jsp 代码:
清单 5. showspecials.jsp 代码
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<jsp:useBean id="timeNow" class="java.util.Date" />
<%@ page session="true"%>
<html>
<head>
<title>developerWorks Tomcat Tutorial</title>
<link rel=stylesheet type="text/css" href="specials.css">
</head>
<body>
<table width="600">
<tr>
<td class="mainHead" colspan="2">
Today's specials for
<fmt:formatDate value="${timeNow}" type="date"
dateStyle="long" />
</td>
</tr>
<tr>
<th>Specialty</th>
<th>Price</th>
</tr>
<c:forEach var="special" items="${specials}">
<tr>
<td>${special.menuItem}</td>
<td>\$${special.price}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
可以发现,这里使用了前一节(Tomcat 上的第一个 JSP 应用程序)中 step1 示例使用 清单 1 的技术:
- JSTL 日期格式化标记格式化一个
java.util.Date
JavaBean 实例。 <c:forEach>
JSTL 循环标记迭代specials
的List
属性(通过SpecialServlet
附加到request
对象)。- EL 表达式显示特价项的值。
将 servlet 部署到 Tomcat
Servlet 存在于 Web 应用程序中,方式与 JSP 的相同。在将 JSP 和 servlet 部署到 Tomcat 之前,需要将应用程序包装成一个 WAR 文件。将应用程序中 servlet 的类放在 WEB-INF/类子目录下。
本例的 Web 描述符与前一节(Tomcat 上的第一个 JSP 应用程序)中的 清单 2 中的 Web 描述符稍有不同。前者必须告诉 Tomcat 有关 servlet 的信息以及如何将它映射到传入请求。清单 6 显示了本例的 web.xml 文件:
清单 6. web.xml 文件
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4"> <description>developerWorks Beginning Tomcat Tutorial
</description>
<display-name>
IBM developerWorks Beginning Tomcat Tutorial Step 2
</display-name> <servlet>
<servlet-name>Specials</servlet-name>
<servlet-class>
com.ibm.dw.tutorial.tomcat.SpecialsServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Specials</servlet-name>
<url-pattern>/showspecials.cgi</url-pattern>
</servlet-mapping> </web-app>
该部署描述符包含一个 <servlet>
元素,告诉 Tomcat 有关 servlet 实现类的信息。<servlet-mapping>
元素告诉服务器应该将发往 showspecials.cgi 的请求传递给 servlet。
编译 servlet 后,才能创建 WAR 文件。因为 servlet 是 Java 代码,所以在部署 servlet 之前必须对它们进行编译。为此,可以使用代码分发版(参见下载)中的 compile.bat 批处理文件。但是,需要修改它来指向您自己的 Tomcat 目录,因为来自 Tomcat common/lib 目录的 servlet-api.jar 包含编译 servlet 所需的一些接口和辅助类。
成功编辑应用程序后,即可通过执行 makewar.bat 来制作 WAR 文件。这次,WAR 文件称为 step2.war。创建 WAR 文件后,可以使用 Tomcat 管理器来部署它。
可以通过转到 http://localhost:8080/step2/showspecials.cgi 来访问 Web 应用程序。
Tomcat 现在将 showspecials.cgi 的 URL 路径映射到 servlet 代码。这通过 <servlet-mapping>
元素在 web.xml 中指定。图 8 显示了应用程序的输出,即显示菜单特价项:
图 8. 在 Tomcat 上运行的 SpecialsServlet
如果对 servlet 代码进行更改。可以按照以下步骤运行新的代码:
- 使用 compile.bat 重新编译代码
- 使用 makewar.bat 创建 step2.war
- 使用 Tomcat 管理器取消所有旧 step2.war 的部署。
- 部署新的 step2.war。
使用 Tomcat 探索 Web 服务开发
Web 服务简介
Web 服务是服务器端代码组件,可以公开其功能以使用标准 HTTP 协议访问 TCP/IP 网络。这种公开允许 Web 服务用户(称为消费者)使用大多数网络连接上的 Web 服务 -- 甚至能穿越防火墙。
Web 服务处理传入请求并生成响应。这正是 servlet 所做的工作,所以自然要使用 servlet 实现 Web 服务。
Web 服务正日益流行,因为它们可以有效地用于 B2B 或 B2C 接口。它们允许通过 Internet 发送请求和接收响应。任何能访问网站的用户都可以访问 Web 服务。例如,eBay 和 Amazon.com 都为其合作伙伴和用户提供了 Web 服务。
Web 服务依赖于在消费者和服务之间传递基于 XML 的消息。此消息被包装并按照简单对象访问协议(Simple Object Access Protocol,SOAP)发送。
Apache Axis 是一个 Web 服务开发工具包,可用作 Tomcat 的一个增件。下一节说明如何使用 Apache Axis 创建简单 Web 服务,并在 Tomcat 服务器上部署它。参见 参考资料 中有助于了解 Web 服务编程更多信息的文章和教程。
向 Tomcat 添加 Axis
Axis 可以作为一个 servlet 在 Tomcat 上运行。如果还未这样做,请下载最新版本的 Axis(参见 必要条件)。取消 Axis 分发版的部署。
将 Axis 分发版 webapps/axis 目录下的所有文件复制到本文章代码分发版的 step3/axis 目录(参见 下载)。
可以使用 makewar.bat 批处理文件(位于 step3/axis 目录中)来创建可以作为 Web 应用程序部署到 Tomcat 的 axis.war 文件。
在 Internet 上下载一些附加 JAR 文件并将它们放入 step3 应用程序的 WEB-INF/lib 目录后,才能在 Tomcat 上正确运行 Axis。如果使用 Axis 1.2.1,则需要下载以下文件:
- activation.jar 来自 http://java.sun.com/products/javabeans/glasgow/jaf.html
- xmlsec-1.2.1.jar 来自 http://xml.apache.org/security/
- mail.jar 来自 http://java.sun.com/products/javamail/
如果使用的不是 Axis 1.2.1 版,则上述列表会稍有不同。参见 Axis 分发版的随附文档了解更多信息。
一个发布当日事项的简单 Web 服务
继续餐馆菜单特价项示例,在本节示例中创建的 Web 服务为消费者提供当日特价销售的菜单项列表。
Web 服务的代码包含在 ShowSpecials.jws 文件中,如清单 7 所示:
清单 7. ShowSpecials.jws
public class ShowSpecials {
public String [] getMenuItems() {
return new String []{
"Coq au Vin", "Pad Thai",
"Lobster Thermador", "Baked Alaska" };
}
public int [] getPrices() {
return new int [] { 15, 10, 10, 8 };
}
}
清单 7 中的代码有两个公共方法。getMenuItems()
方法返回特价出售的菜单项,getPrices()
方法检索它们的价格。
Axis 使用 .jws(Java Web 服务)文件支持立即部署模式。在该模式下,所需做的只是将带有 .jws 扩展名的 Java 源文件放入 axis 目录。此类的任何公共方法都将通过 Web 服务公开。本例使用立即部署模式。getMenuItems()
和 getPrices()
方法在解析和编译 .jws 文件时通过 Axis 动态公开为 Web 服务方法。解析和编译只在初次访问 Web 服务时发生。
将 Axis servlet 部署到 Tomcat
因为 Axis 作为 servlet 运行,所以将 Web 服务部署到 Tomcat的过程与之前 Web 应用程序部署示例中的相同。
在 step3/axis 目录中,运行 run makewar.bat 来创建 axis.jar。使用 Tomcat 管理器将 axis.war 文件部署到 Tomcat 服务器。
部署后,即可在 URL http://localhost:8080/axis/ShowSpecials.jws 上获得 Web 服务。不过,如果使用浏览器访问该 URL,将看不到很多信息。必须通过 Web 服务使用者应用程序来使用 Web 服务。
使用使用者应用程序测试 Web 服务
编写 Web 服务使用者应用程序代码超出了本教程的范围。不过,可以使用 Apache Ant(参见 必要条件)根据代码分发版(参见 下载)中提供的现有代码编译客户机应用程序。
因为 Web 服务通过标准 Web 协议传输,所以客户机应用程序可以在任何使用编程语言的操作系统上创建。许多 Web 服务工具箱自动生成 Web 服务使用程序。这是可能的,因为工具可以自动发现访问 Web 服务的方法。
有关如何访问 Web 服务的说明以 XML 文件的形式提供,用 Web 服务定义语言(Web Service Definition Language,WSDL)进行编码。大多数 Web 服务容器(如 Axis)可以根据某个 Java 类或接口来生成这个 WSDL 文件。例如,要查看为 Web 服务生成的 WSDL,可以试着使用浏览器访问 URL http://localhost:8080/axis/ShowSpecials.jws?wsdl。看似复杂的 XML 文档是使用 .jws 代码生成的。此 WSDL 文档可由某个工具轻松处理,而且能自动生成调用 Web 服务的客户机使用程序。
本例的客户机不使用 WSDL 或自动代码生成。它通过硬编码来调用 ShowSpecials.jws Web 服务。这使编写客户机代码相对简单。
需要安装 Ant 来编译和运行 Web 服务客户机(参见 必要条件),因为代码需要许多 Axis 库 JAR 文件才能成功编译和运行。
编译客户机之前,请找到 step3/client 目录中的 build.xml 文件,并编辑该文件,以指向 Axis 安装目录。
要编译客户机,请使用以下命令运行 Ant:
ant compile
要启动客户机,使用 Web 服务,请使用以下命令运行 Ant:
ant run
成功运行 Web 服务客户机的典型输出(显示特价菜单项和价格)如下所示:
Buildfile: build.xml run:
[java] Specials today:
[java] Coq au Vin $15
[java] Pad Thai $10
[java] Lobster Thermador $10
[java] Baked Alaska $8 BUILD SUCCESSFUL
Total time: 7 seconds
结束语
Tomcat 服务器是一个学习 JSP、servlet 和 Web 服务的的优秀平台。在本教程中学习了以下方法:
- 下载和安装您自己的 Tomcat 服务器。
- 使用 Tomcat 管理器部署和取消部署应用程序。
- 创建基于 JSP 的应用程序并在 Tomcat 服务器上执行它。
- 使用 servlet 创建 Web 应用程序并在 Tomcat 上执行它。
- 创建 Web 服务并在 Tomcat 上执行它。
初级 Web 开发人员的 Tomcat的更多相关文章
- 【Tomcat】面向初级 Web 开发人员的 Tomcat
Apache Tomcat 应用服务器不再是高级 Web 系统开发人员的专用领域.在本教程中,Sing Li 将向初级 Web 开发人员展示如何利用他们当前的 Java™ 开发技能,使用 Tomcat ...
- 成为一个高效的web开发人员,只需要三步
想成为一名专业的web开发人员并不像你想象的那么容易,开发人员在开发自己的web项目时常常需要牢记很多东西,他们要不断寻找新理念,新创意,在特定时间内开发出高质量的产品,一名优秀的程序员必须明白时间的 ...
- Web开发人员必读的12个网站
The more you actually create, the more you’ll learn.(创造的越多,学习的越多),世界上有无数个开发人员会在网上分享他们的开发经验,我们无法向所有人学 ...
- 【特别推荐】Web 开发人员必备的经典 HTML5 教程
对于我来说,Web 前端开发是最酷的职业之一,因为你可以用新的技术发挥,创造出一些惊人的东西.唯一的问题是,你需要跟上这个领域的发展脚步,因此,你必须不断的学习,不断的前进.本文将分享能够帮助您快速掌 ...
- 值得 Web 开发人员学习的20个 jQuery 实例教程
这篇文章挑选了20个优秀的 jQuery 实例教程,这些 jQuery 教程将帮助你把你的网站提升到一个更高的水平.其中,既有网站中常用功能的的解决方案,也有极具吸引力的亮点功能的实现方法,相信通过对 ...
- Web 开发人员不能错过的 jQuery 教程和案例
jQuery 把惊喜延续到设计领域,处处带来极大的灵活性,创造了许多体验良好的设计,而且拥有不错的性能.这里分享一组 Web 开发人员不能错过的 jQuery 教程和案例,帮助你更好的掌握 jQuer ...
- Web 开发人员必备的12款 Chrome 扩展程序
之前已经分享过一些帮助 Web 开发人员和设计师的 Chrome 扩展,这次我们继续展示一组很有用的 Chrome 应用程序.这些免费的 Chrome 应用程序可以简化您的工作流程,为了加快您的工作流 ...
- 值得 Web 开发人员收藏的20个 HTML5 实例教程
当开始学习如何创建 Web 应用程序或网站的时候,最流行的建议之一就是阅读教程,并付诸实践.也有大量的 Web 开发的书,但光有理论没有实际行动是无用的.现在由于网络的发展,我们有很多的工具可以用于创 ...
- 值得 Web 开发人员收藏的16款 HTML5 工具
HTML5 正在迅速改变创建和管理网站的方式.HTML5 在不同的领域让网页设计更强大的.快速,安全,响应式,互动和美丽,这些优点吸引更多的 Web 开发人员使用 HTML5 开发各种网站和应用程序. ...
随机推荐
- yii2 memcache 跨平台交互 键和值不一样
1 首先在配置文件中加载 web\basic\config\web.php ........ 'components' => [ 'request' => [ // !!! insert ...
- 单链表LRU
单链表实现lru 越靠近链表尾部的节点是越早之前访问的 当有一个新的数据被访问时,从链表头开始顺序遍历链表 1.如果此数据之前已经被缓存在链表中 遍历得到这个数据对应的节点,并将其从原来的位置删除,然 ...
- Controlling DNS prefetching
Controlling DNS prefetching IN THIS ARTICLE Background Configuring prefetching in the browser Contro ...
- Android 多线程注意事项
参考:http://blog.csdn.net/x86android/article/details/14161981 http://geeksun.iteye.com/blog/1447708 An ...
- 通过 Lua 扩展 NGINX 实现的可伸缩的 Web 平台OpenResty®
OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极高的动态 W ...
- leetcode290
public class Solution { public bool WordPattern(string pattern, string str) { var list = str.Split(' ...
- 【322】python控制键盘鼠标:pynput
参考:python实战===python控制键盘鼠标:pynput 参考:[Python Study Notes]pynput实现对鼠标控制 参考:pynput doc 参考:pynput Packa ...
- php导出数组到csv格式demo
php的二维数组导出到csv需要处理文字编码,代码如下 <?php $data=array( array("username"=>"test1",& ...
- application获取资源
通过application获取资源,它的根路径是WebContent,它可以获取web-inf下的资源 通过getclassload()获取资源,它的根路径是classes,不能获取web-inf下的 ...
- 手把手教你给RecycleView添加头布局和尾布局
RecycleView想必大家都不陌生,它已他的高拓展性取代了传统布局显示,同时配合协调布局,可以实现很多意想不到的酷炫交互,今天就和大家介绍一下,如何给RecycleView添加头布局和尾布局,同时 ...