WebService_CXF_RS

CXF-RS(Restful)风格:所有资源都共享统一的接口,以便在客户端和服务器之间传输状态,使用的是标准的 HTTP 方法,比如 GET、PUT、POST 和 DELETE,可以支持多种消息格式-->xml,json.更易于实现缓存机制,第一次访问资源缓存,第二次访问资源返回304查找本地资源.

对于请求方式的不同所对应的操作不同:

POST:保存操作

PUT:修改操作

GET:查询操作

DELETE:删除操作

对于同一请求方式,同一请求路径,可以通过不同的参数进行不同的操作或返回不同的资源。

一、WebService-CXF的rs风格独立开发:

开发前提-->导入依赖:

<dependencies>
    <!-- 使用CXF RS开发 -->
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
        <version>3.0.1</version>
    </dependency>
    <!-- 内置jetty web服务器 -->
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http-jetty</artifactId>
        <version>3.0.1</version>
    </dependency>
    <!-- 使用log4j日志实现  -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.12</version>
    </dependency>		
    <!-- 使用rs客户端  -->
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-rs-client</artifactId>
        <version>3.0.1</version>
    </dependency>
    <!-- 在CXF扩展提供者,提供转换json接口  -->
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-rs-extension-providers</artifactId>
        <version>3.0.1</version>
    </dependency>
    <!-- cxf 扩展提供者 转换json 默认需求一个工具包  -->
    <dependency>
        <groupId>org.codehaus.jettison</groupId>
        <artifactId>jettison</artifactId>
        <version>1.3.7</version>
    </dependency>
</dependencies>

1、对需要传递的数据对象实体类上要添加@XmlRootElement(name="对象名")注解,用于转换为xml或json格式进行数据传输.

2、对发布的业务接口上有以下注解:

       @Path("/接口服务的访问路径")

3、对发布的业务接口的方法上有以下注解:

     ①、@GET 查询 @PUT 修改 @POST 增加 @DELETE 删除
     ②、@Path("/访问该方法的路径/{参数}") 服务访问资源路径

     ③、@Consumes({ "application/xml", "application/json" }) //consumes消费,方法参数

            @Produces({ "application/xml", "application/json" }) //produces生产,方法返回值

4、对发布的业务接口的方法参数上有以下注解:

    ①、(@PathParam("id") Integer id) -->PathParam的名称应与@Path访问路径后的参数名一致

    ②、(@QueryParam("username") String username,@QueryParam("password") String password) -->QueryParam类似于http的get请求参数,一般用于传递多个参数,由?&&...拼接组成.

5、发布服务:

public class RS_Server {
    public static void main(String[] args) {
        //创建业务接口实现类对象
        IUserService userService = new UserServiceImpl();
        //创建服务
        JAXRSServerFactoryBean jaxrsServerFactoryBean = new JAXRSServerFactoryBean();
        //指定将哪些实体类装换成json或xml
        jaxrsServerFactoryBean.setResourceClasses(Car.class,User.class);
        jaxrsServerFactoryBean.setAddress("http://localhost:8888");
        jaxrsServerFactoryBean.setServiceBean(userService);		
        //发布项目
        jaxrsServerFactoryBean.create();
    }
}

6、创建客户端访问资源:

public class RS_Client {
    public static void main(String[] args) {
        /*
         * create 建立与服务资源调用的连接
         * type 发送给服务器的数据格式 -- @Consumes
         * accept 接收服务器传输的数据格式 -- @Produces
         * get/put/post/delete
         */
        Collection<? extends User> collection = WebClient.create("http://localhost:8889/userService/user")
                .accept(MediaType.APPLICATION_JSON).getCollection(User.class);
        System.out.println(collection);
        /*User user = new User();
        WebClient.create("http://localhost:8889/userService/user").type(MediaType.APPLICATION_XML).post(user);*/
    }
}

二、WebService-CXF的Spring整合的rs风格独立开发:

开发前提-->①导入依赖:导入日志的配置文件

<dependencies>
    <!-- cxf 进行rs开发 必须导入  -->
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
        <version>3.0.1</version>
    </dependency>
    <!-- 日志引入  -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.12</version>
    </dependency>
    <!-- 客户端 -->
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-rs-client</artifactId>
        <version>3.0.1</version>
    </dependency>
    <!-- 扩展json提供者 -->
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-rs-extension-providers</artifactId>
        <version>3.0.1</version>
    </dependency>
    <!-- 转换json工具包,被extension providers 依赖 -->
    <dependency>
        <groupId>org.codehaus.jettison</groupId>
        <artifactId>jettison</artifactId>
        <version>1.3.7</version>
    </dependency>
    <!-- spring 核心 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.1.7.RELEASE</version>
    </dependency>
    <!-- spring web集成 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.1.7.RELEASE</version>
    </dependency>
    <!-- spring 整合junit  -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.1.7.RELEASE</version>
    </dependency>
    <!-- junit 开发包 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

②.在web.xml中配置web开发的spring核心监听器:

<!-- spring配置文件位置 -->  
<context-param>  
    <param-name>contextConfigLocation</param-name>  
    <param-value>classpath:applicationContext.xml</param-value>  
</context-param>  
<!-- spring核心监听器 -->  
<listener>  
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
</listener> 
③.在web.xml中配置cxf基于web访问的servlet配置:
<servlet>  
    <servlet-name>CXFService</servlet-name>  
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>  
    <load-on-startup>1</load-on-startup>  
</servlet>  
<servlet-mapping>  
    <servlet-name>CXFService</servlet-name>  
    <url-pattern>/services/*</url-pattern>  
</servlet-mapping> 

1、在服务器端发布服务:

<?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:jaxrs="http://cxf.apache.org/jaxrs"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">
	<!-- 
		address 发布服务地址 
		servicesBeans 服务实现类 
	 -->
	<jaxrs:server id="service" address="/资源访问路径" >
		<jaxrs:serviceBeans>
			<bean class="xx.xx.xx.服务接口实现类" /> 
		</jaxrs:serviceBeans>
		<jaxrs:inInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
		</jaxrs:inInterceptors>
		<jaxrs:outInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
		</jaxrs:outInterceptors>
	</jaxrs:server>
</beans>

2、在客户端即可访问,同上...


ws与rs的区别:

ws:使用jdk的原始动态代理开发,基于方法,"动词",资源传输基于soap协议-->xml+http

rs:约束条件遵守restful的原则,基于资源,"名词",资源传输基于http协议,可以传输json和xml格式的数据,现阶段比较主流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要在Spring项目中引入CXF框架的依赖。在pom.xml文件中加入如下代码: ```xml <!-- CXF框架 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-bundle-jaxrs</artifactId> <version>3.1.6</version> </dependency> ``` 接下来,需要在Spring的配置文件中配置CXF框架。在applicationContext.xml文件中加入如下代码: ```xml <!-- 配置CXF框架 --> <jaxrs:server id="restContainer" address="/"> <jaxrs:serviceBeans> <ref bean="userService"/> </jaxrs:serviceBeans> <jaxrs:providers> <ref bean="jsonProvider"/> </jaxrs:providers> </jaxrs:server> <bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider"/> <bean id="userService" class="com.example.service.UserServiceImpl"/> ``` 其中,`userService`是实现了WebService接口的实现类,`jsonProvider`是用于处理JSON格式数据的提供者。 最后,在web.xml中配置CXF的Servlet和JSP的Servlet: ```xml <!-- CXF Servlet --> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <!-- JSP Servlet --> <servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> </servlet-mapping> ``` 配置完成后,就可以在JSP页面中调用WebService接口了。例如: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://cxf.apache.org/jaxrs" prefix="cxf" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>WebService测试页面</title> </head> <body> <h1>WebService测试页面</h1> <form action="services/userService/getUser" method="POST"> ID:<input type="text" name="id"><br> <input type="submit" value="查询"> </form> <br> <c:if test="${not empty user}"> ID:${user.id}<br> Name:${user.name}<br> Age:${user.age}<br> </c:if> </body> </html> ``` 以上代码中,`form`标签的`action`属性指向了WebService接口的URL地址,`method`属性指定了请求方式为POST。在页面中填写ID后,点击查询按钮即可调用WebService接口并获取返回结果,结果会显示在页面上。 需要注意的是,在使用CXF框架开发WebService时,需要在接口中加入`@Path`、`@GET`、`@POST`等注解来定义URL地址和请求方式。例如: ```java @Path("/userService") public interface UserService { @GET @Path("/getUser/{id}") User getUser(@PathParam("id") String id); } ``` 以上代码中,`@Path`注解定义了接口的URL地址,`@GET`注解定义了请求方式为GET,`@PathParam`注解用于获取URL中的参数。在实现类中,需要使用`@Service`和`@Autowired`注解来定义服务和注入依赖。例如: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; public User getUser(String id) { return userDao.getUserById(id); } } ``` 以上代码中,`@Service`注解定义了服务,`@Autowired`注解注入了`UserDao`依赖。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值