Servlet編程之用Servlet顯示圖片
在Servlet編程中用servlet做一個跟蹤圖片點擊技術(shù),這個模塊挺大,這里說說用Servlet顯示圖片部分。先說說用Servlet顯示圖片的一個流程:
1. Servlet編程中設置response的輸出類型:
對應的語句--response.setContentType("image/gif;charset=GB2312") ,
response 便能輸出gif圖片,"image/gif;charset=GB2312"便是輸出類型,當然你可以輸出 "image/jpg;charset=GB2312"類型文件。
2. 實現(xiàn)Servlet顯示圖片之得到文件流:
servlet是以流的形式件圖片文件從服務器讀出,通過response將流發(fā)到瀏覽器的。
3. 實現(xiàn)Servlet顯示圖片之得到輸出流:
對應的語句--OutputStream output = response.getOutputStream(); 當然,處理圖片文件需要以二進制形式的流。
4. 實現(xiàn)Servlet顯示圖片之文件流的編碼(但也不一定必須編碼的,如果不是文件流,則必須編碼) 所以我給大家一個用編碼的代碼和不用編碼的代碼.
順便說一句,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";
實現(xiàn)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";
圖片相對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();//關(guān)閉文件流 }
- 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];//緩沖字節(jié)數(shù)
- 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(); }
- }
***是如何調(diào)用,你可以簡單的映射一下servelt,我就將servet的名映射為ShowPic, 于是下代碼調(diào)用
- ﹤html﹥
- ﹤body﹥
- ﹤img src="ShowPic?spec=2"﹥﹤/a﹥
- ﹤/body﹥
- ﹤/html﹥
Servlet編程之用Servlet顯示圖片的介紹就是這樣子了,通過上述操作圖片便顯示在htm上了,效果如何呢?
【編輯推薦】