第一步:創建一個Maven工程。加入Jersey、Spring、Jersey+Spring的依賴包,以及內嵌的Tomcat7插件;
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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zte.ems</groupId> <artifactId>jersey-spring</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>jersey-spring Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <!-- Jersey --> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> <version>1.8</version> </dependency> <!-- Spring 3 dependencies --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.0.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.0.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.0.5.RELEASE</version> </dependency> <!-- Jersey + Spring --> <dependency> <groupId>com.sun.jersey.contribs</groupId> <artifactId>jersey-spring</artifactId> <version>1.8</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> </exclusions> </dependency> <!-- 添加jsp、servlet依賴 --> <!-- servlet api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency> <!-- jstl --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> </dependencies> <build> <finalName>jersey-spring</finalName> <pluginManagement> <plugins> <plugin> <!-- 配置tomcat7插件 --> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <path>/jersey-spring</path> <port>8080</port> <uriEncoding>UTF-8</uriEncoding> <url>http://localhost:8080/manager/text</url> <server>tomcat7</server> </configuration> </plugin> </plugins> </pluginManagement> </build> </project>
第二步:Spring配置文件的創建:很簡單,就是添加需要掃描的基本包名
spring-context.xml文件如下所示:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="com.zte.ems.*" /> <context:annotation-config/> </beans>
第三步:配置web.xml文件:主要是配置spring和spring+jersey的相關信息;
web.xml文件如下:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <!-- 配置Spring --> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-*.xml</param-value> </context-param> <!-- 配置Jersey+Spring --> <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.zte.ems.resource</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jersey-serlvet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
其中 <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>這一句常常出錯,需要多注意。
第四步:寫rest資源類
在com.zte.ems.resource包下添加一個StudentResource.java類,代碼如下:
package com.zte.ems.resource; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.zte.ems.pojo.Student; import com.zte.ems.service.StudentService; @Component @Path("/index") public class StudentResource { @Autowired StudentService studentService; @GET @Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_ATOM_XML}) @Path("/student") public String getStudent(){ return "hello Student!"; } }
@Component:表示這個類由Spring的IoC容器來管理,SpringMVC中使用的@Controller;
@AutoWired:表示Spring的自動裝配,將需要依賴的類直接裝配進來,當然本例子沒有使用到,具體項目中一定會需要;
@Path("/index"):該注解標記在類名之上,表示這是一個根資源;類似於SpringMVC中的@RequestMapping("/index");
@Path("/student"):該注解標記在方法名之上,表示這是一個子資源,通過/student來尋找具體方法調用;
@GET:該注解表示被標記的方法提供的是一個GET請求,同樣還有@POST、@PUT、@DELET、@PUTCH等注解;
@Produces({MediaType.xxx}):該注解表示以json或者xml文件的形式進行輸出,類似於SpringMVC中的@ResponseBody注解;
當然還有@QueryParam,@Context等等注解,后面會專門寫一篇關於Jersey和SpringMVC之間區別和聯系的文章,敬請期待。
最后:
鼠標放在項目名上右擊,Run As ----> Maven build ---->在Goals中輸入clean tomcat7:run啟動Tomcat服務器,然后在瀏覽器中輸入http://localhost:8080/jersey-spring/index/student 彈出下圖所示的成功界面:
到此為止,基於Jersey+Spring+Maven集成的簡單框架搭建起來了。