1.创建maven web项目并添加依赖
pom.xml
1 <properties> 2 <webVersion>3.0</webVersion> 3 <cxf.version>3.2.5</cxf.version> 4 <spring.version>4.3.18.RELEASE</spring.version> 5 <jettison.version>1.4.0</jettison.version> 6 </properties> 7 8 <dependencies> 9 <!--spring依赖--> 10 <dependency> 11 <groupId>org.springframework</groupId> 12 <artifactId>spring-core</artifactId> 13 <version>${spring.version}</version> 14 </dependency> 15 <dependency> 16 <groupId>org.springframework</groupId> 17 <artifactId>spring-web</artifactId> 18 <version>${spring.version}</version> 19 </dependency> 20 <dependency> 21 <groupId>org.springframework</groupId> 22 <artifactId>spring-beans</artifactId> 23 <version>${spring.version}</version> 24 </dependency> 25 <dependency> 26 <groupId>org.springframework</groupId> 27 <artifactId>spring-context-support</artifactId> 28 <version>${spring.version}</version> 29 </dependency> 30 <dependency> 31 <groupId>org.springframework</groupId> 32 <artifactId>spring-context</artifactId> 33 <version>${spring.version}</version> 34 </dependency> 35 <!-- <dependency> 36 <groupId>org.springframework</groupId> 37 <artifactId>spring-aop</artifactId> 38 <version>${spring.version}</version> 39 </dependency> 40 --> 41 <dependency> 42 <groupId>org.slf4j</groupId> 43 <artifactId>slf4j-simple</artifactId> 44 <version>1.7.25</version> 45 </dependency> 46 47 48 <!-- cxf依赖 --> 49 <dependency> 50 <groupId>org.apache.cxf</groupId> 51 <artifactId>cxf-core</artifactId> 52 <version>${cxf.version}</version> 53 </dependency> 54 <dependency> 55 <groupId>org.apache.cxf</groupId> 56 <artifactId>cxf-rt-frontend-jaxws</artifactId> 57 <version>${cxf.version}</version> 58 </dependency> 59 <dependency> 60 <groupId>org.apache.cxf</groupId> 61 <artifactId>cxf-rt-transports-http</artifactId> 62 <version>${cxf.version}</version> 63 </dependency> 64 <dependency> 65 <groupId>org.apache.cxf</groupId> 66 <artifactId>cxf-rt-transports-http-jetty</artifactId> 67 <version>${cxf.version}</version> 68 </dependency> 69 70 <!-- rest风格支持 --> 71 <dependency> 72 <groupId>org.apache.cxf</groupId> 73 <artifactId>cxf-rt-frontend-jaxrs</artifactId> 74 <version>${cxf.version}</version> 75 </dependency> 76 <dependency> 77 <groupId>org.apache.cxf</groupId> 78 <artifactId>cxf-rt-rs-extension-providers</artifactId> 79 <version>${cxf.version}</version> 80 </dependency> 81 <!-- json支持 --> 82 <dependency> 83 <groupId>org.codehaus.jettison</groupId> 84 <artifactId>jettison</artifactId> 85 <version>${jettison.version}</version> 86 </dependency> 87 </dependencies>
2.配置spring的applicationContext.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" 4 xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd 8 http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd 9 http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd"> 10 11 <jaxrs:server address="/studentquery"> 12 <jaxrs:serviceBeans> 13 <ref bean="studentInterface"/> 14 </jaxrs:serviceBeans> 15 </jaxrs:server> 16 17 <!-- 服务实现类 --> 18 <bean id="studentInterface" class="cxf_rest_server.student.StudentInterfaceImpl"/> 19 </beans>
3.配置web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 3 <display-name>cxf_rest_spring_server</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file> 10 <welcome-file>default.jsp</welcome-file> 11 </welcome-file-list> 12 13 14 <!-- 配置spring文件环境 --> 15 <context-param> 16 <param-name>contextConfigLocation</param-name> 17 <param-value>classpath:applicationContext.xml</param-value> 18 </context-param> 19 20 <!-- 监听器 --> 21 <listener> 22 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 23 </listener> 24 25 26 <!-- 配置CXF的Servlet --> 27 <servlet> 28 <servlet-name>CXF</servlet-name> 29 <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 30 </servlet> 31 <servlet-mapping> 32 <servlet-name>CXF</servlet-name> 33 <url-pattern>/ss/*</url-pattern> 34 </servlet-mapping> 35 36 </web-app>
4.代码
实体类
1 package cxf_rest_server.student; 2 3 import javax.xml.bind.annotation.XmlRootElement; 4 5 @XmlRootElement(name="student") 6 public class Student { 7 private int id; 8 private String name; 9 public int getId() { 10 return id; 11 } 12 public void setId(int id) { 13 this.id = id; 14 } 15 public String getName() { 16 return name; 17 } 18 public void setName(String name) { 19 this.name = name; 20 } 21 }
SEI接口
1 package cxf_rest_server.student; 2 3 import java.util.List; 4 5 import javax.jws.WebService; 6 import javax.ws.rs.GET; 7 import javax.ws.rs.POST; 8 import javax.ws.rs.Path; 9 import javax.ws.rs.PathParam; 10 import javax.ws.rs.Produces; 11 import javax.ws.rs.core.MediaType; 12 13 @WebService 14 @Path("/student") 15 public interface StudentInterface { 16 @POST 17 @Path("/query/{id}") 18 @Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML}) 19 public Student query(@PathParam("id")int id); 20 21 22 @GET 23 @Path("/queryList/{id}/{name}") 24 @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON}) 25 public List<Student> queryList(@PathParam("id")int id,@PathParam("name")String name); 26 }
实现类
1 package cxf_rest_server.student; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class StudentInterfaceImpl implements StudentInterface { 7 8 @Override 9 public Student query(int id) { 10 Student student = new Student(); 11 student.setId(1); 12 student.setName("小明"); 13 return student; 14 } 15 16 @Override 17 public List<Student> queryList(int id,String name) { 18 Student student1 = new Student(); 19 student1.setId(1); 20 student1.setName("小明"); 21 22 Student student2 = new Student(); 23 student2.setId(2); 24 student2.setName("小李"); 25 26 Student student3 = new Student(); 27 student3.setId(3); 28 student3.setName("小华"); 29 List<Student> list = new ArrayList<Student>(); 30 list.add(student1); 31 list.add(student2); 32 list.add(student3); 33 return list; 34 } 35 36 }
实体类注意添加@XmlRootElement注解
接口添加jaxrs注解,定义数据格式
5.部署至tomcat后打开浏览器采用以下格式访问
url-pattern:web.xml中定义的cxf的servlet拦截目录
address:applicationContext.xml中的<jaxrs:server>标签定义的address
path:在接口中使用@Path注解设定的值
http://ip:port/项目名/url-pattern/address/path/方法路径/参数
6.由于使用浏览器url的方式只能访问注解为@GET的方法,下面给出使用HttpClient访问服务的简单示例
添加以下依赖
1 <properties> 2 <httpClient.version>4.5.6</httpClient.version> 3 <junit.version>4.9</junit.version> 4 </properties> 5 <dependencies> 6 <dependency> 7 <groupId>org.apache.httpcomponents</groupId> 8 <artifactId>httpclient</artifactId> 9 <version>${httpClient.version}</version> 10 </dependency> 11 <dependency> 12 <groupId>junit</groupId> 13 <artifactId>junit</artifactId> 14 <version>${junit.version}</version> 15 <scope>test</scope> 16 </dependency> 17 18 </dependencies>
1 package cxf_rest_server.student; 2 3 import org.apache.http.HttpEntity; 4 import org.apache.http.client.methods.CloseableHttpResponse; 5 import org.apache.http.client.methods.HttpGet; 6 import org.apache.http.client.methods.HttpPost; 7 import org.apache.http.impl.client.CloseableHttpClient; 8 import org.apache.http.impl.client.HttpClients; 9 import org.apache.http.util.EntityUtils; 10 import org.junit.Test; 11 12 /** 13 * 使用httpClient访问服务 14 * @author tele 15 * 16 */ 17 public class StudentClient { 18 @Test 19 public void get() throws Exception{ 20 //创建httpclient对象 21 CloseableHttpClient httpClient = HttpClients.createDefault(); 22 //创建get对象 23 HttpGet get = new HttpGet("http://127.0.0.1:8080/cxf_rest_spring_server/ss/studentquery/student/queryList/100/123"); 24 //执行请求 25 CloseableHttpResponse response = httpClient.execute(get); 26 int statusCode = response.getStatusLine().getStatusCode(); 27 if(statusCode == 200){ 28 HttpEntity entity = response.getEntity(); 29 String result = EntityUtils.toString(entity,"utf-8"); 30 System.out.println(result); 31 } 32 response.close(); 33 httpClient.close(); 34 } 35 36 @Test 37 public void post() throws Exception { 38 CloseableHttpClient httpClient = HttpClients.createDefault(); 39 HttpPost post = new HttpPost("http://127.0.0.1:8080/cxf_rest_spring_server/ss/studentquery/student/query/100"); 40 CloseableHttpResponse response = httpClient.execute(post); 41 int statusCode = response.getStatusLine().getStatusCode(); 42 if(statusCode == 200) { 43 HttpEntity entity = response.getEntity(); 44 String result = EntityUtils.toString(entity,"utf-8"); 45 System.out.println(result); 46 } 47 response.close(); 48 httpClient.close(); 49 } 50 }
7.数据的解析
拿到数据后,根据数据格式进行解析,如果是xml,可以使用jdom,dom4j
如果是json........
原文地址:https://www.cnblogs.com/tele-share/p/9374023.html
时间: 2024-11-07 15:03:05