创建RESTEasy helloworld工程

来源:互联网 发布:维棠 for mac 编辑:程序博客网 时间:2024/06/05 23:51

官网上的工程都是通过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)效果图

运行结果图如下: