使用 Apache Wink、Eclipse 和 Maven 开发 RESTful Web 服务(3)
 
- UID
- 1066743
|

使用 Apache Wink、Eclipse 和 Maven 开发 RESTful Web 服务(3)
Apache Wink HelloWorld 服务我们来检查一下 apps 模块中的 HelloWorld Java 类。在 Project Explorer 视图中,单击 apps > HelloWorld > src > main,然后打开文件 HelloWorld.java,该文件的结构如 所示。
清单 1. HelloWorld.java 文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| package org.apache.wink.example.helloworld;
...
@Path("/world")
public class HelloWorld {
public static final String ID = "helloworld:1";
@GET
@Produces(MediaType.APPLICATION_ATOM_XML)
public SyndEntry getGreeting() {
SyndEntry synd = new SyndEntry(new SyndText("Hello World!"), ID, new Date());
return synd;
}
}
|
HelloWorld 是一个 JAX-RS 资源(或服务),正如其类定义前面的 @Path("/world") 注释所示。字符串 "/world" 是该资源的相对根 URI。JAX-RS 将匹配相对 URI "/world" 的 HTTP 请求路由到 HelloWorld 类的方法。
HelloWorld 类的惟一方法 — getGreeting — 拥有一个 @GET 注释,表示它将服务于 HTTP GET 请求。
@Produces(MediaType.APPLICATION_ATOM_XML) 注释表明 HTTP 响应的媒体类型 — 即,HTTP 响应头部中的 Content-Type 字段的值。
与相对 URI "/world" 关联的绝对 URI 由部署描述符 web.xml 中的设置决定,这个部署描述符驻留在 HelloWorld/src/main/webapp/WEB-INF 中,如 所示。
图 4. HelloWorld 应用程序的部署描述符 注意,URI 模式 /rest/* 被绑定到 restSdkService servlet,这个 servlet 的 context path 是 HelloWorld,由 HelloWorld/pom.xml 文件中的 <finalName> 元素定义。这样,HelloWorld 资源的绝对 URI 是:
1
| http://host:port/HelloWorld/rest/world
|
中的 servlet 名称 restSdkService 引用 org.apache.wink.server.internal.servlet.RestServlet Apache Wink 类,如图中的 <servlet> 元素所示。RestServlet 类使用初始参数 applicationConfigLocation 传递 HelloWorld 类的名称,这个初始参数反过来指向位于 HelloWorld/src/main/webapp/WEB-INF 文件夹中的 web.xml 旁边的 application 文件。这个 application 文件只有一行,即 HelloWorld 资源的限定名:
1
| org.apache.wink.example.helloworld.HelloWorld
|
RestServlet servlet 可以在 “无 JAX-RS 感知” 的 servlet 容器中运行,从而支持将 JAX-RS 服务轻松部署到 “无 JAX-RS 感知” 的容器中。
我们现在开始构建 HelloWorld 服务,然后将其部署到 Tomcat 6.0 servlet 容器中并运行。
构建 HelloWorld在 Eclipse 中,可以使用 m2eclipse 插件来构建、部署和运行 HelloWorld。首先,编译源代码并为 HelloWorld 服务构建 Web 归档 (WAR) 文件。要构建这个服务,指示 m2eclipse 执行安装生命周期阶段。(执行一个 Maven 生命周期阶段将触发项目生命周期中的此前阶段的执行。)要执行安装阶段,在 Project Explorer 视图中右键单击 HelloWorld,然后单击 Run As > Maven install,如 所示。
图 5. 执行 Maven 安装阶段 Maven install” 路径的屏幕快照。" width="572" height="490">Maven (从中央资源库 http://repo1.maven.org/maven2 或从镜像资源库)下载所有依赖项,并在 Windows® 中的 %HOMEPATH%\.m2\repository 或 Linux® 中的 $HOME/.m2/repository 下构建本地资源库。Maven 执行的动作记录在 Eclipse 窗口的 Console 视图中。
如果安装阶段成功结束,那么 WAR 文件 HelloWorld.war 就构建在目标目录下并部署到本地资源库中,Console 视图将显示消息 “Build successful”。
将 HelloWorld 部署到 Tomcat您将使用 Maven 的 Tomcat 插件。(与 Eclipse 一样,Maven 通过插件提供大量功能。)您必须将 Tomcat 插件的位置告知 Maven,方法是指定插件的 groupId 和 artifactId,如 所示(pom.xml 中的 45-46 行)。
图 6. Tomcat Maven 插件 您还需要告知 Maven 用于访问 Tomcat manager 应用程序的用户名和密码。Maven 使用 manager 应用程序来指导 Tomcat 部署或取消部署一个 Web 应用程序。按照以下步骤告知 Maven 身份验证信息:
- 声明 tomcat-maven-plugin 工件的一个 Tomcat 服务器配置 — 称为 tomcat-localhost,如 所示(pom.xml 中的 47-49 行)
- 在 Maven 设置文件 settings.xml(位于 Windows 的 %HOMEPATH%\.m2\ 或 Linux 的 $HOME/.m2 下)中定义这个配置,如 所示。
清单 2. Maven settings.xml 文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <?xml version="1.0" encoding="UTF-8"?>
<settings
xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>tomcat-localhost</id>
<username>admin</username>
<password>admin</password>
</server>
</servers>
</settings>
|
|
|
|
|
|
|