jersey 集成spring,并使用grizzly内置容器测试jersey

jersey集成spring相对来说比较简单,需要注意的几点是:

1、引入maven依赖jersey-spring,其中包含了spring的相关依赖,如果和项目中所使用的spring版本相冲突,可以通过exclusions清除掉。

2、确保jersey资源类所在的包路径,能被spring扫描到,即spring配置中的<context:component-scan base-package="" />。

3、确保jersey资源类打上注解@Component,这样可以注入spring容器的对象实例。

4、在web.xml中配置com.sun.jersey.spi.spring.container.servlet.SpringServlet。

5、jersey集成grizzly内置容器测试,看jersey集成grizzly 。在这个项目中稍有不同,自定义了一个MyJerseyServlet,继承自SpringServlet,实现spring容器的加载,以便在jersey资源类中能依赖注入。这样就能使用内置容器测试。

项目源码参考

jersey-spring的maven依赖,去除了spring相关依赖。具体配置,可进入上面的"项目源码参考"。

<!-- jersey-spring: 包含了jersey-servlet/jersey-server/jersey-core等,同时还包含了spring相关依赖。 -->
<dependency>
    <groupId>com.sun.jersey.contribs</groupId>
    <artifactId>jersey-spring</artifactId>
    <version>1.19</version>
    <exclusions>
        <exclusion>
            <artifactId>spring-core</artifactId>
            <groupId>org.springframework</groupId>
        </exclusion>
        <exclusion>
            <artifactId>spring-beans</artifactId>
            <groupId>org.springframework</groupId>
        </exclusion>
        <exclusion>
            <artifactId>spring-context</artifactId>
            <groupId>org.springframework</groupId>
        </exclusion>
        <exclusion>
            <artifactId>spring-web</artifactId>
            <groupId>org.springframework</groupId>
        </exclusion>
        <exclusion>
            <artifactId>spring-aop</artifactId>
            <groupId>org.springframework</groupId>
        </exclusion>
    </exclusions>
</dependency>

web.xml

<servlet>
    <servlet-name>jerseySpring</servlet-name>
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jerseySpring</servlet-name>
    <url-pattern>/jersey/*</url-pattern>
</servlet-mapping>

为方便测试,集成grizzly,grizzly默认是不加载spring配置的,无法从spring容器中依赖注入对象实例,所以做了以下扩展。

自定义MyJerseyServlet,加载spring配置。

package com.jersey.demo.web.servlet;

import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.sun.jersey.spi.spring.container.servlet.SpringServlet;

public class MyJerseyServlet extends SpringServlet {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Override
    protected ConfigurableApplicationContext getDefaultContext() {
        return new ClassPathXmlApplicationContext("applicationContext.xml");
    }
}

启动、停止grizzly容器的Main类,也有相应的调整。

package com.jersey.demo;

import java.io.IOException;

import com.jersey.demo.web.servlet.MyJerseyServlet;
import com.sun.grizzly.http.SelectorThread;
import com.sun.jersey.api.container.grizzly.GrizzlyWebContainerFactory;

public class Main {

    public static final String URI = "http://localhost:8081/myapp";

    public static SelectorThread startServer() throws IllegalArgumentException,
            IOException {

        // 相当于web.xml中servlet jersey的配置
        return GrizzlyWebContainerFactory.create(URI, MyJerseyServlet.class,
                null);
    }

    public static void main(String[] args) throws IllegalArgumentException,
            IOException {
        SelectorThread selectorThread = startServer();
        System.out.println("--------jersey server started!");
        System.in.read();

        // stop server
        selectorThread.stopEndpoint();
        System.out.println("--------jersey server stoped!");
    }
}

测试类和jersey集成grizzly中的一样。

时间: 2024-08-11 05:45:21

jersey 集成spring,并使用grizzly内置容器测试jersey的相关文章

页面静态化1---概念(Apache内置压力测试工具使用方法)

三个概念 ①静态网址: http://127.0.0.1/regis.html ②动态网址:在请求页面时可以动态的传一些值进去. http://127.0.0.1/regis.php?id=45&title=今天天气不错 ③伪静态网址: 伪静态仅仅是对动态网址的一个重写,伪静态网址不能让动态网址静态化,搜索引擎不会认为伪静态就是HTML文档,其次伪静态可取,但是应把重心放在取出冗余参数.规范URL,竟可能的避免重复也等等. 举例说明:http://v.youku.com/v_show/id_XM

Go语言开发(三)、Go语言内置容器

Go语言开发(三).Go语言内置容器 一.Go语言数组 1.Go语言数组简介 Go语言提供了数组类型的数据结构.数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,类型可以是任意的原始类型例如×××.字符串或者自定义类型.相对于去声明number0, number1, ..., and number99的变量,使用数组形式numbers[0], numbers[1] ..., numbers[99]更加方便且易于扩展.数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素

用Autofac替换.net core 内置容器

原文:用Autofac替换.net core 内置容器 官方建议使用内置容器,但有些功能并不支持,如下: 属性注入 基于名称的注入 子容器 自定义生存期管理 Func<T> 支持 所以可以使用其他第三方IOC容器,如Autofac,下面为学习使用记录 一.首先准备了一个接口和其实现类 public interface ITestService { string ShowMsg(); } public class TestService: ITestService { public string

Google play billing内置付费测试问题总结

这几天接入google Play支付,也算是碰壁不少,到处爬帖子,总算是调通了,下面把遇到的问题分享下,方便后来人少绕弯路吧. 至于google Play如果集成到安卓工程和如何写付费代码我这里就不介绍了,网上很多介绍的帖子介绍的很不错,自行百度和google吧. 主要说下我测试内置付费遇到的一些问题,其他遇到的问题也不多,主要有二个问题. 其中一个问题是用我自己后台的productID测试时,点击付费后弹出"系统无法找到您要购买的商品",郁闷的是用android.test.purch

内置容器的排序规则构造方式

转自:http://lhearen.top/2016/08/27/Sort-for-Built-in-Containers/ C ++中有很多内置的容器,我们可以轻松有效地实现我们想要的内容. 然而,有时它们的排序能力相对有限,因此,我们必须提出自定义比较器来重新定义排序功能. 几乎所有的函数/容器(例如priority_queue除外)都要求排序满足严格弱排序的标准数学定义,否则函数/容器的行为将不会被定义. 方法: 定义 operator<() 如果你希望自定义类的对象能够像往常的原始类型一

Ansible内置变量测试(五)

1.Ansible内置了一些变量以方便主机之间相互调用各自的变量.这些变量包括: * hostvars允许你访问另一个主机的变量,当然前提是ansible已经收集到这个主机的变量了: group_names:是当前主机所在的group列表 groups:是所有inventory的group列表 inventory_hostname:是在inventory里定义的主机名(ip或主机名称) play_hosts是当前的playbook范围内的主机列表 inventory_dir和inventory_

Python内置容器(2)——字典,迭代器,列表解析

1.迭代器 iterator iter 函数,构造集合. next 方法依次返回迭代器的值 In [42]: li Out[42]: [1, 2, 3, 4, 5] In [43]: it = iter(li) In [44]: it.next() Out[44]: 1 In [45]: it.next() Out[45]: 2 当所有的元素都返回完的时候,会抛出一个StopIterator 的异常. list,tuple,set 都属于集合. for 语句,当将一个列表传递给for 语句的时候

Python内置容器(1)——列表,元组,集合

1.列表list     1.1定义和初始化 list # 定义个空列表 In [1]: li = [] In [2]: type(li) Out[2]: list # 初始化list,list 中的元素没有类型要求,可以是任何类型 In [3]: li = [1,2,'a',['a',4]] In [4]: li Out[4]: [1, 2, 'a', ['a', 4]]     1.2列表的下标 python中列表的下标是从0开始的. In [4]: li Out[4]: [1, 2, 'a

Stripes视图框架内置Spring集成的使用

Stripes视图框架内置Spring集成了的,在项目中也遇到需要导入spring支持的jar包,这足以证明Stripes与Spring有着非同寻常的关系. Spring注入Java Bean 我们需要将Spring beans或业务对象自动地注入到需要进行处理或引用的对象上.在Stripes框架中,实现这一点并不要求外部配置-除了你的Spring上下文配置之外.上下文配置如下: <context:component-scan  base-package="com.boonya.strip