用 servlet 生成圖片(輸出的不是文本,而是圖片)
應(yīng)用:驗(yàn)證碼 —— 防止客戶端惡意發(fā)信息,如:寫一個(gè) for 循環(huán)不停發(fā)帖。
public class ImageServlet extends HttpServlet {
public void doGet (HttpServletRequest request, HtttpServletResponse response) throws ServletException, IOException {
response.setContentType ("image/jpeg"); // 設(shè)置響應(yīng)類型
BufferedImage image = new BufferedImage (600, 200, BufferedImage.TYPE_INT_RGB);
// 圖片的內(nèi)存映像,點(diǎn)陣信息
Random r = new Random();
Graphics g = image.getGraphics(); // 獲得畫筆對(duì)象
g.setColor (new Color (r.nextInt(255), r.nextInt(255), r.nextInt(255))); // setColor 設(shè)置當(dāng)前畫筆的顏色
g.fillRect (0,0,600,200);
g.setColor (new Color(255,255,255));
g.fillOval (30,50,200,200);
g.setColor (new Color(0,0,0));
String number = String.valueOf(r.nextInt(99999));
g.drawString (number,200,150);
OutputStream os = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os); // 壓縮成 jpeg 格式
encoder.encode(image); // 把 BufferedImage 對(duì)象中的圖像信息編碼后,向創(chuàng)建該對(duì)象(encoder)時(shí)指定的輸出流輸出
}
}
瀏覽器向服務(wù)器發(fā)送請(qǐng)求,獲得 html,當(dāng)遇到<img ... />標(biāo)簽時(shí),瀏覽器則會(huì)再向服務(wù)器發(fā)送請(qǐng)求(向獲得圖片,因此請(qǐng)求時(shí)給的是圖片的地址(src="...")),但是瀏覽器也不知道該圖片是原先就有的還是動(dòng)態(tài)生成的,因此該圖片的地址 src 可以是一個(gè)圖片的位置,也可以是動(dòng)態(tài)生成該圖片的 servlet 。
如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答?。?點(diǎn)擊進(jìn)入論壇