创建基于Java的资源 在本示例的开发过程中,对于基于Java的组件,我们将只是编写一个名为HelloWorldResource 的类,这个类位于com.mcnz.ws包中。这个类有一个叫做getMessage()的方法,它返回字符串‘Rest Never Sleeps’。这个方法本身并无多大意义,但是我们感兴趣的是在代码中的各个标识符。 当你为这个类编写代码时,要注意这个类必须被放在WEB- INF文件夹下的classes目录中,并且所在的文件夹结构,如下图所示,能够映射到包名com.mcnz.ws。
下面就是我们所要用到的代码,把它保存在上面指定的目录下以HelloWorldR……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
创建基于Java的资源
在本示例的开发过程中,对于基于Java的组件,我们将只是编写一个名为HelloWorldResource 的类,这个类位于com.mcnz.ws包中。这个类有一个叫做getMessage()的方法,它返回字符串‘Rest Never Sleeps’。这个方法本身并无多大意义,但是我们感兴趣的是在代码中的各个标识符。
当你为这个类编写代码时,要注意这个类必须被放在WEB- INF文件夹下的classes目录中,并且所在的文件夹结构,如下图所示,能够映射到包名com.mcnz.ws。
下面就是我们所要用到的代码,把它保存在上面指定的目录下以HelloWorldResource.java命名的一个文件中。
要实现的类
以下是引用片段: package com.mcnz.ws; import javax.ws.rs.*; @Path("helloworld") public class HelloWorldResource { @GET @Produces("text/plain") public String getMessage() { return "Rest Never Sleeps"; } } |
前面我们说过,这个服务要只响应HTTP GET请求,因此,你会看到,这个getMessage()方法带有一个@GET的修饰符。并且,后面紧跟着一个@Produces标记,指示这个方法仅仅返回一个普通文本("text/plain"),这是MIME类型中最简单的一种。当客户通过指定的URL调用我们的服务时,这个文本字符串“Rest Never Sleeps”就会被返回。
在最开始的时候,我们就已经提到,调用这个服务所用的URL将会是:http://localhost:8080/restful/resources/helloworld
你会发现,@Path("helloworld") 标记直接对应了在URL末尾处指定的资源名称。
在Java文件保存完毕后,可以使用下述命令来编译我们的代码:
以下是引用片段: C:> c:_jdk1.6binjavac -classpath "C:_restfulWEB-INFlib*" C:_restfulWEB-INFclassescommcnzws*.java |
编译结束后,原来保存.java文件所在的目录下将会生成一个相同名称的.class文件。
在部署描述符中配置Jersey
在我们将需要的jar文件放到WEB-INFlib目录下,HelloWorldResource.java文件编译结束后,在部署前的最后一个步骤是,编辑部署描述符以便让Servlet容器知道这个Jersey实现将被用来处理RESTful Web服务的调用请求。因此,创建一个名为web.xml的文件,把它放到WEB-INF目录下,其内容如下:
以下是引用片段: <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <servlet> <servlet-name>RestfulContainer</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>com.mcnz.ws</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>RestfulContainer</servlet-name> <url-pattern>/resources/*</url-pattern> </servlet-mapping> </web-app> |
对于这个web.xml文件,有两点值得注意。其一是,一个Servlet已经被配置为处理RESTful调用。这个Servlet的名称是ServletContainer ,它是我们从Sun网站上下载下来的Jersey库文件的一部分,我们早已经将它放到WEB应用的lib目录下了。
另一个值得注意的重要事情是,在Servlet映射中,“url-pattern”的名称为/resources/*。注意:URL-pattern(在本例中是“resources”)对应于URL中在资源名称(在本例中是“helloworld”)之前,在WEB应用context root(在本例中是“restful”)之后的那个部分。http://localhost:8080/restful/resources/helloworld
现在,web.xml已经写好并保存完毕,我们可以将这个应用打包成一个war文件并部署到Tomcat了。你可以最终检查一下,你的开发环境应该在以下目录结构中包含有以下资源:
以下是引用片段: + ( root folder C:_restful ) ++ WEB-INF ++++ web.xml ++++ lib ++++++ asm-3.1.jar ++++++ jackson-core-asl-1.7.1.jar ++++++ jackson-jaxrs-1.7.1.jar ++++++ jackson-mapper-asl-1.7.1.jar ++++++ jackson-xc-1.7.1.jar ++++++ jersey-client-1.6.jar ++++++ jersey-core-1.6.jar ++++++ jersey-json-1.6.jar ++++++ jersey-server-1.6.jar ++++++ jettison-1.1.jar ++++++ jsr311-api-1.1.1.jar ++++ classes ++++++ commcnzwsHelloWorldResource.class ++++++ commcnzwsHelloWorldResource.java |
部署及测试
在_restful目录下面执行以下命令,能够将_restful目录下的所有资源文件打包成一个可部署的war文件。这个命令实际上会把这个war文件放到Tomcat 7安装时创建的webapps目录下面。如果你安装Tomcat时指定了不同的目录名称,下面的命令要做相应修改:
以下是引用片段: C:_restful> %JAVA_HOME%binjar -cvf C:_tomcatwebappsrestful.war *.* |
将war文件放到webapps目录下后,剩下的事情就只有启动Tomcat和调用这个服务了。
我们已经将servlet引擎安装到了_tomcat目录,下述命令可以启动Tomcat:
以下是引用片段: C:_tomcatbin> startup |
一旦Tomcat启动起来以后,由于在一个WEB浏览器中输入一个URL将会触发一个HTTP GET调用,这个RESTful WEB服务可以通过一个浏览器经由下述的URL来调用:http://localhost:8080/restful/resources/helloworld(注意,context root目录restful,对应的是war文件restful.war的名称)
通过Chrome浏览器调用这个服务后的结果如下图所示:
总结
搞定!你看,配置一个RESTful WEB服务的基本开发环境是多么轻松,编码实现一个极简易的RESTful WEB服务(本例目前只能处理GET请求)是多么容易!
作者
相关推荐
-
SAP收购CallidusCloud 与Salesforce竞争
一直被称为后台办公巨头的SAP现在似乎也想在前台办公大展拳脚。 最新的迹象是SAP收购CallidusClou […]
-
内存数据网格提供商一头扎进Java
10年的时间里,应用性能解决方案提供商Alachisoft一直在用NCache(针对N-Tier和网格计算.NET应用的内存计算和数据网格产品)为.NET社区服务。
-
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高, 直到把内存吃完应用崩溃,但是这个wrapper
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高 […]
-
Google App Engine for Java 对于目前中国需要学习吗?