您的位置:首页 > 其它

Hession和Jersey实现应用服务器和图片服务器分离(向外提供服务接口)

2016-10-09 16:47 423 查看
1、修改Tomcat的web.xml文件,支持文件的上传

<servlet>

<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>

</servlet>


2、修改项目的编码格式和Tomcat的编码格式统一。防止出现文件名称的中文乱码问题

       1.项目的编码格式



       2.Tomcat的编码格式



3、建立FileStore的Web项目,在里面建立upload文件夹,用于存放上传的文件



4、建立FileUploader的Web项目,通过Hession发布文件上传的服务

4.1 上传文件的接口

public interface FileUploadServiceI {

public UploadResult upload(String filename, InputStream data);
}


4.2 上传文件的实现类,利用jersey上传图片到服务器

public class FileUploadServiceImpl implements FileUploadServiceI {

public UploadResult upload(String filename, InputStream data) {
UploadResult uploadResult = null;
Client client = null;
WebResource wr = null;
ByteArrayOutputStream bos = null;
try {
// 创建Client对象 注意是 jersey 中的 Client com.sun.jersey.api.client.Client;
client = Client.create();
// 服务器地址
// 如果服务器地址有多个,可以使用简单的轮询算法,实现图片存放的负载
String url = "http://192.168.2.100:8080/FileStore/";
String path = "upload/" + filename;
String filePath = url + path;
wr = client.resource(filePath);

// 要传输的数据流
byte[] buffer = new byte[1024];
int len = 0;
bos = new ByteArrayOutputStream();
while ((len = data.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.flush();
// 输入流 读图片到内存中
byte[] readFileToByteArray = bos.toByteArray();
// 向服务器发送文件
wr.put(readFileToByteArray);

// 返回图片的存放信息
// 1.url 图片服务器的地址
// 2.path 图片的存放路径
uploadResult = new UploadResult(url, path);

} catch (IOException e) {
e.printStackTrace();
}
System.out.println("文件上传成功");
return uploadResult;

}
}


4.3 用于记录图片地址的JavaBean

//因为要进行网络传输,所以要进行序列化
public class UploadResult implements Serializable {

private static final long serialVersionUID = 4681292538876502348L;
private String url;
private String path;

public UploadResult() {
}

public UploadResult(String url, String path) {
this.url = url;
this.path = path;
}

public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}

public String getPath() {
return path;
}

public void setPath(String path) {
this.path = path;
}

@Override
public String toString() {
return "UploadResult ";
}

}


4.4 修改web.xml文件利用Hession发布服务

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<servlet>
<servlet-name>FileUploadService</servlet-name>
<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
<init-param>
<!-- home-class也可以写为service-class -->
<param-name>home-class</param-name>
<!-- 服务器对接口的现实,供客户端调用 -->
<param-value>file.upload.service.impl.FileUploadServiceImpl</param-value>
</init-param>
<init-param>
<!-- 提供给客户端调用的接口,这里的home-api配置不是必须的,可以不配置 -->
<!--home-api也可以写为api-class -->
<param-name>home-api</param-name>
<!-- 客户端接口 -->
<param-value>file.upload.service.FileUploadServiceI</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>FileUploadService</servlet-name>
<url-pattern>/FileUploadService</url-pattern>
</servlet-mapping>

</web-app>


4.5 测试hession发布的服务



5、建立FileUploaderTest的客户端程序

5.1 客户端的代码结构如下(需要用到服务端的两个Java类)



5.2 客户端的测试代码

public class FileUploaderClient {
// Hessian服务的url
private static final String url = "http://192.168.2.100:8080/FileUploader/FileUploadService";

public static void main(String[] args) throws Exception {
// 创建HessianProxyFactory实例
HessianProxyFactory factory = new HessianProxyFactory();
// 获得Hessian服务的远程引用
FileUploadServiceI uploader = (FileUploadServiceI) factory.create(
FileUploadServiceI.class, url);
// 要上传的文件的路径
String filePath = "E:/文件上传.pdf";
// 读取需要上传的文件
InputStream data = new BufferedInputStream(
new FileInputStream(filePath));
// 获取文件的名称
String fileName = FilenameUtils.getName(filePath);
// 调用远程服务上传文件。
UploadResult uploadResult = uploader.upload(fileName, data);

// 图片的存放地址为
System.out.println("文件的存放地址为:" + uploadResult.toString());
// 在实现开发里面,将图片存放的信息
// 以json的信息返回给客户端,实现图片的显示

}


6、代码下载

[url=http://pan.baidu.com/s/1c1Q3X5Y]FileStore

FileUploader

FileUploaderTest

tomcat7
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐