关于WebService的一些了解,简单来说,webservice就是远程调用技术,也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册.
XML:(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是Soap的基础
Soap:(Simple Object Access Protocol)简单对象存取协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。
WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。
准确的来说,webservice不是一种技术,而是一种规范。是一种跨平台,跨语言的规范,用于不同平台,不同语言开发的应用之间的交互,
我们一般就是在具体平台开发webservice接口,以及调用webservice接口,每种开发语言都有自己的webservice实现框架。比如Java 就有 Apache Axis1、Apache Axis2、Codehaus XFire、Apache CXF、Apache Wink、Jboss RESTEasyd等等。其中Apache CXF用的比较多,它也可以和Spring整合。
上面是关于WebService的简单介绍:
以下是WebService的代码部分:
服务端代码:
1.创建javaWeb工程
package com.hyan.service;
import java.io.*;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
import com.hyan.dao.GetValue;
import com.hyan.toolts.Log4jBean;
import com.hyan.toolts.ReadConfig;
@WebService
public class ServiceHello implements GetValue{
/*
* 服务端,读取文件
*fileContent 文件内容 fileName 文件名称
*/
public void getValue(String fileContent,String fileName) {
try {
// ReadConfig.PullConfigXml(); //调用自己写好的配置文件
String filePaths="E:\\eclipse-workspace\\TheService\\src\\"+fileName;
int temp = this.writeFile(filePaths, fileContent.getBytes("GBK"));
if(temp>=0) {
System.out.println("写入文件成功!");
}else {
System.out.println("写入文件失败!");
}
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
/*
* 写入文件
*/
public int writeFile(String filePath, byte[] content) {
// LOGBean.logger("debug", "写文件[" + fileName + "]\n", context);
System.out.println("开始写文件。。。。");
FileOutputStream os = null;
try {
os = new FileOutputStream(filePath,true);
//Log4jBean.logger.info("准备写入文件");
os.write(content);
//Log4jBean.logger.info("开始刷新文件");
os.flush();
} catch (Exception e) {
//LOGBean.logger("error", "写文件[" + fileName + "]失败 " + e.toString());
return -1;
} finally {
try {
if (null != os)
os.close();
} catch (IOException e) {
}
}
System.out.println("写入文件成功");
os = null;
//LOGBean.logger("debug", "写文件[" + fileName + "]成功", context);
return 0;
}
public static void main(String[] args) {
/**
* 参数1:服务的发布地址http://localhost:8080/Service/ServiceHello
* 参数2:服务的实现者new ServiceHello()
*/
GetValue gv=new ServiceHello();// 发布对外开放的接口
Endpoint.publish("http://localhost:8080/Service/ServiceHello",gv);
System.out.println("service success!");
}
}
2.其中服务端的一个接口:
package com.hyan.dao;
public interface GetValue {
//获取客户端文件内容及名称
public void getValue(String fileContent,String fileName);
//写入文件
public int writeFile(String filePath, byte[] content);
}
测试结果:
测试地址:http://localhost:8080/Service/ServiceHello?wsdl
客户端代码:
命令提示窗口执行生成命令
格式:wsimport -s "src目录" -p “生成类所在包名” -keep “wsdl发布地址”
如:wsimport -s E:\\eclipse-workspace\\TheClient\\src -p com.hyan.client -keep http://localhost:8080/Service/ServiceHello?wsd
说明:
1."src目录"地址不可含空格
2.“wsdl发布地址”不要漏了“?wsdl”
3.刷新项目,检查生成类
最终测试
1.创建【Class】类,命名为【ServiceTest】,位于【com.hyan.test】包下。
package com.hyan.test;
import java.io.*;
import java.util.List;
import com.hyan.client.ServiceHello;
import com.hyan.client.ServiceHelloService;
import com.hyan.toolts.Divideflow;
import com.hyan.toolts.IPTimeStamp;
import com.hyan.toolts.ReadConfig;
/*
* 测试客户端调用服务端方法
*/
public class ServiceTest {
//@param args
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = null;
String filePaths ="XXXX.txt";
try {
//1.先获得文件句柄,File file=new File("文件名");
file=new File(filePaths);
if(file.isFile()&&file.exists()){//判断文件是否存在
//2.获得文件句柄当做是输入一个字节码流,需要对这个输入流进行读取
InputStreamReader read=new InputStreamReader(
new FileInputStream(file),"GBK");//考虑到编码格式
BufferedReader br=new BufferedReader(read);
String lineTxt=new String();
StringBuilder strBuf=new StringBuilder();
while((lineTxt=br.readLine())!=null) {
strBuf.append(lineTxt);//把文件里面的内容一条一条读出来存在StringBuilder里面
}
ServiceHello hello =new ServiceHelloService().getServiceHelloPort();
String[] addTimeFile=file.getName().split("\\.");
hello.getValue(strBuf+"\n\r",addTimeFile[0]+"_"+timeStamp.getTimeStamp()+"."+addTimeFile[1]);
}else{
System.out.println("找不到指定的文件");
}
} catch (Exception e) {
System.out.println("读取文件内容出错");
e.printStackTrace();
}
}
}
效果:
第一个为客户端的执行效果
第二个为服务端的执行效果