java Rest学习-第一个Java REST 服务(6)- 第一个Servlet容器服务

文章标签: java-rest
2014-12-19 21:07:31     24 人阅读    

上一节讲述的REST 服务是基于Java SE 环境的,本节将介绍Java EE 环境下的REST 服务,即REST 式的Web 服务。接下来介绍基于Servlet 环境的Jersey 官方示例simple-service-webapp,并演示这个Web 服务如何在Maven 插件、Servlet 容器和Java EE 容器中运行该示例。
2.2.1 创建和分析Web服务
simple-service-webapp 项目也是Jersey 提供的官方文档中的例子,同样是一个Maven 原型。在控制台执行如下命令来生成Maven 原型项目simple-service-webapp ,项目的目标存储路径由读者自行选择。执行生成的命令如下所示:

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-webapp 
-DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false 
-DgroupId=com.example -DartifactId=simple-service-webapp -Dpackage=com.example 
-DarchetypeVersion=2.9


获取源代码后,通过“ tree /f ”命令纵览 simple-service-webapp 项目,如图 2-3 所示。对比simple-service 项目可以发现,这个 Servlet 容器内的版本没有用于服务器处理的入口类,多出来Web 工程中两个典型的文件 index.jsp 和web.xml。下面通过分析文件来了解 Web RESTful服务。

1. Servlet依赖
如图2-3 所示,位于项目的根目录下的 pom.xml 文件是Maven 项目的配置文件。在pom.xml 文件中,示例默认使用的是支持向下兼容Servlet 2.x 的包jersey-container-servlet-core 。如果读者需要使用Servlet 3 版本,那么应当首先修改这个配置,再进行编译、测试和调试。关于Servlet 容器的依赖包说明,见1.4 节的详述。pom.xml 中的相关配置如下所示。

<!--servlet 2.x -->
<dependency>
 <groupId>org.glassfish.jersey.containers</groupId>
 <artifactId>jersey-container-servlet-core</artifactId>
</dependency>
<!--servlet 3.x -->
<dependency>
 <groupId>org.glassfish.jersey.containers</groupId>
 <artifactId>jersey-container-servlet</artifactId>
</dependency>

2. 资源类分析
使用读者熟悉的编辑器打开这个资源文件,这里以文本编辑器为例,示例如下。notepad src\main\java\com\example\MyResource.java从该类的实现中可以发现,REST 的资源类的定义在Java SE 环境和Servlet 容器内是一样的。由此可以理解,REST 服务的资源路径是由服务器路径和资源的相对路径组成。一个项目的相对路径是固定的,因此资源类及其子资源类的定义并不关心所处的容器环境,即服务器路径,而只关心其相对的资源路径。
3. Web 服务首页分析
index.jsp 是该示例的首页,需要指出的是该示例其实是一个纯HTML 实现,虽然扩展名是jsp,但其实现中并无JSP 脚本。使用文本编辑器打开index.jsp 文件:notepad src\main\webapp\index.jsp,示例如下。

<html>
<body>
<h2>Jersey RESTful Web Application!</h2>
//关注点1 :资源路径链接
<p><a href="webapi/myresource">Jersey resource</a>
<p>Visit <a href="http://jersey.java.net">Project Jersey Website</a>
    for more information on Jersey!
</body>
</html>

在这个简单的首页文件中,关键的一行是指向webapi/myresource 这个资源路径的链接,见关注点1 。当用户单击这个链接时,浏览器发起GET 请求,资源路径为webapi/myresource,流程进入资源类MyResource的getIt() 方法。
4. Web 服务配置
配置文件web.xml 中定义了Web 服务的信息。使用文本编辑器打开web.xml 文件:notepad src\main\webapp\WEB-INF\web.xml该文件可以分成3 块进行阅读,示例如下。
第一块:定义Servlet 版本。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/Java EE"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/Java EE http://java.sun.com/
xml/ns/Java EE/web-app_2_5.xsd">
在这段代码中,列出了对Servlet 版本的定义,本示例默认使用的版本是2.5。需要说明的是,如果使用Servlet 3.0,那么web.xml 文件并不是必要的,我们将在本章稍后详述。第二块:定义Servlet 。
<servlet>
 <servlet-name>Jersey Web Application</servlet-name>
 <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
 <init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>com.example</param-value>
 </init-param>
 <load-on-startup>1</load-on-startup>
</servlet>

在这段代码中,对Servlet 进行了定义,包括servlet-name、servlet-class和init-param。对于2.5 版本,servlet-class是不可或缺的。初始化参数指定了加载服务时要扫描的包名,这里定义的是com.example 包。
第三块:定义servlet-mapping ,即Servlet 的作用域。

<servlet-mapping>
 <servlet-name>Jersey Web Application</servlet-name>
 <url-pattern>/webapi/*</url-pattern>
</servlet-mapping>


在这段代码中,列出了servlet-mapping 的定义,将上述定义的Servlet 的作用域匹配到/webapi/* 的路径上。在分析了simple-service-webapp 项目的内容后,我们来测试这个Servlet 项目在容器内的运行情况。在接下来的3 个小节中,我们将simple-service-webapp 项目分别运行在三种不同的容器环境中,为不同需求的读者提供参考,分别是Maven 插件Jetty 、Servlet 容器Tomcat和Jave EE 容器GlassFish。


原文地址:http://www.itmmd.com/201412/347.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

Spring mvc新手入门(11)-返回json 字符串的其他方式   上一篇
下一篇  Java程序常用算法 - java字符串大小写转换

精彩回复
发表评论
姓名:       

《程序员app》专门为程序员量身定做!