当前位置: 首页 > 图文教程 > 网络编程 > JSP > 用servlet显示图片

JSP
Hibernate save() saveorupdate()的用法
hibernate更新数据方法小结
jsp 复选框使用方法
JSP单选按钮验证、下拉框验证、复选框验证实现代码
jsp Hibernate批量更新和批量删除处理代码
JSP彩色验证码的实例代码
[J2SE]Java中3DES加密解密调用示例
【算法】扑克发牌算法实现
java易懂易用的MD5加密(可直接运行) (1)
java 易懂易用的MD5加密(可直接运行)(2)
java 截取字符串(判断汉字)
java 中文字符串数组按照音序排列
JAVA 18位身份证号码校验码的算法
jsp JFreeChart使用心得与例子
Hibernate 查询方式总结
java struts常见错误以及原因分析
Java 获取URL的内容
JAVA (Jsp)利用Google的Translate开发API的代码
java SOAPHEADER的web service
JSP与JS交互问题 值传递

JSP 中的 用servlet显示图片


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-03   浏览: 253 ::
收藏到网摘: n/a

[pre]    最近,公司用servlet做一个跟踪图片点击技术的模块,我个人略有心得想和大家分享,
 不知大家愿意审视。
 这个模块挺大,我仅说说用servlet显示图片部分。我先说说用servlet显示图片的一个流程:
 1. 设置response的输出类型:
    对应的语句--response.setContentType("image/gif;charset=GB2312") ,response  
    便能输出gif图片,"image/gif;charset=GB2312"便是输出类型,当然你可以输出
    "image/jpg;charset=GB2312"类型文件。
 2. 得到文件流:
    servlet是以流的形式件图片文件从服务器读出,通过response将流发到浏览器的。
 3. 得到输出流:
    对应的语句--OutputStream output = response.getOutputStream();
    当然,处理图片文件需要以二进制形式的流。
 4. 文件流的编码(但也不一定必须编码的,如果不是文件流,则必须编码)
    所以我给大家一个用编码的代码和不用编码的代码.
  顺便说一句,sun公司仅提供了jpg图片文件的编码api。
    
    我想基本流程都讲完了,下面我把代码拿给大家看一下,大家自然一目了然了:
package xjw.personal.servet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.sun.image.codec.jpeg.*;//sun公司仅提供了jpg图片文件的编码api
import javax.imageio.stream.*;
import java.awt.*;
import java.awt.image.BufferedImage;
public class ShowPicture  extends HttpServlet
{
     private static final String GIF="image/gif;charset=GB2312";//设定输出的类型
     private static final String JPG="image/jpeg;charset=GB2312";
     public void init()  throws ServletException
     {
     }
     public void doGet(HttpServletRequest request, HttpServletResponse response)
                  throws IOException, ServletException
     {
        doPost(request, response);
     }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
                 throws IOException, ServletException
   {
        
        String spec=request.getParameter("spec");//输出图片的类型的标志
     int int_spec=Integer.parseInt(spec);
        if(spec==1)    
        {
            String imagePath="/jfgg/b1.jpg";//图片相对web应用的位置
        }
        else
        {
              String imagePath="/jfgg/b2.gif";//图片相对web应用的位置
        }    
        
       OutputStream output = response.getOutputStream();//得到输出流
       if(imagePath.toLowerCase().endsWith(".jpg"))//使用编码处理文件流的情况:
      {
     response.setContentType(JPG);//设定输出的类型
          //得到图片的真实路径      
          imagePath = getServletContext().getRealPath(imagePath);
         //得到图片的文件流
          InputStream imageIn = new FileInputStream(new File(imagePath));
         //得到输入的编码器,将文件流进行jpg格式编码
     JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(imageIn);
         //得到编码后的图片对象
         BufferedImage image = decoder.decodeAsBufferedImage();
         //得到输出的编码器
          JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);
          encoder.encode(image);//对图片进行输出编码
          imageIn.close();//关闭文件流
       }
       if(imagePath.toLowerCase().endsWith(".gif"))//不使用编码处理文件流的情况:
      {
    response.setContentType(GIF);
    ServletContext context = getServletContext();//得到背景对象
    InputStream imageIn=context.getResourceAsStream(imagePath);//文件流
         BufferedInputStream bis=new BufferedInputStream(imageIn);//输入缓冲流
    BufferedOutputStream bos=new BufferedOutputStream(output);//输出缓冲流
    byte data[]=new byte[4096];//缓冲字节数
    int size=0; 
    size=bis.read(data);
    while (size!=-1)
    {
       bos.write(data,0,size);
            size=bis.read(data);
    }
    bis.close();
    bos.flush();//清空输出缓冲流
         bos.close();
    }
      output.close();
            
     }
}
    最后是如何调用,你可以简单的映射一下servelt,我就将servet的名映射为
       ShowPic,  于是下代码调用
    <html>
    <body>
    <img src="ShowPic?spec=2"></a>
    </body>
    </html>
        这样图片便显示在htm上了,本人研究java的时间不长,如有问题,尽情指正。[/pre]