ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:19.66KB ,
资源ID:4324054      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4324054.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Servlet仿CSDN动态验证码的生成带数字和字母讲解.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Servlet仿CSDN动态验证码的生成带数字和字母讲解.docx

1、Servlet仿CSDN动态验证码的生成带数字和字母讲解 Servlet仿CSDN动态验证码的生成-带数字和字母一、实现的思路:(1)首先,需要创建一个Servlet。该Servlet通过字节型响应给客户端返回一个图片,该图片是通过JDK中Java 2D的类库来生成一个图片。图片的生成是依靠一个随机数来完成,然后将这个随机数写成图片格式。最后在Session将这个随机的字符串的状态保持住,以便在用户填写后进行对比。 (2)其次,在需要加入验证码的JSP页面中,通过引入该图片。 (3)最后,单用户填写完验证码后,提交到某一个Servlet中。在这个Servlet中,通过request.getPa

2、rameter()方法获取用户添加的验证码,然后取出后与Session中生成的验证码进行对比,如果对比成功就表示通过,否则返回该页面给用户提示验证码错误的信息。(4)然后如果要仿CSDN动态验证码,就要分别生成数字和符号(+,-,*),根据符号,计算结果,计算中文,把结果存储到一个List中去。先来看看效果:二、代码这里首先实现只有数字和字母的,还不带符号运算项目一下载1、工程整体结构 2、生成带数字和图片的代码AuthCode.Javajava view plain copypackage com.mucfc; import java.awt.Color; import java.awt.G

3、raphics; import java.awt.Font; import java.awt.image.BufferedImage; import java.util.Random; /* * 生成验证码图片 * author 林炳文Evankaka(博客: * since 2015.6.22 */ public class AuthCode public static final int AUTHCODE_LENGTH = 5; / 验证码长度 public static final int SINGLECODE_WIDTH = 15; / 单个验证码宽度 public static fi

4、nal int SINGLECODE_HEIGHT = 30; / 单个验证码高度 public static final int SINGLECODE_GAP = 4; / 单个验证码之间间隔 public static final int IMG_WIDTH = AUTHCODE_LENGTH * (SINGLECODE_WIDTH + SINGLECODE_GAP); public static final int IMG_HEIGHT = SINGLECODE_HEIGHT; public static final char CHARS = 0,1, 2, 3, 4, 5, 6, 7,

5、 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, 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 ; static Random random = new Random(); /* * 返回图片中的数字 * return String */ public static String getAuthCode() StringBuffer buffer = new String

6、Buffer(); for (int i = 0; i 5; i+) / 生成6个字符 buffer.append(CHARSrandom.nextInt(CHARS.length); return buffer.toString(); /* * 返回带数字的图片 * return BufferedImage */ public static BufferedImage getAuthImg(String authCode) / 设置图片的高、宽、类型 / RGB编码:red、green、blue BufferedImage img = new BufferedImage(IMG_WIDTH,

7、 IMG_HEIGHT, BufferedImage.TYPE_INT_BGR); / 得到图片上的一个画笔 Graphics g = img.getGraphics(); / 设置画笔的颜色,用来做背景色 g.setColor(Color.RED); / 用画笔来填充一个矩形,矩形的左上角坐标,宽,高 g.fillRect(0, 0, IMG_WIDTH, IMG_HEIGHT); / 将画笔颜色设置为黑色,用来写字 g.setColor(Color.BLACK); / 设置字体:宋体、不带格式的、字号 g.setFont(new Font(宋体, Font.PLAIN, SINGLECOD

8、E_HEIGHT + 5); / 输出数字 char c; for (int i = 0; i authCode.toCharArray().length; i+) / 取到对应位置的字符 c = authCode.charAt(i); / 画出一个字符串:要画的内容,开始的位置,高度 g.drawString(c + , i * (SINGLECODE_WIDTH + SINGLECODE_GAP) + SINGLECODE_GAP / 2, IMG_HEIGHT); Random random = new Random(); / 干扰素 for (int i = 0; i 15; i+)

9、int x = random.nextInt(IMG_WIDTH); int y = random.nextInt(IMG_HEIGHT); int x2 = random.nextInt(IMG_WIDTH); int y2 = random.nextInt(IMG_HEIGHT); g.drawLine(x, y, x + x2, y + y2); return img; 在这里还可以自己更改图片的背景色、验证码的个数、干扰素强度等,有兴趣的同学自己好好设置下吧3、生成动态验证码的servletgetAuthCodeServlet.javajava view plain copypacka

10、ge com.mucfc; import java.io.IOException; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /* * 得到生成验证码图片的servlet * author 林炳文Evankaka(博客: * since 2

11、015.6.22 */ public class getAuthCodeServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException String authCode = AuthCode.getAuthCode(); request.getSession().setAttribute(authCode, authCode); /将验证码保存到session中,便于以后验证 tr

12、y /发送图片 ImageIO.write(AuthCode.getAuthImg(authCode), JPEG, response.getOutputStream(); catch (IOException e) e.printStackTrace(); public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException doGet(request,response); 4、index调用,并进行输入正确的判断html view p

13、lain copy base href= My JSP index.jsp starting page !- - 看不清 这里在直接都在一个jsp中判断了5、web.xml设置html view plain copy web-app version=2.5 xmlns= xmlns:xsi=http:/www.w3.org/2001/XMLSchema-instance xsi:schemaLocation= getAuthCodeServlet com.mucfc.getAuthCodeServlet getAuthCodeServlet /servlet/GetAuthCodeServle

14、t index.html index.htm index.jsp default.html default.htm default.jsp 6、运行效果三、仿CSDN动态验证码实现整个工程结构不变,项目二下载1、AuthCode改成如下java view plain copypackage com.mucfc; import java.awt.Color; import java.awt.Graphics; import java.awt.Font; import java.awt.image.BufferedImage; import java.util.ArrayList; import

15、java.util.List; import java.util.Random; /* * 生成验证码图片 * author 林炳文Evankaka(博客: * since 2015.6.22 */ public class AuthCode public static final int AUTHCODE_LENGTH = 5; / 验证码长度 public static final int SINGLECODE_WIDTH = 20; / 单个验证码宽度 public static final int SINGLECODE_HEIGHT = 30; / 单个验证码高度 public sta

16、tic final int SINGLECODE_GAP = 4; / 单个验证码之间间隔 public static final int IMG_WIDTH = AUTHCODE_LENGTH * (SINGLECODE_WIDTH + SINGLECODE_GAP); public static final int IMG_HEIGHT = SINGLECODE_HEIGHT; public static final char CHARS = 0,1, 2, 3, 4, 5, 6, 7, 8, 9 ; public static final char OPERATION=+,-,*; st

17、atic Random random = new Random(); /* * 返回图片中的数字 * return String */ public static List getAuthCode() char char1 = CHARSrandom.nextInt(CHARS.length); char char2 = CHARSrandom.nextInt(CHARS.length); char opt = OPERATIONrandom.nextInt(OPERATION.length); StringBuffer buffer = new StringBuffer(); buffer.

18、append(char1); buffer.append(getOperation(opt); buffer.append(char2); String result=getResult(char1,char2,opt); List list=new ArrayList(); list.add(buffer.toString(); list.add(result); return list; /* * 返回计算的结果 * param operation * return String */ public static String getResult(char char1,char char2

19、,char operation) int int1 = Integer.parseInt(String.valueOf(char1); int int2 = Integer.parseInt(String.valueOf(char2); if(+=operation) return String.valueOf(int1+int2); else if (-=operation) return String.valueOf(int1-int2); else if (*=operation) return String.valueOf(int1*int2); else return null; /

20、* * 返回符号对应的中文 * param operation * return String */ public static String getOperation(char operation) if(+=operation) return 加上; else if (-=operation) return 减去; else if (*=operation) return 乘以; else return null; /* * 返回带数字的图片 * return BufferedImage */ public static BufferedImage getAuthImg(String au

21、thCode) / 设置图片的高、宽、类型 / RGB编码:red、green、blue BufferedImage img = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_INT_BGR); / 得到图片上的一个画笔 Graphics g = img.getGraphics(); / 设置画笔的颜色,用来做背景色 g.setColor(Color.YELLOW); / 用画笔来填充一个矩形,矩形的左上角坐标,宽,高 g.fillRect(0, 0, IMG_WIDTH, IMG_HEIGHT); / 将画笔颜色设置为

22、黑色,用来写字 g.setColor(Color.BLACK); / 设置字体:宋体、不带格式的、字号 g.setFont(new Font(宋体, Font.PLAIN, SINGLECODE_HEIGHT + 5); / 输出数字 char c; for (int i = 0; i authCode.toCharArray().length; i+) / 取到对应位置的字符 c = authCode.charAt(i); / 画出一个字符串:要画的内容,开始的位置,高度 g.drawString(c + , i * (SINGLECODE_WIDTH + SINGLECODE_GAP) + SINGLECODE_GAP / 2, IMG_HEIGHT); Random random = new Random(); / 干扰素 for (int i = 0; i 5; i+) int x = random.nextInt(IMG_WIDTH); int y = random.nextInt(IMG_HEIGHT); int x2 = random.nextInt(IMG_WIDTH); int y2 = random.nextInt(IMG_HEIGHT

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1