Java开发网 |
注册 |
登录 |
帮助 |
搜索 |
排行榜 |
发帖统计
|
您没有登录 |
» Java开发网 » Servlet/JSP/JSF/JavaFX Script
打印话题 寄给朋友 订阅主题 |
作者 | 用servlet显示图片 |
javabin
发贴: 55 |
于 2004-09-29 12:28
最近,公司用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的时间不长,如有问题,尽情指正。 我有一点感想和初学者们同享(原创) |
话题树型展开 |
人气 | 标题 | 作者 | 字数 | 发贴时间 |
997 | 用servlet显示图片 | javabin | 3449 | 2004-09-29 12:28 |
已读帖子 新的帖子 被删除的帖子 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |