webservice(resteasy demo)

来源:互联网 发布:淘宝卖茶叶要怎么办理 编辑:程序博客网 时间:2024/05/17 12:49

1.建立web工程MyResteasy

2.导入jar包

0.servlet-api-2.5.jar
1.guice-2.0.jar
2.resteasy-guice-2.1.0.GA.jar
3.jaxrs-api-2.1.0.GA.jar
4.resteasy-jaxrs-2.1.0.GA.jar
5.javassist-3.8.0.GA.jar
6.scannotation-1.0.2.jar

客户端额外加上:
7.commons-codec-1.2.jar
8.commons-httpclient-3.1.jar
9.commons-logging-1.0.4.jar
(测试的时候客户端,服务端jar包都全部导入了)

3.配置web.xml

 <context-param>     <param-name>resteasy.scan(resteasy.resources)</param-name>     <param-value>true(*.*.*java)</param-value>  </context-param>  <listener>       <listener-class>           org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap       </listener-class>   </listener>    <servlet>       <servlet-name>Resteasy</servlet-name>       <servlet-class>            org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher       </servlet-class>   </servlet>   <servlet-mapping>       <servlet-name>Resteasy</servlet-name>       <url-pattern>/resteasy/*</url-pattern>   </servlet-mapping>

解释:

   <context-param>     <param-name>resteasy.scan(resteasy.resources)</param-name>     <param-value>true(*.*.*java)</param-value>  </context-param>

(1) param-name写resteasy.scan
param-value写true
这是自动的意思。当匹配到resteasy的路径的时候,会自动找适合的资源类。
(2) (括号里的)param-name写resteasy.resources
param-value写具体的服务端的资源类(如后面的com.zhshch.test.Hello)
当匹配到resteasy的路径的时候,会去找指定的资源类

4.编写服务端资源类
接口:
@Path(“resteasy/resource”)
public interface IHello {

@Path("/hello")@GETpublic String hello();@Path("/hello/{name}")@GETpublic String helloName(@PathParam("name") String name);@Path("/obj")@POSTpublic String json(String json);

}

解释:
(1)
web.xml配置了

 <servlet-mapping>       <servlet-name>Resteasy</servlet-name>       <url-pattern>/resteasy/*</url-pattern>   </servlet-mapping>

类上面定义了路径 @Path(“resteasy/resource”)
(一定要写resteasy/,因为要和web.xml匹配,如果直接resource的话,就会找不到)
当url输入http://localhost:8080/MyResteasy/resteasy/resource的时候,就会找这个资源

(2)

@Path("/hello")@GETpublic String hello();

http://localhost:8080/MyResteasy/resteasy/resource/hello,会找这个方法
(@GET注解的,可以直接在浏览器查看,@POST标注的,不可以在浏览器查看)

@Path("/hello/{name}")@GETpublic String helloName(@PathParam("name") String name);{name}这样就作为了参数,@PathParam("name") String name定义使用这个参数

如果URL=http://localhost:8080/MyResteasy/resteasy/resource/hello/zxc
相当于helloName(zxc);把zxc传给了这个方法

@Path("/obj")@POSTpublic String json(String json);

对于传递对象,集合比较复杂的,resteasy有相应的配置,这里是个demo,就不深入研究。
这里对于任何对象,都json化,变成json来传递.
这里是post方法

实现类:

public class Hello implements IHello {

public String hello() {    return "hello" ;}public String helloName(String name) {    String n = null;    try {        n = URLDecoder.decode(name,"utf-8");    } catch (UnsupportedEncodingException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }    return  name ;}public String json(String json) {    String n = null;    try {        n = URLDecoder.decode(json,"utf-8");    } catch (UnsupportedEncodingException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }    return  json ;}   

}

5.
做好前面几步:
2)导入jar包
3)配置xml
4)配置服务资源类
然后运行web工程,然后在浏览器查看其中的第一个注解的
接口:
@Path(“/hello”)
@GET
public String hello();
实现:
public String hello() {
return “hello” ;
}
一般这个方法就是浏览器测试webservice是否配置成功.
浏览器测试:
http://localhost:8080/MyResteasy/resteasy/resource/hello
如下图
这里写图片描述
webservice配置成功

6.客户端测试

public class TestClient {

public static void main(String[] args) throws Exception{    testPost();}public static void testGet() throws Exception{    //定义资源访问路径    String url = "http://localhost:8080/MyResteasy/resteasy/resource/hello/zhshch" ;    //2.连接目标    ClientRequest client = new  ClientRequest(url )  ;    //3.getTarget只能访问注解的@GET方法,postTarget访问@POST方法    //String.class是返回的类型    String result = client.getTarget(String.class) ;    System.out.println(result);}public static void testPost() throws Exception{    String url = "http://localhost:8080/MyResteasy/resteasy/resource/obj" ;    //对于webservice的调用,因为传输数据涉及到中文,所以发的是要转码,那边接的时候要解码    String para = "周星驰" ;    para = URLEncoder.encode(para,"utf-8") ;    ClientRequest client = new ClientRequest( url )  ;    //post参数要用下面这种传输    client.body("text/plain", para) ;    String result = client.postTarget(String.class) ;    //同理,传过来的是转码的数据,这边接的时候也要解码    result = URLDecoder.decode(result,"utf-8") ;    System.out.println(result);}

}
对于对象,集合,想测试的可以自己json化试一下。
demo

1 0
原创粉丝点击