用 servlet 生成圖片(輸出的不是文本,而是圖片)
應用:驗證碼 —— 防止客戶端惡意發信息,如:寫一個 for 循環不停發帖。
public class ImageServlet extends HttpServlet {
public void doGet (HttpServletRequest request, HtttpServletResponse response) throws ServletException, IOException {
response.setContentType ("image/jpeg"); // 設置響應類型
BufferedImage image = new BufferedImage (600, 200, BufferedImage.TYPE_INT_RGB);
// 圖片的內存映像,點陣信息
Random r = new Random();
Graphics g = image.getGraphics(); // 獲得畫筆對象
g.setColor (new Color (r.nextInt(255), r.nextInt(255), r.nextInt(255))); // setColor 設置當前畫筆的顏色
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 對象中的圖像信息編碼後,向創建該對象(encoder)時指定的輸出流輸出
}
}
瀏覽器向服務器發送請求,獲得 html,當遇到<img ... />標籤時,瀏覽器則會再向服務器發送請求(向獲得圖片,因此請求時給的是圖片的地址(src="...")),但是瀏覽器也不知道該圖片是原先就有的還是動態生成的,因此該圖片的地址 src 可以是一個圖片的位置,也可以是動態生成該圖片的 servlet 。