JAVA EE6 引入的一个新技术: JAX-RS( Java API for RESTful Web Services )。这 是一个Java 编程语言的应用程序接口 ,支持按照表述性状态转移(REST)架构风格创建Web服务。它有好几种实现方式
JAVA EE6 引入的一个新技术:JAX-RS(Java API for RESTful Web Services)。这是一个Java 编程语言的应用程序接口,支持按照表述性状态转移(REST)架构风格创建Web服务。它有好几种实现方式,而Jersey是其参考实现方式。Jersey的详细介绍请参考:Jersey官网。
说明:Jsersey默认使用maven框架,这里假设你已经安装好maven及tomcat服务。
一 新建测试项目
这一步将新建一个JavaEE Web Application,可以打包成war包并部署到服务器上。 执行下面的mvn命令新建工程。
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.22.2其中groupId,
artifactId
,package
可以更换。
理论上也可以用eclipse创建这个工程,但本人在eclipse的maven模板中找不到jersey-quick-webapp,所以还是使用的命令创建。
创建好后默认的工程目录是这样的:
如上图,工程模板非常简单,只有如上四个文件,不需要任何修改便能测试。其中MyResouce.java代码如下:
package com.example; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; /** * Root resource (exposed at "myresource" path) */ @Path("myresource") public class MyResource { /** * Method handling HTTP GET requests. The returned object will be sent * to the client as "text/plain" media type. * * @return String that will be returned as a text/plain response. */ @GET @Produces(MediaType.TEXT_PLAIN) public String getIt() { return "Got it!"; } }
其中@Path和@GET指明了使用get方法访问子路径myresource便会返回"Got it!"。
web.xml中还配置了servlet-mapping:
<servlet-mapping> <servlet-name>Jersey Web Application</servlet-name> <url-pattern>/webapi/*</url-pattern> </servlet-mapping>
这样在本机部署好项目后,访问 localhost:8080/simple-service-webapp/webapi/myresource便会得到“Got it!”的字符串。
二 测试
这一步可以在eclipse上完成。但这里介绍如何打包成war并部署到tomcat。 在工程的pom.xml目录运行
mvn clean package
这样会在该目录下生成一个target文件夹,将target下面的simple-service-webapp.war拷贝到tomcat的webapps下面。 启动tomcat服务:
startup.bat启动成功后再浏览器中访问: 测试OK!
三 使用Json
官方文档中介绍了好几种方法,这里介绍基于JAXB的MOXy方法。这个方法使用起来也很简单。只需要把pom.xml中相应的注释去掉即可
<!-- uncomment this to get JSON support <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-moxy</artifactId> </dependency> -->去掉注释后添加测试类User.java。代码如下:
package com.example; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.xml.bind.annotation.*; @Path("user/{username}") @XmlRootElement public class User { public String name; public int age; public User(){} public User(String name, int age){ this.name = name; this.age = age; } @GET @Produces("application/json") public User getUser(@PathParam("username") String userName){ return new User(userName, 28); } }
完成后按照第二部重新部署,在浏览器中测试如下:
后记:官方文档中还详细介绍了HTTP的POST,PUT,DELETE及URL中的参数处理,还有更多关于Jersey的知识。欲了解更多请参考官网。 完整工程下载: simple-service-webapp