- 浏览: 135538 次
- 性别:
- 来自: 火星
文章分类
最新评论
-
yaoneng:
谢谢~~不错~~
Eclipse格式化不换行 -
fys124974704:
没想过中文的条形码!
项目使用条形码 -
yangpanwww:
你好! 内容好像不支持中文。。有什么解决方案不
项目使用条形码 -
fys124974704:
Stone_eye 写道fys124974704 写道Ston ...
flowplayer学习 -
Stone_eye:
fys124974704 写道Stone_eye 写道哥们,想 ...
flowplayer学习
编写一个Servlet
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class CheckCodeServlet extends HttpServlet { private static int WIDTH = 60; private static int HEIGHT = 20; public char[] generateCheckCode() { // 定义验证码的字符表 String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char[] rands = new char[4]; for (int i = 0; i < 4; i++) { int rand = (int) (Math.random() * 36); rands[i] = chars.charAt(rand); } return rands; } public void drawRands(Graphics g, char[] rands) { g.setColor(Color.BLACK); g.setFont(new Font(null, Font.ITALIC | Font.BOLD, 18)); // 在不同的高度上输出验证码的每个字符 g.drawString("" + rands[0], 1, 17); g.drawString("" + rands[1], 16, 15); g.drawString("" + rands[2], 31, 18); g.drawString("" + rands[3], 46, 16); } public void drawBackground(Graphics g) { // 画背景 g.setColor(new Color(0xDCDCDC)); g.fillRect(0, 0, WIDTH, HEIGHT); // 随机产生120个干扰点 for (int i = 0; i < 120; i++) { int x = (int) (Math.random() * WIDTH); int y = (int) (Math.random() * HEIGHT); int red = (int) (Math.random() * 255); int green = (int) (Math.random() * 255); int blue = (int) (Math.random() * 255); g.setColor(new Color(red, green, blue)); g.drawOval(x, y, 1, 0); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); response.setContentType("image/jpeg"); ServletOutputStream sos = response.getOutputStream(); // 设置浏览器不缓存此图片 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); // 创建内存图像并获得其图形上下文 BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); // 产生随机的验证码 char[] rands = generateCheckCode(); // 产生图像 drawBackground(g); drawRands(g, rands); // 结束图像的绘制过程,完成图像 g.dispose(); // 将图像输出到客户端 ByteArrayOutputStream bos = new ByteArrayOutputStream(); ImageIO.write(image, "JPEG", bos); byte[] buf = bos.toByteArray(); response.setContentLength(buf.length); sos.write(buf); bos.close(); sos.close(); // 将当前验证码存入到session中 session.setAttribute("checkCode", new String(rands)); System.out.println(session.getAttribute("checkCode")); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
编写一个html页面
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>test.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> <script type="text/javascript"> function ajaxMethod(cid){ document.getElementById(cid).setAttribute("src",null); //加上随机数的目的是为了每次都改变url 让浏览器不要加载缓存 var svalue = "/JsParserXML/servlet/CheckCodeServlet?id=" + Math.random(); document.getElementById(cid).setAttribute("src",svalue); } function colorblue(id){ document.getElementById(id).color="blue"; } function colorblack(id){ document.getElementById(id).color="black"; } </script> </head> <body> <font size="2">验证码 :</font> <img id="checkCodeImage" src="/JsParserXML/servlet/CheckCodeServlet" style="cursor:pointer" onclick="javascript:ajaxMethod('checkCodeImage');"/> <a style="cursor:pointer" onclick="javascript:ajaxMethod('checkCodeImage');"><font id="fontId" size="2"><u onmouseover="colorblue('fontId');" onmouseout="colorblack('fontId');">看不清换一个</u></font></a> </body> </html>
发表评论
-
某网站系统升级遇到的问题
2011-01-07 10:08 933某网站前端系统升级,开发机器使用win2003,浏览器测试IE ... -
Linux+Lucene+Tomcat+OpenEjb发布细节
2011-01-06 18:04 55细节1:首先在linux系统上先查看ulimit -a ... -
ejb定时器
2010-12-29 16:43 110如何在EJB容器做一个定时器,分四个步骤: 1 配置运行环境 ... -
IO流的笔记(一)
2010-11-01 11:23 69import java.io.FileInputStre ... -
小型聊天室--DWR实现服务器推技术
2009-07-17 15:59 3125开始我曾经用PHP做过一个聊天室,但是需要用JS不 ... -
项目使用条形码
2009-06-15 10:59 2075首先要去http://barcode4j.so ... -
注意Java的误区
2009-04-28 17:15 807import java.util.ArrayList; /* ... -
JPA (一)
2009-04-20 11:05 627JPA 全称 Java Persistence A ... -
Properties里面的一些系统值
2009-03-25 10:03 690当我们需要求出一些系统参数的时候,需要使用到Prope ... -
log4j 简单使用
2009-01-12 16:26 1297使用Log4j 感觉好像就是学怎么写它的配置文件 呵呵!! ... -
log4j.properties 配置
2009-01-12 16:22 978og4j.properties 使用一.参数意义说明输出级别的 ... -
Aspectj 入门(一)
2008-12-30 21:14 3728由于Spring的配置过多,个人不喜欢!但是又想使 ... -
日期处理笔记
2008-12-16 14:21 929获取上个月 java.text.SimpleDateForm ... -
struts2-入门实例
2008-11-25 08:35 908struts2 传说中很优秀的web框架,融合了webw ... -
JSF入门例子
2008-11-21 12:00 7702首先去 http://java.sun.com/javaee/ ... -
J2ME学习选择
2008-11-07 08:28 895J2ME学习起来感觉还是比较多方向的,基于手机有很多系统,但是 ... -
一个MIDlet的入门例子
2008-11-05 10:02 882import javax.microedition.lcdu ... -
精简之美
2008-10-30 09:18 800有一条阶乘的问题,就是怎么去写才能让代码最少,最精简!我想了很 ... -
quartz入门一
2008-10-14 14:00 1666quartz是一个好东西!一直想使用它做一些事情,就是没 ... -
logic-iterator用法
2008-09-22 14:26 1587<%@ page language="java ...
相关推荐
java实现验证码
java 实现验证码(servlet+jsp),详情请看:
利用Java实现验证码验证功能.主要运用技术为Servlet,session,和画板对象
JAVA实现验证码(完整代码),一个完整地验证码例子。
【JavaWeb】(11)Java实现验证码制作,三种不同的验证码制作。
Java实现验证码的代码,利用java实现网页登陆验证码。
java实现滑动验证码
用java实现网站验证码的绘制,可配合水印来实现。
Java实现验证码的制作
java jsp实现网页上验证码产生功能,简单易懂。
验证码(JAVA实现)验证码(JAVA实现)验证码(JAVA实现)验证码(JAVA实现)
验证码的实现代码,可惜没有背景颜色,可以直接加入到代码中
java生成验证码,以及验证码的校验,重新生成验证码,无侵入,只需简单几步就可以在自己的工程加上比较安全的验证码了
JAVA实现随机图片验证码简单方法.rtf
java验证码识别示例
主要介绍了Java实现验证码具体代码,包括图片验证码、汉字验证码,感兴趣的小伙伴们可以参考一下