動態生成圖片(驗證碼)

    用 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 。

 

 

 

 

 

 

發佈了36 篇原創文章 · 獲贊 6 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章