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

基于resteasy版本:2.2.1.GA

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

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

  1. <spanstyle="color:#000000;"><!DOCTYPEweb-appPUBLIC
  2. "-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN"
  3. "http://java.sun.com/dtd/web-app_2_3.dtd">
  4. <web-app>
  5. <context-param>
  6. <param-name>resteasy.resources</param-name>
  7. <param-value>resteasy.server.Echo</param-value>
  8. </context-param>
  9. <listener>
  10. <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
  11. </listener>
  12. <servlet><servlet-name>Resteasy</servlet-name>
  13. <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
  14. </servlet>
  15. <servlet-mapping>
  16. <servlet-name>Resteasy</servlet-name><url-pattern>/*</url-pattern>
  17. </servlet-mapping>
  18. </web-app></span>


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

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

  1. <context-param>
  2. <param-name>resteasy.resources</param-name>
  3. <param-value>resteasy.server.Echo</param-value>
  4. </context-param>
如上参数进行了服务类的加载.
  1. resteasy.resources
代表通过指定资源类的全路径名进行加载,有多个资源类可通过逗号分开

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

resteasy.scan.resources 默认值:false 用途:设置为ture时,将自动搜索 WEB-INF/lib下面的 jars 和 WEB-INF/classes目录中有(@GET @POST ...)注解的class并注册为服务
可用上一波的例子替换相应参数进行测试(亲测木有问题)
2.使用 servlet Filter 注册服务类
web.xml如下
  1. <!DOCTYPEweb-appPUBLIC
  2. "-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN"
  3. "http://java.sun.com/dtd/web-app_2_3.dtd">
  4. <web-app>
  5. <servlet>
  6. <servlet-name>Resteasy</servlet-name>
  7. <servlet-class>
  8. org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
  9. </servlet-class>
  10. <init-param>
  11. <param-name>javax.ws.rs.Application</param-name>
  12. <param-value>resteasy.server.MyApplication</param-value>
  13. </init-param>
  14. </servlet>
  15. <servlet-mapping>
  16. <servlet-name>Resteasy</servlet-name>
  17. <url-pattern>/*</url-pattern>
  18. </servlet-mapping>
  19. </web-app>

如上代码,我们发现相比前面例子去掉了listener,在servlet中多添加了一个
  1. javax.ws.rs.Application
这是一个抽象类,是一个jax rs的标准规范,允许通过其子类注册你得资源类
请看MyApplication代码
  1. packageresteasy.server;
  2. importjava.util.HashSet;
  3. importjava.util.Set;
  4. importjavax.ws.rs.core.Application;
  5. publicclassMyApplicationextendsApplication{
  6. Set<Object>objectSet=newHashSet<Object>();
  7. Set<Class<?>>classSet=newHashSet<Class<?>>();
  8. publicMyApplication()
  9. {
  10. objectSet.add(newEcho());
  11. //classSet.add(Echo.class);
  12. }
  13. @Override
  14. publicSet<Class<?>>getClasses(){
  15. //TODOAuto-generatedmethodstub
  16. returnclassSet;
  17. }
  18. @Override
  19. publicSet<Object>getSingletons(){
  20. //TODOAuto-generatedmethodstub
  21. returnobjectSet;
  22. }
  23. }
通过构造函数添加了一个Echo的资源类实例,当然也可通过添加一个class来实现,二者选其一即可

3.使用 filter 注册服务类(也就是资源类)

作为servlet进行资源的注册,你会发现不能将静态文件(html,images)注册为资源,所以resteasy还提供了filter进行资源的注册,不妨碍其获取静态文件

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

  1. <!DOCTYPEweb-appPUBLIC
  2. "-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN"
  3. "http://java.sun.com/dtd/web-app_2_3.dtd">
  4. <web-app>
  5. <filter>
  6. <filter-name>Resteasy</filter-name>
  7. <filter-class>
  8. org.jboss.resteasy.plugins.server.servlet.FilterDispatcher
  9. </filter-class>
  10. <init-param>
  11. <param-name>javax.ws.rs.Application</param-name>
  12. <param-value>resteasy.server.MyApplication</param-value>
  13. </init-param>
  14. </filter>
  15. <filter-mapping>
  16. <filter-name>Resteasy</filter-name>
  17. <url-pattern>/*</url-pattern>
  18. </filter-mapping>
  19. </web-app>

你可能感兴趣的:(webservice)