servlet實現網站 驗證碼

    把學到的知識與實際應用相結合,到網上查資料做的練習 

  

一 新建login.jsp

 

 

<%@page contentType="text/html; charset=gb2312" %>

<html>

<head><title>登錄</title></head>

<script language='javascript'>

    function switchImage() {

     var image=document.getElementById('randomImage');

     image.src="ServletDemo/servlet/ImageServlet";

     return false;

       

</script>

 

<body>

 <form action="servlet/LoginServlet" method="post">

 姓名:<input type="test" name="UserName"><br>

 密碼:<input type="password" name="Pwd"><br>

 驗證碼:<input type="text" size="10" name="ValCode">

 <img src="ServletDemo/servlet/ImageServlet" name="randomImage"><!-- 插入驗證碼圖片 -->

 <a href="javascript:" onclick='return switchImage();'><font>看不清,換一張!</font></a>

 <br><input type="submit">

 </form>

</body>

</html>

 

 

二 建立ImageServlet.java

 

 

package com;

 

import java.io.IOException;

import java.io.PrintWriter;

import java.io.*;

import javax.servlet.http.*;

import javax.servlet.*;

import java.util.Random;

import java.awt.*;

import java.awt.image.*;

import javax.imageio.*;

 

public class ImageServlet extends HttpServlet {

 

 public void doGet(HttpServletRequest request, HttpServletResponse response)

   throws ServletException, IOException {

  response.setContentType("image/jpeg");

  //設置瀏覽器不要緩存此圖片

  response.setHeader("Pragma","No-cache");

  response.setHeader("Cache-control","no-cache");

  response.setDateHeader("Expires",0);

  //獲得輸出的管道,BufferedImage裏面的數據寫到頁面

  OutputStream out=response.getOutputStream();

  //定義緩存圖片的高度與寬度

  int width=80,height=20;

  //分配一塊內存存儲圖片

  BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

  //獲得畫筆

  Graphics g=image.getGraphics();

  //獲得產生隨機數對象

  Random random=new Random();

  //在分配的內存中畫一個矩形

  g.fillRect(0, 0, width, height);

  //設置矩形內的字體格式

  g.setFont(new Font("Times New Roman",Font.ITALIC,18));

  //存儲四位隨機數

  String sRand="";

  for(int i=0;i<4;i++){

   //在獲得小於10的一個隨機數

   String rand=String.valueOf(random.nextInt(10));

   sRand+=rand;

   //設置隨機數顏色

   g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));

   //把產生的隨機數畫在矩形內, 20是高度,20*i+6 隨機數的寬度

   g.drawString(rand, 20*i+6, 20);

  }

  request.getSession().setAttribute("valCode", sRand);

  g.dispose();

  //將產生的隨機數寫到client

  ImageIO.write(image,"JPEG",out);

 

 } 

 public void doPost(HttpServletRequest request, HttpServletResponse response)

   throws ServletException, IOException {

  doGet(request,response);

 }

 

}

 

 

三 配置web.xml

 

 <servlet>
  <servlet-name>ImageServlet</servlet-name>
  <servlet-class>com.ImageServlet</servlet-class>
 </servlet>
 
 <servlet-mapping>
  <servlet-name>ImageServlet</servlet-name>
  <url-pattern>/ServletDemo/servlet/ImageServlet</url-pattern>
 </servlet-mapping>

 

完畢!!!

 

 

 

四  網上有些關於效率的討論

 

 

ImageIO.write(image, "JPEG", bos);  

這句效率極低...


try{
    com.sun.jimi.core.Jimi.putImage("image/jpeg", image4, out);
}catch(Exception e){
    e.printStackTrace();
}
速度快,需要使用Sun提供的包,獨立;
下載地址,不知道現在是否換有效:http://java.sun.com/products/jimi/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章