当前位置:编程学习 > JAVA >>

为什么这段代码无法显示图片啊

import java.io.IOException;   
import javax.servlet.ServletException;   
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpServletResponse;   
  
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;   
  
/**  
 *   
 * 显示文件的Servlet  
 * 负责从本地文件中读取图片,  
 *   
 */  
public class ShowPic extends javax.servlet.http.HttpServlet implements  
        javax.servlet.Servlet {   
  
    private static final String GIF = "image/gif;charset=GB2312";// 设定输出的类型   
  
    private static final String JPG = "image/jpeg;charset=GB2312";   
  
    /*  
     * (non-Java-doc)  
     *   
     * @see javax.servlet.http.HttpServlet#HttpServlet()  
     */  
    public ShowPic() {   
        super();   
    }   
  
    /*  
     * (non-Java-doc)  
     *   
     * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request,  
     *      HttpServletResponse response)  
     */  
    protected void doGet(HttpServletRequest request,   
            HttpServletResponse response) throws ServletException, IOException {   
        doPost(request, response);   
    }   
  
    /*  
     * (non-Java-doc)  
     *   
     * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request,  
     *      HttpServletResponse response)  
     */  
    protected void doPost(HttpServletRequest request,   
            HttpServletResponse response) throws ServletException, IOException {   
        String spec = request.getParameter("spec");// 输出图片的类型的标志   
  
        String imagePath = "D:\\temp\\1.jpg";   
  
        response.reset();   
  
        OutputStream output = response.getOutputStream();// 得到输出流   
        if (imagePath.toLowerCase().endsWith(".jpg"))// 使用编码处理文件流的情况:   
        {   
            response.setContentType(JPG);// 设定输出的类型   
            // 得到图片的真实路径   
  
            // 得到图片的文件流   
            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();   
    }   
}





<servlet>  
    <servlet-name>ShowPic</servlet-name>  
    <display-name>ShowPic</display-name>  
    <description></description>  
    <servlet-class>  
    cn.ccb.zlgz.web.servlet.ShowPic</servlet-class>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>ShowPic</servlet-name>  
    <url-pattern>/ShowPic</url-pattern>  
  </servlet-mapping>  






Html代码  
<html>  
<body>  
<img src="ShowPic?spec=2"></a>  
</body>  
</html>  


http://tntxia.iteye.com/blog/826193源地址。





--------------------编程问答-------------------- InputStream imageIn = context.getResourceAsStream(imagePath);

看看这句能得到文件吗? --------------------编程问答-------------------- 可以吧!。那是输入流文件 。。 --------------------编程问答--------------------

  byte data[] = new byte[4096];// 缓冲字节数  
  int size = 0;
  while ((size = bis.read(data, 0, data.length)) != -1) {  
  bos.write(data, 0, size);  
  }
--------------------编程问答-------------------- 不行啊。。老大 --------------------编程问答-------------------- 那你先把文件写到本地,然后看是否生成了图片。 --------------------编程问答-------------------- 都是本地啊。。。是读图片 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 5 楼 softroad 的回复:
那你先把文件写到本地,然后看是否生成了图片。


读完的在写成另一个,看是否读的正确。 --------------------编程问答-------------------- 用debug模式一句一句的检查代码吧
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,