前段时间赶着结束毕业设计任务,现在完成了。回来补一下设计毕业设计的过程中遇到的问题和解决方案。

为了使小系统更有模有样,这里尝试在登录页面实现验证码功能。现描述一下我的解决方案。

首先看一下实现后的界面:只要点击一下图片就可以刷新一次验证码,只有正确输入验证码后才能继续正常的登录操作,不区分大小写。

直接上代码

首先在index.jsp页面验证码相应代码:

 <input type="text" id="checkCode"name="checkCode" style="width:100px" /> <a
href="javascript:reloadCode()"> <img alt="验证码"
id="imagecode" src="ServletDemo4" />

同样,在登录页面引入javascript小函数负责验证码切换的功能

<script type="text/javascript" language="javascript">
function reloadCode() {//切换验证码
var time = new Date().getTime();
document.getElementById("imagecode").src = "ServletDemo4?d="
+ time;
}
</script>

接下来是后台绘画验证码的java代码:(详细代码描述见注释,这里不赘述)

这里主要应用了BufferedImage 类功能,它可以创建一个图像缓存区,并且在这基础上可以按我们的想法对其进行操作

 package management;

 import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random; import javax.imageio.ImageIO;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "ServletDemo4", urlPatterns = { "/ServletDemo4" })
public class ServletDemo4 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
//这个方法实现验证码的生成
BufferedImage bi = new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB);//创建图像缓冲区 Graphics g = bi.getGraphics(); //通过缓冲区创建一个画布 Color c = new Color(255, 255, 255); //创建颜色
/*根据背景画了一个矩形框
*/
g.setColor(c);//为画布创建背景颜色 g.fillRect(0, 0, 68, 22); //fillRect:填充指定的矩形
// X和Y用于指定矩形左上角也就是相对于原点的位置,width和height用于指定矩形的宽和高。 char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();//转化为字符型的数组
Random r = new Random();
int len = ch.length;
int index; //index用于存放随机数字
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) {
index = r.nextInt(len);//产生随机数字
g.setColor(new Color(r.nextInt(88), r.nextInt(188), r.nextInt(255))); //设置颜色随机
g.drawString(ch[index] + "", (i * 15) + 3, 18);//画数字以及数字的位置
sb.append(ch[index]);
}
request.getSession().setAttribute("piccode", sb.toString()); //将数字保留在session中,便于后续的使用
ImageIO.write(bi, "JPG", response.getOutputStream());
}
}

接下来是loginservlet中关于验证码处理的核心代码:

 /*获取验证码与用户输入的验证码数据*/
String piccode = (String) request.getSession().getAttribute("piccode");
String checkCode = request.getParameter("checkCode"); //取值
checkCode=checkCode.toUpperCase(); //把字符串中的字母全部转换为大写

使用:

只需要比对输入的字符串是否和session保存的piccode相同即可实现验证码的功能

 if (checkCode.equals(piccode)) {//满足即输入验证码正确
。。。。
}

jsp页面简单的验证码实现的更多相关文章

  1. jsp中生成的验证码和存在session里面的验证码不一致的处理

    今天在调试项目的时候发现,在提交表单的时候的验证码有问题,问题是这样的:就是通过debug模式查看得知:jsp页面生成的验证码和表单输入的页面输入的一样,但是到后台执行的时候,你会发现他们是不一样的, ...

  2. Spring mvc 简单异常配置jsp页面

    原文出处:http://howtodoinjava.com/spring/spring-mvc/spring-mvc-simplemappingexceptionresolver-example/ 这 ...

  3. zf-关于查询机把index.jsp换成index_new.jsp页面之后把功能链接都改成新页面的简单方法

    一开始我都是找action 然后一个一个的改 把onmousedown="goURL('index.jsp')" 改成 onmousedown="goURL('index ...

  4. 【页面传值6种方式】- 【JSP 页面传值方法总结:4种】 - 【跨页面传值的几种简单方式3种】

    阅读目录 1. URL 链接后追加参数 2. Form 3. 设置 Cookie 4. 设置 Session JSP 页面间传递参数是项目中经常需要的,这应该算是 web 基本功吧. 试着将各种方式总 ...

  5. JSP页面验证码实现

    首先在JSP页面加上生成图片的链接 <img type="image" src="auth/authCode" id="codeImage&qu ...

  6. JSP页面中验证码的调用方法

    步骤: 1.首先是要生成验证码 2.对验证码类进行调用:主要 实现的是  将验证码图片 输出到response.getOutputStream()这个输出流中 调用时,可以在页面调用,也可以在serv ...

  7. jsp页面用DBHelper实现简单的登陆验证

    首先我们需要写一个简单的登陆页面login.jsp,然后用from表单提交给index.jsp页面.在index.jsp页面通过DBHelper连接数据库判断账号和密码,如果密码正确则显示登陆成功. ...

  8. JSP页面以及简单的指令

    —JSP(Java Server Pages)是指: —在HTML中嵌入Java脚本语言 —由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本语言命令 —然后将生成的整个页面信息返回给客户端 页 ...

  9. JavaBean之简单应用JSP页面

    JavaBean的属性可以是任意类型,并且一个JavaBean可以有多个属性.每个属性通常都需要具有相应的setter. getter方法,setter方法称为属性修改器,getter方法称为 属性访 ...

随机推荐

  1. 646. Maximum Length of Pair Chain 最长的链条长度

    [抄题]: You are given n pairs of numbers. In every pair, the first number is always smaller than the s ...

  2. 65. Valid Number 判断字符串是不是数字

    [抄题]: Validate if a given string is numeric. Some examples:"0" => true" 0.1 " ...

  3. 152. Maximum Product Subarray最大乘积子数组/是否连续

    [抄题]: Given an integer array nums, find the contiguous subarray within an array (containing at least ...

  4. 364. Nested List Weight Sum II 大小反向的括号加权求和

    [抄题]: Given a nested list of integers, return the sum of all integers in the list weighted by their ...

  5. [leetcode]99. Recover Binary Search Tree恢复二叉搜索树

    Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...

  6. Spring注入静态变量的方法,以及CXF如何获取客户端IP

    1.如果使用@Resource注解来注入静态变量的,服务器启动就会报错的.可以新增一个set方法,同时在set方法上用@Resource注解来注入. 2.或者直接在Spring的配置文件中使用< ...

  7. stark组件开发之添加按钮显示和URL

    添加: 需求: 根据用户的权限, 决定是否,有添加按钮.  通过配置进行定制,预留钩子进行权限的判断. class StartHandler(object): .................... ...

  8. Python开发——函数【装饰器、高阶函数、函数嵌套、闭包】

    装饰器 装饰器本质就是函数,为其他函数添加附加功能. 原则: 不修改被修饰函数的源代码 不修改被修饰函数的调用方法 装饰器知识储备:装饰器 = 高阶函数 + 函数嵌套 + 闭包 案例:求函数运行时间! ...

  9. LibreOJ #6014. 「网络流 24 题」最长 k 可重区间集

    #6014. 「网络流 24 题」最长 k 可重区间集 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   ...

  10. 分布式锁三种实现方式(DB,redis,zookeeper)比较

    先贴出看到的一篇博客,后续补充自己总结分析的. https://blog.csdn.net/u010963948/article/details/79006572