您的位置:首页 > 运维架构 > 网站架构

利用resteasy框架构建rest webservice----第二波:使用不同的方式让resteasy发布我们的restful webservice 服务(实例、教程)

2014-02-21 09:30 1011 查看
基于resteasy版本:2.2.1.GA

第一波让我们一窥resteasy的真面目,本波就基于第一波中得例子来阐述下用不同的方式让resteasy发布我们的服务(要知其然还要知其所以然才能运用自如)

1.使用的 ServletContextListener 来初始化并发布我们的服务类

[html]
view plaincopy

<span style="color:#000000;"> <!DOCTYPE web-app PUBLIC    
     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"    
     "http://java.sun.com/dtd/web-app_2_3.dtd" >      
    <web-app>    
 <context-param>    
            <param-name>resteasy.resources</param-name>    
            <param-value>resteasy.server.Echo</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>/*</url-pattern>   
</servlet-mapping>   
</web-app></span>  

这是第一波中得web.xml,也就是用的listener来进行的服务发布:
查看源代码可以发现public class ResteasyBootstrap implements ServletContextListener,其实现了ServletContextListener 接口,通过获取

[html]
view plaincopy

<context-param>    
           <param-name>resteasy.resources</param-name>    
           <param-value>resteasy.server.Echo</param-value>    
       </context-param>    

如上参数进行了服务类的加载.

[html]
view plaincopy

resteasy.resources  

代表通过指定资源类的全路径名进行加载,有多个资源类可通过逗号分开
查看官方文档可以发现其他用于加载资源类的参数

resteasy.scan.resources   默认值:false   用途:设置为ture时,将自动搜索 WEB-INF/lib下面的 jars 和 WEB-INF/classes目录中有(@GET @POST ...)注解的class并注册为服务
可用上一波的例子替换相应参数进行测试(亲测木有问题)

2.使用 servlet Filter 注册服务类

web.xml如下

[html]
view plaincopy

<!DOCTYPE web-app PUBLIC  
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  
 "http://java.sun.com/dtd/web-app_2_3.dtd" >  
  
<web-app>  
   <servlet>  
      <servlet-name>Resteasy</servlet-name>  
      <servlet-class>  
         org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher  
      </servlet-class>  
       <init-param>  
            <param-name>javax.ws.rs.Application</param-name>  
            <param-value>resteasy.server.MyApplication</param-value>  
        </init-param>  
   </servlet>  
  
   <servlet-mapping>  
      <servlet-name>Resteasy</servlet-name>  
      <url-pattern>/*</url-pattern>  
   </servlet-mapping>  
</web-app>  

如上代码,我们发现相比前面例子去掉了listener,在servlet中多添加了一个

[html]
view plaincopy

javax.ws.rs.Application  

这是一个抽象类,是一个jax rs的标准规范,允许通过其子类注册你得资源类

请看MyApplication代码

[java]
view plaincopy

package resteasy.server;  
  
import java.util.HashSet;  
import java.util.Set;  
  
import javax.ws.rs.core.Application;  
  
public class MyApplication extends Application{  
  
    Set<Object> objectSet = new HashSet<Object>();  
    Set<Class<?>> classSet = new HashSet<Class<?>>();  
      
    public MyApplication()  
    {  
        objectSet.add(new Echo());  
//      classSet.add(Echo.class);  
    }  
    @Override  
    public Set<Class<?>> getClasses() {  
        // TODO Auto-generated method stub  
        return classSet;  
    }  
  
    @Override  
    public Set<Object> getSingletons() {  
        // TODO Auto-generated method stub  
        return objectSet;  
    }  
      
      
  
}  

通过构造函数添加了一个Echo的资源类实例,当然也可通过添加一个class来实现,二者选其一即可

3.使用 filter 注册服务类(也就是资源类)
作为servlet进行资源的注册,你会发现不能将静态文件(html,images)注册为资源,所以resteasy还提供了filter进行资源的注册,不妨碍其获取静态文件

继续引用上一个例子,只用修改其web.xml如下

[html]
view plaincopy

<!DOCTYPE web-app PUBLIC  
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  
 "http://java.sun.com/dtd/web-app_2_3.dtd" >  
  
<web-app>  
    <filter>  
        <filter-name>Resteasy</filter-name>  
        <filter-class>  
                org.jboss.resteasy.plugins.server.servlet.FilterDispatcher  
        </filter-class>  
        <init-param>  
            <param-name>javax.ws.rs.Application</param-name>  
            <param-value>resteasy.server.MyApplication</param-value>  
        </init-param>  
    </filter>  
    <filter-mapping>  
        <filter-name>Resteasy</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
</web-app> 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐