官网上的工程都是通过maven建立的,本文没有使用maven,所以搭建helloworld工程分如下4步:
1)建立web工程,导入RESTEasy依赖jar
这步比较简单,就不阐述了
2)配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<!-- 自动检索WEB-INF/lib下的jar以及@Provider标记的类和JAX-RS资源类(@Path, @GET, @POST等等),并注册 -->
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
<!-- 不加监听器就会造成Tomcat无法解析html -->
<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
</listener-class>
</listener>
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/rest</param-value>
</context-param>
</web-app>
注意:如果不加监听器,Tomcat在解析HTML时会报404错误,这个问题折磨了我好长时间。
关于resteasy.servlet.mapping.prefix,官方文档上说如果servlet-mapping的url-pattern不为"/*"就必须指明,就像我上面给出的配置一样。其实,不配置前缀也是可以的,但是服务类的路径必须以"/rest"开头,如下面的@Path("/hello")应改写成@Path("/rest/hello")。当然还是建议大家在配置文件中指明前缀。
3)编写服务类(姑且称为服务类)
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public class Hello {
@POST
@GET
@PUT
@Path("/world")
@Produces(MediaType.TEXT_PLAIN)
public String test(@FormParam("a") String[] a, @QueryParam("a") String[] a2) {
/**
* POST请求方式传递的参数被@FormParam 捕获到
* GET PUT DELETE(尽管没有添加注解)传递的参数则全部被@QueryParam 捕获到
*/
return print(a) + "----" + print(a2);
}
private String print(String[] a) {
if (a == null)
return "";
else {
StringBuffer sb = new StringBuffer();
for (String b : a) {
sb.append(b + " ");
}
return sb.toString();
}
}
}
这里我在一个test()方法上面加了多种请求方式@GET,@PUT,@POST,仅仅是为了好玩,真正在用的时候还是不建议这样使用。
4)编写client调用服务
<form action="./rest/hello/world" method="DELETE">
<input type="hidden" name="a" value='{b:"hello wolrd"}' />
<input type="hidden" name="a" value='{b:"hello pig"}' />
<input type="submit" value="OK" />
</form>
action的路径我使用的是相对路径,这样是可以访问到的,使用full path:http://localhost:8080/projectName/rest/hello/world当然也可以
5)效果图
运行结果图如下: