简单的网页验证码设计——学习笔记
2015-11-07 22:29
351 查看
生成验证码的servlet代码
显示的jsp页面调用servlet 显示验证码
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 定义图片的宽高 Integer width = 50; Integer height = 25; // 在内存中创建一张空白图片 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取在image对象上面的画笔 Graphics g = image.getGraphics(); // 设置画笔颜色 g.setColor(getRandomColor(160, 200)); // 把颜色填充到image对象上面 g.fillRect(0, 0, width, height); // 随机产生线条 Random rd = new Random(); // 添加图片上面的验证码 g.setFont(new Font("微软雅黑", Font.ITALIC, 20)); // 设置随机生成验证码内容字符串 String lowerStr = "abcdefghijkmnlopqrstuvwxyz"; String upperStr = lowerStr.toUpperCase(); String number = "0123456789"; String codeString = lowerStr + number + upperStr; // char[] codeChars = codeString.toCharArray(); // 定义存储随机的4个字符组成的字符串 String code = ""; for (int i = 0; i < 4; i++) { // 随机从codeString对象中抽取一个字符转换一个字符串 String validatCode = String.valueOf(codeString.charAt(rd .nextInt(codeString.length()))); code += validatCode; // 设置当前画笔的颜色 g.setColor(new Color(20 + rd.nextInt(110), 20 + rd.nextInt(110), 20 + rd.nextInt(110))); // 把每次获取到的字符串写到图片上面 g.drawString(validatCode, i * 10 + 4, 20); } // 设置干扰线的颜色 g.setColor(getRandomColor(200, 250)); // 添加干扰线 for (int i = 1; i <= 20; i++) { int x = rd.nextInt(width); int y = rd.nextInt(height); int x1 = rd.nextInt(9); int y1 = rd.nextInt(9); g.drawLine(x, y, x + x1, y + y1); } // 把获取的验证码存在session对象中 request.getSession().setAttribute("code", code); g.dispose(); // 输出图片对象 ImageIO.write(image, "JPEG", response.getOutputStream()); } public Color getRandomColor(int fc, int bc) { fc = fc > 255 ? 255 : fc; bc = bc > 255 ? 255 : bc; Random rd = new Random(); int r = fc + rd.nextInt(bc - fc); int g = fc + rd.nextInt(bc - fc); int b = fc + rd.nextInt(bc - fc); return new Color(r, g, b); }
显示的jsp页面调用servlet 显示验证码
<body> 验证码:<img src="ValidateCodeServlet" id="validate" /> <a href="javascript:void(0);" onclick="refresh();">看不清</a> <script> //刷新验证码的处理函数 var refresh = function(){ var validate = document.getElementById('validate'); //这里要向后台servlet随便传点内容,以区别每次请求,达到刷新的效果 validate.src="ValidateCodeServlet?random="+Math.round(); }; </script>
相关文章推荐
- jsp和servlet中实现页面跳转的方式实例总结
- Servlet与JSP间的两种传值情况
- JSP、Servlet中get请求和post请求的区别总结
- jsp和servlet的区别探讨
- Struts2访问servlet分享
- java中Servlet处理乱码的方法
- Servlet 过滤器详细介绍
- JSP+Servlet+JavaBean实现登录网页实例详解
- servlet中session简介和使用例子
- 在Jsp Servlet中页面重新定向总汇
- JSP使用Servlet作为控制器实现MVC模式实例详解
- Servlet动态网页技术详解
- jsp和servlet操作mysql中文乱码问题的解决办法
- 基于jsp+servlet实现的简单博客系统实例(附源码)
- js调用后台servlet方法实例
- 利用JQuery和Servlet实现跨域提交请求示例分享
- JavaWeb编程 Servlet的基本配置
- java servlet 几种页面跳转的方法
- servlet 解决乱码问题