webService实例

来源:互联网 发布:2017淘宝买家秀福利 编辑:程序博客网 时间:2024/05/18 20:46

项目中为了实现服务器间的文件传输,开始使用URL类来获取文件流,后来遇到中文问题,无论如何找不到文件.无奈之下改用webService实现

1.webService服务端程序:

package com.webservice;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 用于发送公告附件文件
 *
 */
public class SendFile extends HttpServlet {

 /**
  *
  */
 private static final long serialVersionUID = -1569160986493044411L;

 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  doPost(request, response);
 }

 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String path = this.getClass().getResource("").getPath();
  path = path.substring(1, path.indexOf("/server"));
  // 附件存在位置
  String filePath = path + "/bin/BulletinDir";
  String infoID = request.getParameter("infoID");
  String saveName = request.getParameter("saveName");
  saveName = new String(saveName.getBytes("iso-8859-1"), "gbk");
  File file = new File(filePath + "/" + infoID + "/" + saveName);

  FileInputStream fis = new FileInputStream(file);
  //
  ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
  byte[] b = new byte[4096];
  int n = -1;
  while ((n = fis.read(b)) != -1) {
   baos.write(b, 0, n);
  }
  fis.close();
  baos.close();
  // 存放文件的字节数组
  byte[] ret = baos.toByteArray();
  //
  System.out.println(filePath + "/" + infoID + "/" + saveName);
  ObjectOutputStream out = new ObjectOutputStream(response.getOutputStream());
  out.writeObject(ret);
  out.flush();
  out.close();
 }

}

 

 

2.web.xml配置

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <!-- 配置过滤webService请求 -->
 <servlet>
  <servlet-name>sendFile</servlet-name>
  <servlet-class>com.webservice.SendFile</servlet-class>
 </servlet>
   <servlet-mapping>
    <servlet-name>sendFile</servlet-name>
    <url-pattern>/annotation</url-pattern>
   </servlet-mapping>
</web-app>

3.客户端调用程序:

// 在本地生成的文件
  java.io.File file_gl = new java.io.File(strAbsPath + "/page_dir/" + infoID + "/" + saveName);

// 服务端服务地址及端口

  String serverIp = "127.0.0.1:8080";
  //调用webservice生成文件
  try {
   // 请求的远程URL
   String path = "http://" + serverIp + "/annotation";
   String pa = path + "?infoID=" + infoID + "&saveName=" + saveName;
   URL url = new URL(pa);
   URLConnection connection = url.openConnection();
   InputStream is = connection.getInputStream();
   ObjectInputStream objInStream = new ObjectInputStream(is);
  // 取得信息
   byte[] fileByte = (byte[]) objInStream.readObject();
   FileOutputStream fos = new FileOutputStream(file_gl);
   BufferedOutputStream bos = new BufferedOutputStream(fos);
   bos.write(fileByte);
   bos.flush();
   bos.close();

  } catch (Exception e) {
   e.printStackTrace();
  }

 

这样就完成了两台服务器通信的问题,不用在为中文问题困扰

注:开始净文件写入输出流,后来发现,写入的其实只是一个文件路径,并没有真正的将文件写入。之后改用现在的,将文件内容存入字节数据,(为什么不存入其他文件流呢,因为文件流是不可序列化的,不能被webService写入),最后将字节数据传输过去,大功告成!

原创粉丝点击