返回介绍

创建 Web 应用程序

发布于 2025-04-21 21:42:16 字数 6767 浏览 0 评论 0 收藏

既然 Tomcat 实例已经可以跑起来了,接下来就开始创建一个 Web 应用程序。首先,要在你的项目目录中为我们的 Web 应用程序创建目录结构,如例 14-2 所示。你可以自己手工创建这个目录,也可以从本书的网站下载代码示例。

例 14-2:创建 Web 应用程序目录结构的命令

$mkdir-p webapp/WEB-INF

作为开始,我们要在应用程序中加入一个 web.xml 和 index.jsp 文件,并部署它们。每个 J2EE Web 应用程序都需要一个 web.xml 文件,所以我们就先从这儿开始。稍后我们再用 Filter 和 Servlet 标签来配置这个文件,不过现在就把这个只有空架子的 web.xml 文件放在 webapp/WEB-INF 中了,如例 14-3 所示。

例 14-3:最简单的 webapp/WEB-INF/web.xml 文件

<?xml version="1.0"encoding="UTF-8"?>

<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">

</web-app>

一个 Web 应用程序至少要有一个视图供用户查看,所以我们先在应用程序的根目录(webapp/)下添加一个非常简单的 index.jsp 文件。再一次,我们还不准备搞些花哨的风格样式;我们只需要页面上能有些内容,好让我们知道有东西在运行就可以了。代码如例 14-4 所示。

例 14-4:一个简单的 JSP 文件 webapp/index.jsp

<?xml version="1.0"?>

<%@page contentType="text/html;charset=UTF-8"language="java"%>

Hello World

目前将应用程序部署到 Tomcat 有许多种方法,你可以随意使用你喜欢的任何方法。我比较喜欢用 Ant deploy(部署)构建任务将上下文信息发送到 Tomcat。在应用程序上下文配置文件中可以指定 docBase,告诉 Tomcat 到哪儿去找开发位置上的应用程序。采用这种部署技巧,你只需要部署一次应用程序。将程序部署到 Tomcat 可能会花不少时间,所以与每次都需要部署程序相比,采用这种办法以后,你的编译和测试周期将会变得更快。

为了运行应用程序,Tomcat 还需要知道一些与之相关的信息。为 Tomcat 提供信息的一种方法就是将这些信息放在 context 文件中(如例 14-5 所示)。我们需要让 Tomcat 知道的主要事情就是应用程序的位置。

例 14-5:一个 tomcat-context.xml 文件的例子

<?xml version="1.0"?>

<Context

docBase="/home/rfowler/current/examples/ch14/webapp"❶

debug="0"

reloadable="true"❷

</Context>

❶docBase 属性用于指定应用程序将位于 Tomcat 服务器的文件系统的哪个位置。你需要将这个属性修改为你的计算机中应用程序的实际位置。

❷Context 的 reloadable 属性用于指定 Tomcat 是否应该监视应用程序类文件的变化,并在有变化时重新加载应用程序的上下文。打开重新加载可以方便我们的开发周期,但是当应用程序发布为产品以后,则会浪费一定的 CPU 周期。

现在,我们已经编写好了一个 context 文件,接下来就更新 build.xml 文件,以便可以部署应用程序。在本章的构建文件中还需要添加几个依赖文件,我们打算将所有的修改内容都一次性复制到这里,如例 14-6 所示。

例 14-6:build.xml 中新添加的 Tomcat 依赖

……

<artifact:dependencies pathId="dependency.class.path"

filesetid="dependency.fileset">

<dependency groupId="hsqldb"artifactId="hsqldb"version="1.8.0.7"/>

<dependency groupId="mysql"artifactId="mysql-connector-java"

version="5.0.5"/>

<dependency groupId="org.hibernate"artifactId="hibernate"

version="3.2.5.ga">

<exclusion groupId="javax.transaction"artifactId="jta"/>

</dependency>

<dependency groupId="org.hibernate"artifactId="hibernate-tools"

version="3.2.0.beta9a"/>

<dependency groupId="org.apache.geronimo.specs"

artifactId="geronimo-jta_1.1_spec"version="1.1"/>

<dependency groupId="log4j"artifactId="log4j"version="1.2.14"/>

<dependency groupId="javax.servlet"artifactId="jstl"version="1.1.1"/>

<dependency groupId="taglibs"artifactId="standard"version="1.1.1"/>

<dependency groupId="org.hibernate"artifactId="hibernate-annotations"

version="3.3.0.ga"/>

<dependency groupId="org.hibernate"

artifactId="hibernate-commons-annotations"

version="3.3.0.ga"/>

<dependency groupId="org.springframework"artifactId="spring"

version="2.5"/>

<dependency groupId="commons-dbcp"artifactId="commons-dbcp"

version="1.2.2"/>

<dependency groupId="net.sourceforge.stripes"artifactId="stripes"

version="1.4.3"/>❶

<dependency groupId="tomcat"artifactId="servlet-api"version="5.5.12"/>❷

<dependency groupId="tomcat"artifactId="catalina-ant"

version="5.5.15"/>❸

<dependency groupId="tomcat"artifactId="jasper-compiler"

version="5.5.15"/>

<dependency groupId="tomcat"artifactId="jasper-runtime"

version="5.5.15"/>❹

</artifact:dependencies>

……

❶Stripes 这个 artifact 配置提供了使用 Stripes 框架所需要的 jar 库。

❷servlet-api 这个 artifact 配置提供了包含 J2EE Servlet 接口和支持类的库。HttpServletRequest 和 HttpServletResponse 类都是由这个 artifact 提供的。

❸catalina-ant artifact Id 提供了一些用于同运行的 Apache Tomcat 实例进行交互的 Ant 构建任务。简单来说,你将在构建文件中增加一个新的构建目标,它会用到来自这个 artifact 的 Tomcat 的 deploy 构建任务。

❹jasper-compiler 和 jasper-runtime 这两个 artifact,除了 catalina-ant 以外,Tomcat 的 deploy 标签也需要它们。

到这以后,下一步就是用 taskdef 建立 Catalina Ant 构建任务,为部署应用程序定义一个新的 target。Ant 的 deploy 构建任务将为 Tomcat 发送一个 tomcat-context.xml 文件(例 14-5),包括身份认证信息和 context 路径,如例 14-7 所示。

例 14-7:用于部署应用程序的 Ant 构建目标

……

<taskdef name="hibernatetool"

classname="org.hibernate.tool.ant.HibernateToolTask"

classpathref="project.class.path"/>

<!--Teach Ant how to use Tomcat's deploy task-->

<taskdef name="deploy"classpathref="dependency.class.path"

classname="org.apache.catalina.ant.DeployTask"/>

<target name="db"description="Runs HSQLDB database management UI

against the database file--use when application is not running">

<java classname="org.hsqldb.util.DatabaseManager"

fork="yes">

<classpath refid="project.class.path"/>

<arg value="-driver"/>

<arg value="org.hsqldb.jdbcDriver"/>

<arg value="-url"/>

<arg value="jdbc:hsqldb:${data.dir}/music"/>

<arg value="-user"/>

<arg value="sa"/>

</java>

</target>

……

<target name="qtest3"description="Retrieve all mapped objects"

depends="compile">

<java classname="com.oreilly.hh.QueryTest3"fork="true"failonerror="true">

<classpath refid="project.class.path"/>

</java>

</target>

<target name="deploy">

<deploy url="http://localhost:8080/manager"❶

username="tomcat"password="tomcat"❷

path="/stripesapp"❸

config="${basedir}/tomcat-context.xml"/>❹

</target>

……

❶deploy 构建任务的 url 属性用于指定 Apache Tomcat 提供的 manager servlet 的 URL。

❷username 和 password 属性指定管理器角色的用户身份验证信息,这些信息是在例 14-1 中配置的。

❸path 属性告诉 Tomcat,应用程序应该部署到什么上下文路径。

❹config 属性指定将要发送到 Tomcat 的上下文文件。这个文件如例 14-5 所示。

所有安排妥当以后,就应该可以运行 ant deploy 命令(如例 14-8 所示),再在 Web 浏览器中访问我们简单的 Web 应用程序了。

例 14-8:部署应用程序

$ant deploy

Buildfile:build.xml

deploy:

[deploy]OK-Deployed application at context path/stripesapp

BUILD SUCCESSFUL

Total time:3 seconds

上面示例输出中的"OK"表示 Tomcat 已经接受了新的应用程序。在浏览器中访问 http://localhost:8080/stripesapp,看看这个程序是否存在,运行的对不对。在默认情况下,Tomcat 将会查找和返回 Web 应用程序根目录下的 index.jsp 文件。因此,应用程序应该在浏览器中显示"Hello World",如图 14-1 所示。

图 14-1 Tomcat 显示"Hello World"

发生了什么事

虽然我们刚才进行的所有任务和 Stripes 或 Hibernate 没有任何关系,但是这些操作为使用 Stripes 铺平了道路。现在我们有了一个可以跑起来的 Apache Tomcat 安装实例,以及一个我们自己创建的运行良好的 Web 应用程序了。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。