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

JSP
JSP中有关时间和日期类的使用
JSP中引用JavaBean组件
如何在JSP中添加自己的Tag
使用JSP/Servlet上载文件
关于Java Servlet的Filter 技术
JSP数据库连接方式总结
不需ODBC可由IP地址与端口号建立与SQLSERVER的连接
J2ME学习札记(三)
java 设计模式之Observer
在JSP中如何从数据流中取得图片数据并按随意位置显示
三级级联下拉菜单实现
网页中在图层中部分显示图片(窗口形式)
MySQL5.0中文问题及JDBC数据库连接和JSP汉字编码问题解决方法总结
XSLT合并模板简述
JSP入门学习笔记
Structs中基本配置入门
利用jConfig获取xml文件中的配置信息
关于Applet做数字签名,授予访问本地资源(原创)
在JSP开发中使用jdom解析临时存放数据的XML文件
关于Hhtml嵌入打成jar包的Applet方法

JSP 中的 用servlet显示图片


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-03   浏览: 233 ::
收藏到网摘: 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]