zoukankan      html  css  js  c++  java
  • 简单的图片处理servlet

    好久没写博客了。近期做了一个比較有趣的商城项目,里面的业务还真的非常复杂,好在做了特殊的处理之后商城也能正常的使用了。

    可是没中不足的就是图片目录和项目掺杂在一块,实在有些难以维护。之后找了点资料就搞了个简单的图片读取服务端程序,还算好用今天得闲了就整理出来给大家參考一下。

    1 项目源码和图片目录放一块的优缺点

    长处:方便检索、逻辑相对清晰

    缺点:源码体积增大、easy丢失图片、easy被类似struts2这种漏洞利用(如被黑客删除、篡改)

    2 解决方式

    项目的上传文件的代码做对应调整,改为和源码不同的路径;图片显示先经过servlet把图片读取到server内存缓冲区。之后显示出来

    3 图片读取与显示servlet

    package org.lxh;
    
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * @说明 该Servlet将本地硬盘的图片输入管道中
     * @version 1.0
     * @since
     */
    @SuppressWarnings("serial")
    public class ImageShowServlet extends HttpServlet {
    
    	@Override
    	protected void service(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		
    		String uri=request.getRequestURI();
    		String rs=uri.substring(6);
    		String result=rs.replace("/", File.separator);
    		
    		OutputStream os = response.getOutputStream();
    		File file = new File("D:\"+result);
    		FileInputStream fips = new FileInputStream(file);
    		byte[] btImg = readStream(fips);
    		os.write(btImg);
    		os.flush();
    	}
    	
    	/**
    	 * 读取管道中的流数据
    	 */
    	public byte[] readStream(InputStream inStream) {
    		ByteArrayOutputStream bops = new ByteArrayOutputStream();
    		int data = -1;
    		try {
    			while((data = inStream.read()) != -1){
    				bops.write(data);
    			}
    			return bops.toByteArray();
    		}catch(Exception e){
    			return null;
    		}
    	}
    }

    图片的路径依据实际情况进行改动,关键方法是readStream

    4 web.xml的配置

      <servlet>  
        <servlet-name>ImageShowServlet</servlet-name>  
        <servlet-class>org.lxh.ImageShowServlet</servlet-class>  
      </servlet>  
      <servlet-mapping>  
        <servlet-name>ImageShowServlet</servlet-name>  
        <url-pattern>/*</url-pattern>  
      </servlet-mapping>  

    5 怎样使用(一句代码搞定)

    <img src="/image${smallImage}" width="50px" height="50px"/>

    ${smallImage}是通过数据库动态读取出来的,就类似“/upload/front/image/201412/9da935f7-e3fe-45c1-9823-1d6c7d748606.jpg”这样的

    注:该servlet可作为一个项目打包,和主项目放一块就能够搭配使用了。



  • 相关阅读:
    优秀的云架构师需要学什么技能
    dkh人力资源大数据解决方案整体架构
    大数据hadoop与spark的区别
    hadoop技术入门学习之发行版选择
    大数据开发基础知识需要掌握哪些
    智慧人社政务云平台建设方案架构案例介绍
    [项目机会]citrix 虚拟桌面对于java等高CPU占用率如何解决
    [办公自动化]无法使用江南天安usbkey 无法使用视频网站
    [学习笔记]从0到1
    [办公自动化]目录修改以及插入分页符后行间距自动变宽
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7258639.html
Copyright © 2011-2022 走看看