繪圖的image.jsp:
<%@ page contentType="image/jpeg;charset=gb2312"import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"%><%!Color getRandColor(int fc, int bc) {//給定範圍獲得隨機顏色Random random = new Random();if (fc > 255) {fc = 255;}if (bc > 255) {bc = 255;}int r = fc + random.nextInt(bc - fc);int g = fc + random.nextInt(bc - fc);int b = fc + random.nextInt(bc - fc);return new Color(r, g, b);}%><%//設定頁面不緩衝response.setHeader("Pragma", "No-cache");response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expires", 0);// 在記憶體中建立圖象int width = 60, height = 20;BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 擷取圖形上下文Graphics g = image.getGraphics();//產生隨機類Random random = new Random();// 設定背景色g.setColor(getRandColor(200, 250));g.fillRect(0, 0, width, height);//設定字型g.setFont(new Font("Times New Roman", Font.PLAIN, 18));//畫邊框//g.setColor(new Color());//g.drawRect(0, 0, width - 1, height - 1);// 隨機產生155條幹擾線,使圖象中的認證碼不易被其它程式探測到g.setColor(getRandColor(160, 200));for (int i = 0; i < 155; i++) {int x = random.nextInt(width);int y = random.nextInt(height);int xl = random.nextInt(12);int yl = random.nextInt(12);g.drawLine(x, y, x + xl, y + yl);}String r = request.getParameter("random");// 取隨機產生的認證碼(4位元字)String rand = "";if (r != null) {for (int i = 0; i < 4; i++) {rand = r.substring(i, i + 1);// 將認證碼顯示到圖象中g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));//調用函數出來的顏色相同,可能是因為種子太接近,所以只能直接產生g.drawString(rand, 13 * i + 6, 16);}}// 將認證碼存入SESSION//session.setAttribute("random", sRand);// 圖象生效g.dispose();// 輸出圖象到頁面ImageIO.write(image, "JPEG", response.getOutputStream());out.clear();out = pageContext.pushBody();%>首頁的jsp:
<body onload="refresh()">
<form name="form" onsubmit="return check()"action="user!login.action" method="post"><table align="center" style="margin-top:120px; "><tr><td height="54" align="center"><font color="#FFFFFF"><strong>使用者名稱:</strong> </font></td><td width="181" height=54><input id="account"name="userVO.account"></TD></tr><tr><td height="54"><font color="#FFFFFF"><strong>密 碼:</strong></font></td><td width="181" height=54><input id="password"type="Password" name="userVO.password"></TD></tr><tr><td height="54" align="center"><font color="#FFFFFF"><strong>驗證碼:</strong> </font></td><td><input type=text name=rand id="random" maxlength=4 size=7> <imgalign="top" id="randomImg" src="image.jsp" onclick="refresh()" /></td></tr><tr><td colspan="2" align=center><br> <input type=submitvalue=登陸> <strong><fontcolor="white"><input type="button" value="註冊"onclick="window.location.href='register.jsp'"> </font> </strong></td></tr></table></form><script type="text/javascript">//產生隨機驗證碼var chars = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' ];function generateMixed(n) {var res = "";for ( var i = 0; i < n; i++) {var id = Math.ceil(Math.random() * 35);res += chars[id];}return res;}var random = "";function refresh() {random = generateMixed(4);$("#randomImg").attr("src", "image.jsp?" + Math.random() + "&random=" + random);}function check() {if ($("#account").val() == "") {alert("請輸入使用者名稱!");form.account.focus();return false;}if ($("#password").val() == "") {alert("請輸入密碼!");form.password.focus();return false;}if ($("#random").val() == "") {alert("驗證碼不可為空!");form.random.focus();return false;}if ($("#random").val().toUpperCase() != random) {alert("驗證碼不正確!");form.random.focus();return false;}}</script>
</body>