加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

利用resteasy框架构建rest webservice----第二波:使用不同的方

发布时间:2020-12-16 23:27:20 所属栏目:安全 来源:网络整理
导读:基于resteasy版本:2.2.1.GA 第一波让我们一窥resteasy的真面目,本波就基于第一波中得例子来阐述下用不同的方式让resteasy发布我们的服务 (要知其然还要知其所以然才能运用自如) 1.使用的 ServletContextListener 来初始化并发布我们的服务类 [html] view

基于resteasy版本:2.2.1.GA

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

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

[html] view plain copy
  1. <span?style="color:#000000;">?<!DOCTYPE?web-app?PUBLIC????
  2. ?????"-//Sun?Microsystems,?Inc.//DTD?Web?Application?2.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. ??
  16. <servlet-mapping>???
  17. <servlet-name>Resteasy</servlet-name>?<url-pattern>/*</url-pattern>???
  18. </servlet-mapping>???
  19. </web-app></span>??


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

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

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

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

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

如上代码,我们发现相比前面例子去掉了listener,在servlet中多添加了一个
[html] view plain copy
  1. javax.ws.rs.Application??
这是一个抽象类,是一个jax rs的标准规范,允许通过其子类注册你得资源类
请看MyApplication代码
[java] view plain copy
  1. package?resteasy.server;??
  2. ??
  3. import?java.util.HashSet;??
  4. import?java.util.Set;??
  5. ??
  6. import?javax.ws.rs.core.Application;??
  7. ??
  8. public?class?MyApplication?extends?Application{??
  9. ??
  10. ????Set<Object>?objectSet?=?new?HashSet<Object>();??
  11. ????Set<Class<?>>?classSet?=?new?HashSet<Class<?>>();??
  12. ??????
  13. ????public?MyApplication()??
  14. ????{??
  15. ????????objectSet.add(new?Echo());??
  16. //??????classSet.add(Echo.class);??
  17. ????}??
  18. ????@Override??
  19. ????public?Set<Class<?>>?getClasses()?{??
  20. ????????//?TODO?Auto-generated?method?stub??
  21. ????????return?classSet;??
  22. ????}??
  23. ??
  24. ????@Override??
  25. ????public?Set<Object>?getSingletons()?{??
  26. ????????//?TODO?Auto-generated?method?stub??
  27. ????????return?objectSet;??
  28. ????}??
  29. ??????
  30. ??????
  31. ??
  32. }??
通过构造函数添加了一个Echo的资源类实例,当然也可通过添加一个class来实现,二者选其一即可

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

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

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

[html] view plain copy
  1. <!DOCTYPE?web-app?PUBLIC??
  2. ?"-//Sun?Microsystems,?Inc.//DTD?Web?Application?2.3//EN"??
  3. ?"http://java.sun.com/dtd/web-app_2_3.dtd"?>??
  4. ??
  5. <web-app>??
  6. ????<filter>??
  7. ????????<filter-name>Resteasy</filter-name>??
  8. ????????<filter-class>??
  9. ????????????????org.jboss.resteasy.plugins.server.servlet.FilterDispatcher??
  10. ????????</filter-class>??
  11. ????????<init-param>??
  12. ????????????<param-name>javax.ws.rs.Application</param-name>??
  13. ????????????<param-value>resteasy.server.MyApplication</param-value>??
  14. ????????</init-param>??
  15. ????</filter>??
  16. ????<filter-mapping>??
  17. ????????<filter-name>Resteasy</filter-name>??
  18. ????????<url-pattern>/*</url-pattern>??
  19. ????</filter-mapping>??
  20. </web-app>
来源:http://blog.csdn.net/caizhh2009/article/details/6937932

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读