java验证码
2014-05-11 16:04
232 查看
前台调用servlet
RandomImg具体实现如下
randomVlidateCode方法的具体实现如下
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <script type="text/javascript"> function refresh(obj) { obj.src = "RandomImg?" + Math.random(); } </script> </head> <body> <jsp:include page="header.jsp"></jsp:include> <form action="LoginServlet" method="post"> <table align="center"> <tr> <td> 用户名 </td> <td width="150px"> <input type="text" name="username" value="${loginForm.username}"/> </td> <td>${loginForm.errors.username}</td> </tr> <tr> <td> 密码 </td> <td width="150px"> <input type="password" name="password" /> </td><td>${loginForm.errors.password}</td> </tr> <tr> <td> 输入验证码 </td> <td width="60px"> <input type="text" name="randomCode" width="60px" /> </td> <td> <img title="点击更换" alt="验证码" src="RandomImg" onclick="javascript:refresh(this);"> </td> </tr> <tr> <td colspan="3" align="center"> <input type="submit" value="登录" /> <input type="reset"value="重置" /> </td> </tr> </table> </form> <jsp:include page="footer.jsp"></jsp:include> </body> </html>
RandomImg具体实现如下
package cn.itcast.bbs.controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.itcast.bbs.util.RandomValidateCode; public class RandomImg extends HttpServlet { private static final long serialVersionUID = 1L; 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("Exprie", 0); RandomValidateCode randomVlidateCode = new RandomValidateCode(); try { randomVlidateCode.getRandomcode(request, response);// 输出图片 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
randomVlidateCode方法的具体实现如下
package cn.itcast.bbs.util; 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.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class RandomValidateCode { public static final String RANDOMCODEKEY = "RANDOMALLDATEKEY";// 放到session中的key private Random random = new Random(); private String randomString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; private int width = 80;// 图片宽 private int height = 26;// 图片高 private int lineSize = 40;// 干扰线数量 private int stringNum = 4;// 随机产生字符数量 /*** * 获得字体 * * @return */ private Font getFont() { return new Font("Fixedsys", Font.CENTER_BASELINE, 18); } /*** * 获得颜色 * * @param fc * @param bc * @return */ private Color getRandColor(int fc, int bc) { if (fc > 255) fc = 255; if (bc > 255) bc = 255; int r = fc + random.nextInt(bc - fc - 16); int g = fc + random.nextInt(bc - fc - 14); int b = fc + random.nextInt(bc - fc - 18); return new Color(r, g, b); } /*** * 生产随机图片 * * @param request * @param response */ public void getRandomcode(HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); // BufferedImage类具有缓冲区的Image类,Image类是用于描述图像信息的类 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics();// 产生image的Graphics 对象,该对象可以对图像进行各种绘制操作 g.fillRect(0, 0, width, height); g.setFont(new Font("Times New Roman", Font.ROMAN_BASELINE, 18)); g.setColor(getRandColor(110, 133)); // 绘制干扰线 for (int i = 0; i <= lineSize; i++) { drowLine(g); } // 绘制随机字符 String randomString = ""; for (int i = 1; i <= stringNum; i++) { randomString = drowString(g, randomString, i); } session.removeAttribute(RANDOMCODEKEY); session.setAttribute(RANDOMCODEKEY, randomString); System.out.println(randomString.toLowerCase()); g.dispose(); try { ImageIO.write(image, "JPEG", response.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } } /*** * 字符串干扰线 * * @param g * @param randomString2 * @param i * @return */ private String drowString(Graphics g, String randomString2, int i) { g.setFont(getFont()); g.setColor(new Color(random.nextInt(101), random.nextInt(111), random .nextInt(121))); String rand = String.valueOf(getRandomString(random .nextInt(randomString.length()))); randomString2 += rand; g.translate(random.nextInt(3), random.nextInt(3)); g.drawString(rand, 13 * i, 16); return randomString2; } private String getRandomString(int nextInt) { return String.valueOf(randomString.charAt(nextInt)); } /*** * 绘制干扰线 * * @param g */ private void drowLine(Graphics g) { int x = random.nextInt(width); int y = random.nextInt(height); int x1 = random.nextInt(13); int y1 = random.nextInt(15); g.drawLine(x, y, x + x1, y + y1); } }
相关文章推荐
- java 生成验证码
- java web开发之servlet图形验证码功能的实现
- Java简单验证码原理(源代码+步骤操作)
- Java学习【web基础-JSP案列-验证码】
- java验证码组件Jcaptcha
- Java图形验证码
- 使用技巧:Java实现随机验证码功能实例
- java之验证码
- java画布生成验证码2.0与第三方代码生成
- java web登录界面中添加验证码
- Java生成验证码
- java图形验证码生成工具类及web页面校验验证码
- 个人学习-java-session-验证码提交
- Java实现随机验证码具体代码
- java 生成验证码
- 自我补充篇之java随机验证码的生成(字母不同色,干扰线无规律颜色也不同)
- java产生随机数,适合用于验证码,数字加字母的
- Java生成验证码图片的程序
- Java生成动态版验证码的方法实例
- java验证码制作