在Servlet编程中用servlet做一个跟踪图片点击技术,这个模块挺大,这里说说用Servlet显示图片部分。先说说用Servlet显示图片的一个流程:
1. Servlet编程中设置response的输出类型:
对应的语句--response.setContentType("image/gif;charset=GB2312") ,
response 便能输出gif图片,"image/gif;charset=GB2312"便是输出类型,当然你可以输出 "image/jpg;charset=GB2312"类型文件。
2. 实现Servlet显示图片之得到文件流:
servlet是以流的形式件图片文件从服务器读出,通过response将流发到浏览器的。
3. 实现Servlet显示图片之得到输出流:
对应的语句--OutputStream output = response.getOutputStream(); 当然,处理图片文件需要以二进制形式的流。
4. 实现Servlet显示图片之文件流的编码(但也不一定必须编码的,如果不是文件流,则必须编码) 所以我给大家一个用编码的代码和不用编码的代码.
顺便说一句,sun公司仅提供了jpg图片文件的编码api。
我想基本流程都讲完了,下面我把代码拿给大家看一下,大家自然一目了然了:
package xjw.personal.servet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.sun.image.codec.jpeg.*;
- 1.
- 2.
- 3.
- 4.
- 5.
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";
- 1.
- 2.
- 3.
- 4.
- 5.
实现Servlet显示图片之设定输出的类型
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";
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
图片相对web应用的位置
}
OutputStream output = response.getOutputStream();//得到输出流
if(imagePath.toLowerCase().endsWith(".jpg"))//使用编码处理文件流的情况:
{ response.setContentType(JPG);//设定输出的类型
//得到图片的真实路径
imagePath = getServletContext().getRealPath(imagePath);
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
得到图片的文件流
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(); }
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
***是如何调用,你可以简单的映射一下servelt,我就将servet的名映射为ShowPic, 于是下代码调用
﹤html﹥
﹤body﹥
﹤img src="ShowPic?spec=2"﹥﹤/a﹥
﹤/body﹥
﹤/html﹥
- 1.
- 2.
- 3.
- 4.
- 5.
Servlet编程之用Servlet显示图片的介绍就是这样子了,通过上述操作图片便显示在htm上了,效果如何呢?
【编辑推荐】