• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: 小 中 大 | 推荐给好友 上一篇 | 下一篇

从数据库中读取并生成图片的Servlet

发布: 2007-7-01 18:47 | 作者: admin | 来源: | 查看: 18次 | 进入软件测试论坛讨论

领测软件测试网 大体思路
1)创建ServletOutputStream对象out,用于以字节流的方式输出图像
2)查询数据库,用getBinaryStream方法返回InputStream对象in
3)创建byte数组用作缓冲,将in读入buf[],再由out输出
  
注:下面的例程中数据库连接用了ConnectionPool,以及参数的获得进行了预处理
  
package.net.seasky.music;
  
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import net.seasky.util.*;
import net.seasky.database.DbConnectionManager;
  
public class CoverServlet extends HttpServlet {
  private static final String CONTENT_TYPE = "image/gif";
  public void init(ServletConfig config) throws ServletException {
    super.init(config);
  }
  
  public void doGet(HttpServletRequest request, HttpServletResponse response
) throws ServletException, IOException {
    response.setContentType(CONTENT_TYPE);
    int albumID;
    ServletOutputStream out = response.getOutputStream();
    try {
      albumID = ParamManager.getIntParameter(request,"albumID",0);
    }
    catch (Exception e) {
      response.sendRedirect("../ErroePage.jsp");
      return;
    }
    try {
      InputStream in=this.getCover(albumID);
      int len;
      byte buf[]=new byte[1024];
      while ((len=in.read(buf,0,1024))!=-1) {
        out.write(buf,0,len);
      }
    }
    catch (IOException ioe) {
      ioe.printStackTrace() ;
    }
  }
  
  private InputStream getCover(int albumID) {
    InputStream in=null;
    Connection cn = null;
    PreparedStatement pst = null;
    try {
      cn=DbConnectionManager.getConnection();
      cn.setCatalog("music");
      pst=cn.prepareStatement("SELECT img FROM cover where ID =?");
      pst.setInt(1,albumID);
      ResultSet rs=pst.executeQuery();
      rs.next() ;
      in=rs.getBinaryStream("img");
    }
    catch (SQLException sqle) {
      System.err.println("Error in CoverServlet : getCover()-" + sqle);
      sqle.printStackTrace() ;
    }
    finally {
      try {
        pst.close() ;
        cn.close() ;
      }
      catch (Exception e) {
        e.printStackTrace();
      }
    }
    return in;
  }
  
  public void destroy() {
  }
} 

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:[email protected] 电话:010-51297073

软件测试 | 领测国际 | ISTQB | ISTQB官网 | TMMi | TMMi认证 | 国际软件测试工程师认证 | 领测软件测试网