java web 生成圖片驗證碼的功能實現

1.前臺頁面

<tr>
<td valign="middle" align="right">
驗證碼:
<img id="num" src="checkcode" />
<a href="javascript:;"
onclick="document.getElementById('num').src = 'checkcode?'+(new Date()).getTime()">換一張</a>

</td>


<td valign="middle" align="left">
<input type="text" class="inputgri" name="number" />
</td>
</tr>


2.後臺servlet代碼

package web;


import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class CheckCodeServlet extends HttpServlet {


public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("service...");
//生成一張圖片
Random r = new Random(
System.currentTimeMillis());
//隨機字符串
String value = r.nextInt(999999) + "";
//先創建一個內存映像對象
BufferedImage image = 
new BufferedImage(80,30,
BufferedImage.TYPE_INT_RGB);
//得到畫筆
Graphics g = image.getGraphics();
g.setColor(new Color(r.nextInt(255),
r.nextInt(255),r.nextInt(255)));
//填充
g.fillRect(0, 0, 80, 30);
//畫畫
g.setColor(new Color(0,0,0));
//Font(String,int,int); 字體名稱,風格,大小
g.setFont(new Font(null,Font.BOLD,18));
g.drawString(value, 5, 20);
for(int i=0;i<8;i++){
g.drawLine(r.nextInt(80), r.nextInt(30),
r.nextInt(80), r.nextInt(30));
}

//將圖片壓縮
//需要提供一個輸出流,encoder工具會將
//圖片壓縮之後的數據以流的方式輸出。
response.setContentType("image/jpeg");
OutputStream ops = 
response.getOutputStream();
javax.imageio.ImageIO.write(
image, "jpg", ops);

}
}

3.web.xml的配置

<servlet>
      <servlet-name>CheckCodeServlet</servlet-name>
      <servlet-class>web.CheckCodeServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>CheckCodeServlet</servlet-name>
      <url-pattern>/checkcode</url-pattern>
  </servlet-mapping>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章