Spring集成Jersey开发,实现rest约束例子

来源:互联网 发布:apache cgi bin 编辑:程序博客网 时间:2024/06/10 01:32

Spring集成Jersey开发,实现rest约束实例

  • 前言
  • 第一步创建Maven项目
  • 第二步修改项目参数转换成javaweb项目
  • 第三步配置web参数
    • 配置pomxml依赖jar
    • 创建resources资源包创建applicationContextxml文件
    • 在WEB-INF目录下创建webxml文件
  • 第四步创建资源类
    • 创建HelloResourcesjava资源
    • 创建管理类
  • 第五步测试
    • 创建个运行服务器

前言


读这篇文章的前提是我们应当知道Jersey框架是对RESTful约束的一个实现的框架,这里假设大家都明白Jersey框架以及RESTful约束。项目管理使用Maven。当然Spring相关知识是基础,你应该会,不然还搞啥技术?
这篇文章的目的是为了在Jersey使用Spring的注解功能,为了让Jersey能使用Spring管理的实例。


第一步:创建Maven项目

创建项目名是JerseySpring的maven项目
注意“archetype”选择”maven-archetype-quickstart”
项目结构如下:
这里写图片描述

第二步:修改项目参数,转换成javaweb项目

刚创建的maven是自动设置成打包“jar”的项目,所以需要设置成’war’。
1.项目右键选择:Properties->Project Facets->Convert to facted form…按下图红框标注选择:
这里写图片描述
点确定,完成javaweb项目转换,如果maven没设置编译水平是高版本的话,默认是1.5的,当然太低了,这里需要设置。
设置“java compiler和java build buildPath”就可以了,然后pom.xml里设置插件编译水平比如:1.7.如下:

<build>        <finalName>Jersey</finalName>        <plugins>            <plugin>                <artifactId>maven-compiler-plugin</artifactId>                <configuration>                    <source>${java.version}</source>                    <target>${java.version}</target>                </configuration>            </plugin>        </plugins>    </build>

如果想统一设置,那在创建项目之前设置maven的默认编译水平。在maven的配置文件conf/setting.xml里添加如下:

<profile>  <id>jdk17</id>      <activation>          <activeByDefault>true</activeByDefault>          <jdk>1.7</jdk>      </activation>      <properties>          <maven.compiler.source>1.7</maven.compiler.source>          <maven.compiler.target>1.7</maven.compiler.target>          <maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>      </properties>   </profile>

第三步:配置web参数

1.配置pom.xml依赖jar

spring使用4.2.0.RELEASE,jersey-spring使用1.18版本。
pom.xml如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.jax</groupId>  <artifactId>JerseySpring</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>war</packaging>  <name>JerseySpring</name>  <url>http://maven.apache.org</url>  <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <java.version>1.7</java.version>        <java.encoding>UTF-8</java.encoding>        <spring-version>4.2.0.RELEASE</spring-version>        <aspectj-version>1.8.6</aspectj-version>        <jersey-spring>1.18</jersey-spring>    </properties>  <dependencies>        <!-- ================================================= -->            <!-- Spring框架 -->            <!-- ================================================= -->            <dependency>                <groupId>org.springframework</groupId>                <artifactId>spring-core</artifactId>                <version>${spring-version}</version>            </dependency>            <dependency>                <groupId>org.springframework</groupId>                <artifactId>spring-beans</artifactId>                <version>${spring-version}</version>            </dependency>            <dependency>                <groupId>org.springframework</groupId>                <artifactId>spring-aop</artifactId>                <version>${spring-version}</version>            </dependency>            <dependency>                <groupId>org.springframework</groupId>                <artifactId>spring-context</artifactId>                <version>${spring-version}</version>            </dependency>            <dependency>                <groupId>org.springframework</groupId>                <artifactId>spring-context-support</artifactId>                <version>${spring-version}</version>            </dependency>            <dependency>                <groupId>org.springframework</groupId>                <artifactId>spring-tx</artifactId>                <version>${spring-version}</version>            </dependency>            <dependency>                <groupId>org.springframework</groupId>                <artifactId>spring-jdbc</artifactId>                <version>${spring-version}</version>            </dependency>            <dependency>                <groupId>org.springframework</groupId>                <artifactId>spring-orm</artifactId>                <version>${spring-version}</version>            </dependency>            <dependency>                <groupId>org.springframework</groupId>                <artifactId>spring-web</artifactId>                <version>${spring-version}</version>            </dependency>            <dependency>                <groupId>org.springframework</groupId>                <artifactId>spring-webmvc</artifactId>                <version>${spring-version}</version>            </dependency>            <dependency>                <groupId>org.springframework</groupId>                <artifactId>spring-test</artifactId>                <version>${spring-version}</version>            </dependency>            <dependency>                 <groupId>org.springframework</groupId>                 <artifactId>spring-websocket</artifactId>                 <version>${spring-version}</version>              </dependency>              <dependency>                 <groupId>org.springframework</groupId>                 <artifactId>spring-messaging</artifactId>                 <version>${spring-version}</version>              </dependency>            <dependency>                 <groupId>org.springframework</groupId>                 <artifactId>spring-expression</artifactId>                 <version>${spring-version}</version>              </dependency>            <!-- ================================================= -->            <!-- AOP相关依赖 -->            <!-- ================================================= -->            <dependency>                <groupId>org.aspectj</groupId>                <artifactId>aspectjrt</artifactId>                <version>${aspectj-version}</version>            </dependency>            <dependency>                <groupId>org.aspectj</groupId>                <artifactId>aspectjweaver</artifactId>                <version>${aspectj-version}</version>            </dependency>            <dependency>                <groupId>cglib</groupId>                <artifactId>cglib</artifactId>                <version>3.1</version>            </dependency>        <!-- Jersey + Spring -->        <dependency>            <groupId>com.sun.jersey.contribs</groupId>            <artifactId>jersey-spring</artifactId>            <version>${jersey-spring}</version>            <exclusions>                <exclusion>                    <groupId>org.springframework</groupId>                    <artifactId>spring</artifactId>                </exclusion>                <exclusion>                    <groupId>org.springframework</groupId>                    <artifactId>spring-core</artifactId>                </exclusion>                <exclusion>                    <groupId>org.springframework</groupId>                    <artifactId>spring-web</artifactId>                </exclusion>                <exclusion>                    <groupId>org.springframework</groupId>                    <artifactId>spring-beans</artifactId>                </exclusion>                <exclusion>                    <groupId>org.springframework</groupId>                    <artifactId>spring-context</artifactId>                </exclusion>                <exclusion>                    <groupId>org.springframework</groupId>                    <artifactId>spring-aop</artifactId>                </exclusion>            </exclusions>        </dependency>    </dependencies>    <build>        <finalName>Jersey</finalName>        <plugins>            <plugin>                <artifactId>maven-compiler-plugin</artifactId>                <configuration>                    <source>${java.version}</source>                    <target>${java.version}</target>                </configuration>            </plugin>        </plugins>    </build></project>

pom.xml文件里引入的spring框架相关jar和jersey-spring.jar。不需要引入jersey-container-servlet-core.jar。

2.创建resources资源包,创建applicationContext.xml文件:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:aop="http://www.springframework.org/schema/aop"    xmlns:task="http://www.springframework.org/schema/task" xmlns:util="http://www.springframework.org/schema/util"    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"    xsi:schemaLocation="        http://www.springframework.org/schema/beans         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd        http://www.springframework.org/schema/mvc        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd        http://www.springframework.org/schema/task          http://www.springframework.org/schema/task/spring-task-3.1.xsd         http://www.springframework.org/schema/util        http://www.springframework.org/schema/util/spring-util-3.2.xsd         http://www.springframework.org/schema/context         http://www.springframework.org/schema/context/spring-context-3.0.xsd        http://www.springframework.org/schema/tx         http://www.springframework.org/schema/tx/spring-tx.xsd        http://www.springframework.org/schema/aop         http://www.springframework.org/schema/aop/spring-aop.xsd">    <context:component-scan base-package="com.jax" />    <context:annotation-config></context:annotation-config></beans>

扫描com.jar包下所以注解,包括spring注解和jersey注解,这里有个坑,如果单单扫描spring的注解,不扫描jersey注解是会报错的,所以base-package尽量是大范围的,把jersey资源文件也扫描进去。

3.在WEB-INF目录下创建web.xml文件

<web-app id="WebApp_ID" version="2.4"    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">    <display-name>JerseySpring</display-name>    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>classpath:applicationContext.xml</param-value>    </context-param>    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>    <filter>        <filter-name>characterEncodingFilter</filter-name>        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>        <init-param>            <param-name>encoding</param-name>            <param-value>UTF-8</param-value>        </init-param>        <init-param>            <param-name>forceEncoding</param-name>            <param-value>true</param-value>        </init-param>    </filter>    <filter-mapping>        <filter-name>characterEncodingFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <servlet>        <servlet-name>jersey-serlvet</servlet-name>        <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>        <init-param>            <param-name>com.sun.jersey.config.property.packages</param-name>            <param-value>com.jax.Jersey</param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>jersey-serlvet</servlet-name>        <url-pattern>/api/*</url-pattern>    </servlet-mapping></web-app>

加载了applicationContext.xml文件,设置编码过滤器为utf-8,
使用“com.sun.jersey.spi.spring.container.servlet.SpringServlet”创建servlet,这里注意
1.

         <init-param>            <param-name>com.sun.jersey.config.property.packages</param-name>            <param-value>com.jax</param-value>        </init-param>

这个配置其实没啥作用,param-value可以设置为任何字符串,但必需有这个配置,不然报错,建议尽量设置成项目上层的目录,比如这里使用“com.jax”。

2.不能使用“org.glassfish.jersey.servlet.ServletContainer”去创建servlet。

第四步:创建资源类

1.创建HelloResources.java资源

package com.jax.JerseySpring.api;import javax.ws.rs.GET;import javax.ws.rs.Path;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import com.jax.JerseySpring.mgr.acct.IAcctMgr;@Component@Path("/demo")public class HelloResources {    @Autowired    public IAcctMgr acctMgr;    @GET    @Path("/hello")    public String acct() {        String result = "failure";        try {            result = acctMgr.getAcctByCd("9527");            System.out.println("结果:" + result);        } catch (Exception e) {            System.out.println(e);        }        return result;    }}

@Component:是spring里标注组件的注解
@Path:用来为资源类或方法定义URI
@GET:表明被注解的方法响应HTTP GET请求,@POST、@PUT和@DELETE同理
其实Jersey的注解就那几个,数都能数过来。

2.创建管理类

这个管理类就是server层的类,其实这篇文章的目的是为了在jersey资源里使用spring的注解
接口类IAcctMgr.java:

package com.jax.JerseySpring.mgr.acct;public interface IAcctMgr {    public String getAcctByCd(String cd);}

实现类AcctMgrImpl.java:

package com.jax.JerseySpring.mgr.acct.impl;import org.springframework.stereotype.Service;import com.jax.JerseySpring.mgr.acct.IAcctMgr;@Servicepublic class AcctMgrImpl implements IAcctMgr {    @Override    public String getAcctByCd(String cd) {        return "查询到帐户cd:" + cd + "的信息";    }}

重点注意一个注解@Service,标识组件,别忘了。

到目前为止,整个demo就完成了,让它在tomcat里跑起来吧。

第五步:测试

1.创建个运行服务器

这里使用tomcat,将JerseySpring发布到tomcat容器里。成功运行没报错的情况下,在浏览器里输入:

http://127.0.0.1:8080/JerseySpring/api/demo/hello

结果如下:
这里写图片描述

说明与spring成功接入,能使用spring的注解了,标准说法是:能成功的将创建的实例存放在jersey的SpringServlet容器里。

CSDN上传资源不能免费,我也是醉了,这里不好意思了,这里使用百度云:
JerseySpring例子下载
密码: 2itw

原创粉丝点击