5.6. 添加J2EE依赖

为了编写一个 servlet ,我们需要添加 Servlet API 作为项目依赖。 Servlet 规格说明是一个 JAR 文件,它能从 Sun Microsystems 的站点下载到 http://java.sun.com/products/servlet/download.htmlJAR 文件下载好之后你需要把它安装到位于 ~/.m2/repository 的 Maven 本地仓库。你必须为所有 Sun Microsystems 维护的 J2EE API 重复同样的过程,包括 JNDIJDBC, Servlet, JSPJTA, 以及其它。 如果你不想这么做因为觉得这样太无聊了,其实不只有你这么认为。 幸运的是,有一种更简单的方法来下载所有这些类库并安装到本地仓库 —— Apache Geronimo 的独立的开源实现。

很多年以来,获取 Servlet 规格说明 JAR 文件的唯一方式是从 Sun Microsystems 下载。 你必须到 Sun 的 web 站点,同意并且点击它的许可证协议,这样才能访问 Servlet JAR。这是必须的,因为 Sun 的规格说明 JAR 文件并没有使用一个允许再次分发的许可证。 很多年来编写一个 Servlet 或者使用 JDBC 之前你必须手工下载 Sun 的构件。 这很乏味并且令人恼火,直到 Apache Geronimo 项目创建了很多通过 Sun 认证的企业级规格说明实现。 这些规格说明 JAR 是按照 Apache 软件许可证版本 2.0 发布的,该许可证允许对源代码和二进制文件进行免费的再次分发。 现在,对你的程序来说,从 Sun Microsystems 下载的 Servlet API JAR 和从 Apache Geronimo 项目下载的 JAR 没什么大的差别。 它们同样都通过了 Sun Microsystems 的严格的一个测试兼容性工具箱(TCK)。

添加像 JSP API 或者 Servlet API 这样的依赖现在很简单明了了,不再需要你从 web 站点手工下载 JAR 文件然后再安装到本地仓库。 关键是你必须知道去哪里找,使用什么 groupIdartifactId, 和 version 来引用恰当的 Apache Geronimo 实现。给 pom.xml 添加如下的依赖元素以添加对 Servlet 规格说明 API 的依赖。.

Example 5.7. 添加 Servlet 2.4 规格说明作为依赖

<project>
  [...]
  <dependencies>
    [...]
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-servlet_2.4_spec</artifactId>
      <version>1.1.1</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  [...]
</project>

所有 Apache Geronimo 规格说明的实现的 groupId 都是 org.apache.geronimo.specs 。这个 artifactId 包含了你熟悉的规格说明的版本号;例如,如果你要引入 Servlet 2.3 规格说明,你将使用的 artifactIdgeronimo-servlet_2.3_spec ,如果你想要引入 Servlet 2.4 规格说明,那么你的 artifactId 将会是 geronimo-servlet_2.4_spec 。你必须看一下 Maven 的公共仓库来决定使用什么版本。 最好使用某个规格说明实现的最新版本。 如果你在寻找某个特定的 Sun 规格说明对应的 Apache Geronimo 项目,我们已经在附录归纳了一个可用规格说明的列表。

这里还有必要指出的是我们的这个依赖使用了 provided 范围。这个范围告诉 Maven jar 文件已经由容器“提供”了,因此不再需要包含在 war 中。

如果你对在这个简单 web 应用编写自定义 JSP 标签感兴趣,你将需要添加对 JSP 2.0 规格说明的依赖。 使用以下配置来加入这个依赖。

Example 5.8. 添加 JSP 2.0 规格说明作为依赖

<project>
  [...]
  <dependencies>
    [...]
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-jsp_2.0_spec</artifactId>
      <version>1.1</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  [...]
</project>

在添加好这个 Servlet 规格说明依赖之后,运行 mvn clean install ,然后运行 mvn jetty:run

[tobrien@t1 simple-webapp]$ mvn clean install
...
[tobrien@t1 simple-webapp]$ mvn jetty:run
[INFO] [jetty:run]
...
2007-12-14 16:18:31.305::INFO:  jetty-6.1.6rc1
2007-12-14 16:18:31.453::INFO:  No Transaction manager found - if your webapp requires one,\
           please configure one.
2007-12-14 16:18:32.745::INFO:  Started [email protected]:8080
[INFO] Started Jetty Server

到此为止,你应该能够获取 SimpleServlet 的输出。 在命令行,你可以使用 curl 在标准输出打印 servlet 的输出。

~/examples$ curl http://localhost:8080/simple-webapp/simple
SimpleServlet Executed