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

13 篇文章 0 订阅
3 篇文章 0 订阅

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 [url=" + url + ", path=" + path + "]";
	}

}

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、代码下载

FileStore

FileUploader

FileUploaderTest

tomcat7



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值