天天看點

JSP生成随機證碼,并且局部重新整理驗證碼

1.鍓嶅彴jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

聽聽<head>

聽聽 聽<base href="<%=basePath%>" target="_blank" rel="external nofollow" >

聽聽 聽<title>绠$悊鍛樼櫥闄?lt;/title>

<script type="text/javascript" language="javascript">

聽聽function change(){

var o = document.getElementById("random");

var timenow = new Date().getTime();

o.src = "<%=path%>/server/ImageValidate?d=" + timenow;

聽聽}

</script>

聽聽</head>

聽聽<body>

聽聽 聽 聽 聽<img width="80px" 聽height="30px" id="random" src="<%=path %>/server/ImageValidate"/>

聽聽 聽 聽 聽<input type="button" value="鎹竴寮犲浘鐗? id="label" 慰nclick="change()"></input>

聽聽</body>

</html>

2.鍚庡彴鐢熷瓨闅忔満鐮佺殑servlet

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.util.Random;

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

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;

@SuppressWarnings("serial")

public class ImageValidate extends HttpServlet {

public ImageValidate() {

super();

}

public void destroy() {

super.destroy(); // Just puts "destroy" string in log

}

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.setCharacterEncoding("GBK");

response.setCharacterEncoding("GBK");

response.setContentType("image/jpeg");

聽聽 聽 聽 聽response.addHeader("pragma","NO-cache");

聽聽 聽 聽 聽response.addHeader("Cache-Control","no-cache");

聽聽 聽 聽 聽response.addDateHeader("Expries",0);

聽聽 聽 聽 聽int width=80, height=30;

response.setContentType("text/html; charset=GBK");

String chose="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

char temp;//淇濆瓨闅忔満鐢熸垚鐨刢hose鍏冪礌

Random rand=new Random();

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

聽 聽 聽 聽Graphics g = image.getGraphics();

聽 聽 聽 聽//浠ヤ笅濉厖鑳屾櫙棰滆壊

聽 聽 聽 聽g.setColor(Color.YELLOW);

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

聽 聽 聽 //鐢昏竟妗?

聽 聽 聽 聽g.setColor(Color.BLACK);

聽 聽 聽 聽Font font;

聽 聽 聽 聽g.drawRect(0,0,width-1,height-1);

聽 聽 聽 聽StringBuffer sRand = new StringBuffer();

// 闅忔満浜х敓30鏉″共鎵扮嚎锛屼嬌鍥捐薄涓殑璁よ瘉鐮佷笉鏄撹鍏跺畠绋嬪簭鎺㈡祴鍒? for (int i = 0; i < 30; i++) {

聽 聽 聽 聽 int x = rand.nextInt(width);

聽 聽 聽 聽 int y = rand.nextInt(height);

聽 聽 聽 聽 int xl = rand.nextInt(12);

聽 聽 聽 聽 int yl = rand.nextInt(12);

聽 聽 聽 聽 g.drawLine(x,y,x+xl,y+yl);

}

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

temp=chose.charAt(rand.nextInt(chose.length()));

sRand.append(temp);

font=new Font("Arial",Font.PLAIN,15 + rand.nextInt(10));//瀛椾綋

聽 聽 聽 聽g.setFont(font);

g.setColor(new Color(rand.nextInt(255),0,rand.nextInt(255)));//楠岃瘉鐮佺殑棰滆壊

g.drawString(String.valueOf(temp),15*i+5,20+rand.nextInt(10));//浣嶇疆

}

request.getSession().setAttribute("randomNumber",sRand.toString());//淇濆瓨鐢熸垚鐨勯獙璇佺爜鍊?

聽 聽 聽 //璁劇疆瀛椾綋棰滆壊

聽 聽 聽 聽g.dispose();

聽 聽 聽 聽ServletOutputStream outStream = response.getOutputStream();

聽 聽 聽 聽JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(outStream);

聽 聽 聽 聽encoder.encode(image);

聽 聽 聽 聽outStream.close();

}

public void init() throws ServletException {

}

}

3.xml閰嶇疆鏂囦歡 <servlet> 聽聽 聽<servlet-name>ImageValidate</servlet-name> 聽聽 聽<servlet-class>user.ImageValidate</servlet-class> 聽聽</servlet> 聽聽<servlet-mapping> 聽聽 聽<servlet-name>ImageValidate</servlet-name> 聽聽 聽<url-pattern>/server/ImageValidate</url-pattern> 聽聽</servlet-mapping>