辣鸡框架,完全不建议使用。

首先需要能在maven中获取jersey-webapp的Archetype,才能较好地完成创建工作、

一、实现流程

(1)使用eclipse中的maven插件创建jersey-webapp项目

如果找不到这个Archetype,可以参考我的上一篇文章

maven 创建项目时缺少想要的Archetype怎么办?

1

(2)创建项目之后如果发现项目是报错的状态,那么很有可能是缺少了runtime server的环境所致

对曾经配置过spring mvc的人来说,这已经是一个老生常谈的错误了。

直接在build path中加入runtime server环境即可。我

的环境是tomcat 7,加入之后报错就解除了,整个项目的完整文件结构也显示了出来。

(3)更改项目的facets

我的java的版本是1.8,web的版本改成了3.0,没有发生什么错误。

(4)在pom.xml文件中引入项目依赖

这个是最最重要的一步了,我在这里踩了无数的坑

首先可以把之前的所有低版本jersey1的包全都删掉了,自带的junit也删掉,自带的插件plugins也删掉,这些低版本的东西基本上全部都不能用了。

下面是我的pom.xml配置:

我感觉比较重要的一点就是,因为我们整合的是jersey2,jersey2的依赖基本上全都是org.glassfish.jersey这个组织出的,所以添加依赖包的时候请认准这个groupId,网上的那些坑教程经常告诉你少哪个class的时候去jersey1的某个包里面去找,然后我们就会不知不觉地引入jersey1的包…

这样也许能跑得起来,但是我们现在是在整合jersey2项目,引入jersey1的包很有可能导致一些冲突,会导致更多的问题。所以这样的混合构建显然不合适。

(5)比较重要的包

jersey-container-servlet包是整个项目的容器,如果报找不到容器的错误,那么很有可能就是这个包没有引入。

如果想要支持json,那么就需要引入jersey-media-json-jackson包。这个包里含有jackson的组件,一看jackson就知道基本上可以像spring mvc里面一样作用了。这样jersey接收的json可以自动解析为实体类,输出的实体类可以自动转换为json,非常方便。

jersey-server和jersey-client包中有很多jersey2的方法支持,比如@BeanParam,之前我试过引入jersey1的包是找不到这个方法的…我暂时还没有搞清楚这两个包的作用。为了项目的完整性最好还是引入吧。

jaxrs-ri这个包如果不引入,在tomcat启动的时候似乎会找不到jersey的容器,所以也是有必要加上的。

(6)配置web.xml文件

之前自动生成的配置是都是jersey1的class了,在jersey2的包中已经替换成其他class了,不要犹豫全部删掉。

下面是我的web.xml配置:

比较重要的是:

org.glassfish.jersey.servlet.ServletContainer这个类是整个jersey2的servlet容器,tomcat启动的时候就会去找这个容器,找不到就会报错了。所以需要注意路径,千万别写错。

jersey.config.server.provider.packages这个参数配置也是比较重要的:

启动时会自动去扫描com.xie.jersey的目录,如果有注册的类,就会加载到jersey2的容器中,之后就可以被访问。所以只要是需要被使用的类,都需要先完成注册。这个具体方法接下来再进行解释。

其实感觉就有点像spring mvc中的controller,需要先被扫描加载到spring容器里面才能够进行访问。这个应该也是一个道理。

决定了项目的接口访问路径。我的访问路径为:

http://localhost:8080/项目名/api

(7)完成类的注册

我的注册类是这样的:

需要方法被扫描的路径下,继承org.glassfish.jersey.server.ResourceConfig这个类,然后创建构造方法,使用register方法进行注册类。

有点奇怪的是,就算我没有进行注册也是能够调用方法的…

这就奇怪了,我也不是很清楚哪里出了问题。

(8)写controller

写一个helloworld,写完后访问http://localhost:8080/10.10jersey/api/test/hi,应该能返回test的json:

如果成功返回了,那么基本上jersey2-webapp就整合完成了,没有什么大问题!

二、总结

jersey这个坑挖得太大了,感觉坑很多。官网的例子也不是特别好懂,中文资料也没有什么靠谱的…

最后整合完成之后,发现也不是特别难理解嘛…

如果不是项目需要这个鬼框架,肯定不会去整合这种辣鸡…直接spring boot就开搞。

这也从另一个侧面说明公司的技术栈有多么重要。

发表评论

电子邮件地址不会被公开。 必填项已用*标注