- 译者序
- 前言
- 本书怎么使用
- 本书排版字体约定
- 本书网站
- 致谢
- 第一部分 Hibernate 快速入门
- 第 1 章 安装和设置
- 第 2 章 映射简介
- 第 3 章 驾驭 Hibernate
- 第 4 章 集合与关联
- 第 5 章 更复杂的关联
- 第 6 章 自定义值类型
- 第 7 章 映射标注
- 第 8 章 条件查询
- 第 9 章 浅谈 HQL
- 第二部分 与其他工具的集成
- 第 10 章 将 Hibernate 连接到 MySQL
- 第 11 章 Hibernate 与 Eclipse:Hibernate Tools 使用实战
- 第 12 章 Maven 进阶
- 第 13 章 Spring 入门:Hibernate 与 Spring
- 第 14 章 画龙点睛:用 Stripes 集成 Spring 和 Hibernate
- 附录 A Hibernate 类型
- 附录 B Criteria API
- 附录 C Hibernate SQL 方言
- 附录 D Spring 事务支持
- 附录 E 参考资源
- 作者简介
- 封面介绍
创建 Web 应用程序
既然 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 应用程序了。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论