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

基于resteasy版本:2.2.1.GA

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

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

 <!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>



 这是第一波中得web.xml,也就是用的listener来进行的服务发布: 

查看源代码可以发现public class ResteasyBootstrap implements ServletContextListener,其实现了ServletContextListener 接口,通过获取

 <context-param>  
            <param-name>resteasy.resources</param-name>  
            <param-value>resteasy.server.Echo</param-value>  
        </context-param>  
如上参数进行了服务类的加载.

resteasy.resources
代表通过指定资源类的全路径名进行加载,有多个资源类可通过逗号分开

查看官方文档可以发现其他用于加载资源类的参数

resteasy.scan.resources   默认值:false   用途:设置为ture时,将自动搜索 WEB-INF/lib下面的 jars 和 WEB-INF/classes目录中有(@GET @POST ...)注解的class并注册为服务
可用上一波的例子替换相应参数进行测试(亲测木有问题)
2.使用 servlet Filter 注册服务类
web.xml如下
<!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中多添加了一个
javax.ws.rs.Application
这是一个抽象类,是一个jax rs的标准规范,允许通过其子类注册你得资源类
请看MyApplication代码
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如下

<!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>


下一波预告:将对jax rs规范中得各种注解做一个大概介绍,当然会以实际例子出发
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值