简单图片服务器的小小心得


简单情况的,复杂情况不聊,也还没有那个架构水准。
以一个展示需要很多图片的web应用作为例子:
1.如果图片和web应用都在一台服务器上,图片越来越多,那么必然大量占用服务器的资源,导致一系列问题。

为了解决这样的问题,我们可以将web应用看成这样的部分组成:不变的web程序包+不断增长的图片文件。
那么我们可以将图片部分单独的提取出来,放在另外的一台服务器上,让原来的服务器只运行web程序包,网页上的图片都用一个

URL地址来指向这些服务器上的图片的地址,这样的话网站的性能就明显提高了,图片服务器(ImageServer)的概念也就产生了。

2.整个的流程就是这样的:
web程序包服务器A(http://192.168.1.1:8080/web
图片服务器B(http://192.168.1.123:8080/fileService
A通过HTTP请求(也就是一个地址)访问B进行存储或获取图片
主要是通过tomcat自带的catalina.jar中的org.apache.catalina.servlets.WebdavServlet实现,采用的是webDav协议。
WebDAV (Web-based Distributed Authoring and Versioning) 一种基于 HTTP 1.1协议的通信协议。它扩展了HTTP 1.1,在GET

、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可直接对Web Server直接读写,并支持写文件锁定

(Locking)及解锁(Unlock),还可以支持文件的版本控制。

 

web服务器A通过页面操作上传一张图片,图片传到后台action,后台action调用底层,底层此时做的事情有两个:

一个是将图片对象加入到一个http请求中,然后将这个请求发送到图片服务器B。
大致过程如下:
  HttpClient client = new HttpClient();//建立对象
  PutMethod put = new PutMethod(“http://192.168.1.123:8080/fileService”);//设定put方法请求的地址,看了下jar包应该也可以post请求调用put方法
  RequestEntity sImageRequestEntity = new ByteArrayRequestEntity(sImage);
  put.setRequestEntity(sImageRequestEntity);
 //图片设定到请求中去(图片流格式要注意,这里不是具体的正确的格式)
 client.executeMethod(put);//执行设定的请求的方法

一个是请求发送之后,将文件的部分路径保存下来,存放在数据库中

图片服务器B要做什么事情呢,接收请求,保存图片。

 

图片服务器代码:

public class FileServlet extends WebdavServlet {

	private FileManager fileManager;
         //这里就是被web应用请求所调用的put方法
	@Override
	protected void doPut(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
				InputStream is = req.getInputStream();
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		int b = -1;
		while ((b = is.read()) != -1) {
			baos.write(b);
		}
		try {
			String rootPath = req.getSession().getServletContext().getRealPath(
					"/upload");
			fileManager.setRoot(rootPath);
			fileManager.saveFile(rootPath,
					baos.toByteArray());

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			baos.close();
		}
	}
         //当然还有很多其他的方法,比如,doDelte,doGet等等
	@Override
	public void init() throws ServletException {
		fileManager = new FileManagerImpl();
		super.init();
	}

}

3.图片保存在了图片服务器,路径也保存到了web应用服务器对应的数据库中了,此时就该页面显示了

如:

<img width="224" height="120"  alt="sdfsdf" src="http://192.168.1.123:8080/fileService/upload/1.jpg">


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值