基于CXF Servlet方式发布Restful的Web服务(入门篇)
2016-05-19 23:27
405 查看
基于CXF Servlet方式发布Restful的Web服务(入门篇) ##。
最近在学WebService,刚刚做好一个实习,希望对自己的学习进行记录,也希望能给其他感兴趣的小伙伴提供帮助。希望通过:http://localhost:9997/rs/calculator/add 来访问服务。
该服务以两个参数的各种计算为简单例子。
1.首先,编写POJO类CalNums,@XmlRootElement注解可以实现CalNums类在java 和xml之间转换。
package POJO; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name="CalNums") public class CalNums { //第一个操作数 private int firstNum; //第二个操作数 private int secondNum; //运算结果 private int result; public int getResult() { return result; } public void setResult(int result) { this.result = result; } public int getFirstNum() { return firstNum; } public void setFirstNum(int firstNum) { this.firstNum = firstNum; } public int getSecondNum() { return secondNum; } public void setSecondNum(int secondNum) { this.secondNum = secondNum; } }
2.编写Calculator接口
@GET @DELETE @POST @PUT 标注HTTP的请求类型
@Path 标注资源类或方法的相对路径
@Produces 标注返回的MIME 媒体类型(注解标注,这
个注解可以包含一组字符串,默认值是/,它指定REST 服务的响应
结果的MIME 类型,例如:application/xml、application/json、image/jpeg
等),也可以同时返回多种类型,但具体生成结果时使用哪种格式取
决于ContentType。CXF 默认返回的是JSON 字符串;
@PathParam(“fn”)与@Path(“/add/{fn}+{sn}”)中的{fn}对应,用来得到URL中的参数
package POJO; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; @Path("/calculator") @Produces("application/xml") public interface Calculator { @GET @Path("/add/{fn}+{sn}") public CalNums add(@PathParam("fn")String fn,@PathParam("sn")String sn); @GET @Path("/minus/{fn}-{sn}") public CalNums minus(@PathParam("fn")String fn,@PathParam("sn")String sn); @GET @Path("/multi/{fn}*{sn}") public CalNums multi(@PathParam("fn")String fn,@PathParam("sn")String sn); }
3.实现接口
package DAO; import javax.xml.bind.annotation.XmlRootElement; import POJO.CalNums; import POJO.Calculator; public class CalculatorImpl implements Calculator { CalNums calnum=new CalNums(); @Override public CalNums add(String fn, String sn) { // TODO Auto-generated method stub int a=Integer.parseInt(fn); int b=Integer.parseInt(sn); int result=a+b; System.out.println("result of add="+result); calnum.setFirstNum(a); calnum.setSecondNum(b); calnum.setResult(result); return calnum; } @Override public CalNums minus(String fn, String sn) { // TODO Auto-generated method stub int a=Integer.parseInt(fn); int b=Integer.parseInt(sn); int result=a-b; System.out.println("result of minus="+result); calnum.setFirstNum(a); calnum.setSecondNum(b); calnum.setResult(result); return calnum; } @Override public CalNums multi(String fn, String sn) { // TODO Auto-generated method stub int a=Integer.parseInt(fn); int b=Integer.parseInt(sn); int result=a*b; System.out.println("result of multiple="+result); calnum.setFirstNum(a); calnum.setSecondNum(b); calnum.setResult(result); return calnum; } }
4.编写发布类,通过JAXRSServerFactoryBean实例对象来完成。
该类中有一些主要的方法:
public void setResourceClasses(Class… classes);
Class类型的参数,是告诉这个类,发布服务时,会用到的类
public void setAddress(String address);
设置服务的地址,例如”http://localhost:9997/rs”
package Service; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import DAO.CalculatorImpl; import POJO.CalNums; public class CalculatorService { public static void main(String[] args) { JAXRSServerFactoryBean restServer = new JAXRSServerFactoryBean(); restServer.getInInterceptors().add(new LoggingInInterceptor( 8ffa )); restServer.getOutInterceptors().add(new LoggingOutInterceptor()); restServer.setResourceClasses(CalculatorImpl.class,CalNums.class); restServer.setAddress("http://localhost:9997/rs"); restServer.create(); } }
到此就可以run一下我们的程序了。
5.测试,浏览器输入
http://localhost:9997/rs/calculator/add/1+1
可以看见如下代码
<?xml version="1.0" encoding="UTF-8" standalone="true"?> -<CalNums> <firstNum>1</firstNum> <result>2</result> <secondNum>1</secondNum> </CalNums>
这样就完成了一个入门的小例子。
再次感谢我的老师。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树