14_CXF发布REST服务

【rest服务】

  REST服务是一种软件架构模式,只是一种风格。REST服务采用HTTP做传输协议。

REST对于HTTP的利用分为以下两种:

一.资源定位

  REST要求对方资源定位更加准确,如下:

  非REST方式:http://127.0.0.1:12345/queryUser.action?userType=student&id=001

  REST   方式:htpp://127.0.0.1:12345/student/001

  REST方式表示互联网上的资源更加准确,但也有缺点,当目录的层级较多时会导致较难理解。

二.资源操作

  利用HTTP的GET、POST、PUT、DELETE四种操作来表示数据库操作的SELECT、UPDATE、INSERT、DELETE操作。

  比如:

  1.查询学生的方法,设置HTTP的请求方法为GET,

  url如下:http://127.0.0.1:12345/user/student/001

  2.添加学生的方法,设置HTTP的请求方法为PUT,

  url如下:http://127.0.0.1:12345/user/student/001/张三/...
  REST常用于资源定位,资源的操作方式较少使用。

【使用场景】

  REST是一种软件架构理念,现在被移植到web服务上,那么在开发Web服务上,偏于面向资源的服务的适用于REST,REST简单易用,效率高,SOAP成熟度较高,安全性好。

  注意:REST不等于WebService,JAX-RS只是将REST设计风格应用到Web服务上。

【代码需求】

查询学生信息,传输参数为学生信息id,在url中定义,如http://127.0.0.1:12345/user/student/001,

其中001就是参数。

注意:REST一般返回结果格式:XML 或 JSON

【工程截图】

【Student.java】

package com.Higgin.ws.cxf.rest.pojo;

import java.util.Date;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="student")
public class Student {
    private long id;
    private String name;
    private Date birthday;

    //忽略 get/set 方法.....
}

【StudentService.java】

package com.Higgin.ws.cxf.rest.service;

import java.util.List;

import javax.jws.WebService;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;

import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.Higgin.ws.cxf.rest.pojo.Student;

@WebService
@Path("/student")
public interface StudentService {

    //查询学生信息
    @GET    //http的get方法
    @Path("/query/{id}")  //id参数通过url传递
    @Produces(MediaType.APPLICATION_XML)  //设置媒体类型xml格式
    public Student queryStudent(@PathParam("id")long id);

    //查询学生列表
    @GET
    @Path("/queryList/{type}")
    //设置媒体类型为XML格式和JSON格式
    @Produces({"application/json;charset=utf-8",MediaType.APPLICATION_XML})
    /* 如果想让rest返回xml,需要在rest的url后边添加 ?_type=xml,默认为xml
            如果想让rest返回json.需要在rest的url后边添加?_type=json*/
    public List<Student> queryStudentList(@PathParam("type") String type);
}

【StudentServiceImpl.java】

package com.Higgin.ws.cxf.rest.service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.Higgin.ws.cxf.rest.pojo.Student;

public class StudentServiceImpl implements StudentService{

    @Override
    public Student queryStudent(long id) {
        //使用静态数据来表示
        Student student=new Student();
        student.setId(id);
        student.setName("张三");
        student.setBirthday(new Date());
        return student;
    }

    @Override
    public List<Student> queryStudentList(String type) {
        //使用静态数据来表示
        List<Student> list=new ArrayList<>();
        Student student1=new Student();
        student1.setId(1001);
        student1.setName("张三");
        student1.setBirthday(new Date());

        Student student2=new Student();
        student2.setId(1002);
        student2.setName("张三");
        student2.setBirthday(new Date());

        list.add(student1);
        list.add(student2);

        return list;
    }
}

【StudentServer.java】

package com.Higgin.ws.cxf.rest.server;

import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;

import com.Higgin.ws.cxf.rest.service.StudentServiceImpl;

public class StudentServer {

    public static void main(String[] args) {
        //使用jaxrsServerFactoryBean发布rest服务
        JAXRSServerFactoryBean jaxrsServerFactoryBean=new JAXRSServerFactoryBean();
        //设置rest的服务地址
        jaxrsServerFactoryBean.setAddress("http://127.0.0.1:12345/rest");
        //设置服务对象
        jaxrsServerFactoryBean.setServiceBean(new StudentServiceImpl());
        //设置资源对象(如果有多个pojo对象,对象中间以","隔开即可)
        jaxrsServerFactoryBean.setResourceClasses(StudentServiceImpl.class);
        //发布rest服务
        jaxrsServerFactoryBean.create();
    }
}

【启动服务】使用Java Application启动main方法

1.在浏览器中输入 http://127.0.0.1:12345/rest/student/query/666

2.在浏览器中输入 http://127.0.0.1:12345/rest/student/queryList/123

3.在浏览器中输入 http://127.0.0.1:12345/rest/student/queryList/001?_type=xml

4.在浏览器中输入 http://127.0.0.1:12345/rest/student/queryList/001?_type=json

时间: 2024-11-05 18:35:27

14_CXF发布REST服务的相关文章

应用Spring MVC发布restful服务是怎样的一种体验

摘要:“约定优于配置”这是一个相当棒的经验,SOAP服务性能差.基于配置.紧耦合,restful服务性能好.基于约定.松耦合,现在我就把使用Spring MVC发布restful服务的过程同大家分享.代码之优雅.过程之简单.编码之愉快,不是发布SOAP服务所能匹敌的. 关键字:java, rest, webservice, spring mvc 前提:IntelliJ IDEA (13.1.5 版本), apache maven (3.2.3 版本), Tomcat(7.0.56版本), Spr

如何使用花生壳 发布WCF服务 进行外网访问

当我们发布WCF服务的时候,可以直接通过服务器的域名或者IP进行. 但是如果仅仅是通过花生壳进行域名解析,需要我们自己在设置的时候注意以下几点, 直接用图说明问题 1.首先配置花生壳,在红色处填写一个端口号 这时花生壳会给分配一个端口号: 双击这条记录,在端口号处填写 25928 2. 配置路由器 3.配置防火墙入站规则 4.按照自己花生壳的二级域名配置WCF配置文件的地址: 5.提示一下 尽快升级.net framework 4.6 解决wcf自定义类型的兼容性等问题

WCF 一步一步 发布 WCF服务 到 IIS (图)

WCF 一步一步 发布 WCF服务 到 IIS (图) 使用VS自带的WCFSVCHost(WCF服务主机)发布WCF服务,时刻开发人员测试使用. 下面我们来看一下如何在IIS中部发布一个WCF服务. 环境是VS 2008 (公司电脑没有安装VS2010)^_^ 我们从头开始,不写代码,完全的配置,会收获不小. 新建一个WCF 服务库 建立一个WCF服务应用程序 结果如下 删除掉WCF程序中不需要的默认文件,如下图   为WcfService1项目添加WcfServiceLibrary1的引用,

发布地图服务

Arccatalog发布地图服务安装ArcGIS Server里面的ArcGIS Server Post InstallWeb Services Post Install (每次发布地图服务之前都要安装一次)然后打开Catalog 10--Add ArcGIS Server--Manage GIS Services地址:http://localhost/arcgis/servicesName:localhost新出来的localhost(admin)--add new service--Map

JAVA项目中发布WebService服务——简单实例

1,在Java项目中发布一个WebService服务: 如何发布? --JDK1.6中JAX-WS规范定义了如何发布一个WebService服务: (1)用jdk1.6.0_21以后的版本发布: (2)与Web服务相关的类,都位于Javax.jws.*包中 @WebService--此注解用在类上指定将此类发布成一个WebService: EndPoint--此类为端点服务类,其中publish()方法用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上,用于发布. 2,例子

发布Hessian服务作为服务内部基础服务

摘要:Hessian经常作为服务内部RPC工具来使用,速度快效率高.重构代码的核心思想就是把共用的代码段提出来,使代码结构优化:架构设计类似,把基本的共用的服务提出来,使架构优化.下面讲述一下我在具体应用中使用Spring3.2.4在Tomcat7.0.47下发布Hessian4.0.37服务的过程. 关键词:Spring, Hessian, JAVA, 架构设计, Hibernate, Tomcat Hessian经常作为服务内部RPC远程过程调用工具来使用,速度快效率高,我们的项目也不例外的

基于dubbo快速发布restful服务

本文使用官方项目示例,基于dubbox发布restful服务.jdk,eclipse.maven神马环境的就不讲了,自行baidu之. dubbox下载.编译 下载地址:https://github.com/dangdangdotcom/dubbox下载方式可以用git下载,也可以打包下载.下载之后,用maven导入(eclipse->import->Maven).dubbo项目结构: 使用maven打包,版本2.8.4. zookeeper安装 本文使用的是单节点的注册中心,在实际项目中需要

Spring整合CXF之发布WebService服务

今天我们来讲下如何用Spring来整合CXF,来发布WebService服务: 给下官方文档地址:http://cxf.apache.org/docs/writing-a-service-with-spring.html 根据官方文档.我们把前面的实例用Spring整合CXF来处理下.会简化很多: 首先我们来建一个Maven项目 WebService_CXF 建好项目第一步,我们打开pom.xml 我们来添加下Spring支持: <!-- 添加Spring支持 --> <dependen

TMG发布Exchange2016服务(OWA、ActiveSync、OutlookAnywhere)

我们前面文章中有介绍到Exchange2016高可用性的部署,所以关于Exchange2016相关的服务配置就不多介绍了,今天呢主要介绍如何使用TMG将Exchange2016相关服务发布到外网,首先呢,我们回顾一下环境: 需要声明的是,Exchange2016高可用性的搭建相比Exchange2013或者更早的版本已经有了很大的变化,对于高可用的发布,微软建议使用硬件F5类似的产品或者智能DNS来搭建.所以对于很企业来说又是一个花销.但是我已找到了好的解决方法后续的文章中会介绍到,记得关注哦.