Java 验证码
来源:互联网 发布:oracle sql是什么 编辑:程序博客网 时间:2024/06/13 01:22
下面的例子是用Servlet生成的一个验证码,例子是模拟登陆。
login.jsp
- <%@ page language="java" contentType="text/html; charset=utf-8"
- pageEncoding="utf-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>验证码</title>
- </head>
- <body>
- <form action="${pageContext.request.contextPath }/servlet/LoginServlet">
- <table border="0" cellspacing="0" cellpadding="0" width="50%">
- <tr>
- <td width="20%" align="right">用户名:</td><td colspan="2"><input type="text" name="username" value="" size="34"/></td>
- </tr>
- <tr>
- <td width="20%" align="right">密 码:</td><td colspan="2"><input type="password" name="password" value="" size="35"/></td>
- </tr>
- <tr>
- <td width="20%" align="right">验证码:</td><td width="21%"><input type="text" name="code" value="" size="15"/></td><td align="left"><img src="${pageContext.request.contextPath }/servlet/ImageCodeMakerServlet" width="100px" height="30" /></td>
- </tr>
- </table>
- </form>
- </body>
- </html>
在web.xml中
- <servlet>
- <servlet-name>login</servlet-name>
- <servlet-class>com.web.LoginServlet</servlet-class>
- </servlet>
- <servlet>
- <servlet-name>imageCodeMakerServlet</servlet-name>
- <servlet-class>com.web.ImageCodeMakerServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>login</servlet-name>
- <url-pattern>/servlet/LoginServlet</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>imageCodeMakerServlet</servlet-name>
- <url-pattern>/servlet/ImageCodeMakerServlet</url-pattern>
- </servlet-mapping>
在后台Servlet里
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- public class LoginServlet extends HttpServlet{
- @Override
- protected void service(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String username = request.getParameter("username");
- String password = request.getParameter("password");
- String code = request.getParameter("code");// 页面,用户输入的验证码
- HttpSession session = request.getSession();
- String randCode = (String)session.getAttribute("randCode");// 得到系统生成的验证码
- if(randCode.equals(code)){// 验证码输入正确
- System.out.println("验证码输入正确");
- }else{
- System.out.println("验证码不正确");
- }
- }
- }
ImageCodeMakerServlet如下
- 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.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class ImageCodeMakerServlet extends HttpServlet {
- public ImageCodeMakerServlet() {
- super();
- }
- public void destroy() {
- super.destroy();
- }
- public void service(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- // 首先设置页面不缓存
- response.setHeader("Pragma", "No-cache");
- response.setHeader("Cache-Control", "no-cache");
- response.setDateHeader("Expires", 0);
- // 定义图片的宽度和高度
- int width = 90, height = 40;
- // 创建一个图像对象
- BufferedImage image = new BufferedImage(width, height,
- BufferedImage.TYPE_INT_RGB);
- // 得到图像的环境对象
- Graphics g = image.createGraphics();
- Random random = new Random();
- // 用随机颜色填充图像背景
- g.setColor(getRandColor(180, 250));
- g.fillRect(0, 0, width, height);
- for (int i = 0; i < 5; i++) {
- g.setColor(getRandColor(50, 100));
- int x = random.nextInt(width);
- int y = random.nextInt(height);
- g.drawOval(x, y, 4, 4);
- }
- // 设置字体,下面准备画随机数
- g.setFont(new Font("", Font.PLAIN, 40));
- // 随机数字符串
- String sRand = "";
- for (int i = 0; i < 4; i++) {
- // 生成四个数字字符
- String rand = String.valueOf(random.nextInt(10));
- sRand += rand;
- // 生成随机颜色
- g.setColor(new Color(20 + random.nextInt(80), 20 + random
- .nextInt(100), 20 + random.nextInt(90)));
- // 将随机数字画在图像上
- g.drawString(rand, (17 + random.nextInt(3)) * i + 8, 34);
- // 生成干扰线
- for (int k = 0; k < 12; k++) {
- int x = random.nextInt(width);
- int y = random.nextInt(height);
- int xl = random.nextInt(9);
- int yl = random.nextInt(9);
- g.drawLine(x, y, x + xl, y + yl);
- }
- }
- // 将生成的随机数字字符串写入Session
- request.getSession(false).setAttribute("randcode", sRand);
- // 使图像生效
- g.dispose();
- // 输出图像到页面
- ImageIO.write(image, "JPEG", response.getOutputStream());
- }
- /**
- * Initialization of the servlet. <br>
- *
- * @throws ServletException
- * if an error occurs
- */
- public void init() throws ServletException {
- // Put your code here
- }
- /**
- * 产生一个随机的颜色
- *
- * @param fc
- * 颜色分量最小值
- * @param bc
- * 颜色分量最大值
- * @return
- */
- public 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);
- }
- }
- java验证码 验证
- JAVA 验证码
- java验证码类
- java随机验证码
- JAVA中文验证码
- java 实现验证码
- java验证码
- java生成验证码
- java验证码代码
- java验证码汇总
- Java彩色验证码
- java验证码代码
- java图片验证码
- java图片验证码
- java验证码
- java 中的验证码
- java验证码汇总
- java图片验证码
- 浅谈cursor_sharing取值对SQL共享的影响(上)
- SSH
- 不要轻易相信,更不要轻易否定
- 人再多,再挤,也不愿这么离开
- 通过字段名找表名
- Java 验证码
- 浅谈cursor_sharing取值对SQL共享的影响(下)
- JavaScript内置函数
- 封装网络请求
- CAF转换MP3的lame库编译问题解决
- 嵌入式arm学习总结(四)--LCD
- iOS 获取wifi ssid 名称
- 事件模型
- SVN服务器更改ip地址客户端怎么设置