Java Web之验证码
今天来模拟一下验证码,我们需要三个文件,两个Servlet,一个jsp
直接贴代码吧
RandomCodeServlet:主要负责生产验证码
package com.vae.RandomCode; import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import java.util.UUID;
@WebServlet("/randomcode")
public class RandomCodeServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//生成随机数
String randomCode= UUID.randomUUID().toString().substring(0,5);
//把随机数放进session,作为对比的凭证
req.getSession().setAttribute("RANDOM_IN_SESSION",randomCode); //创建图片对象
int width=80;
int height=40;
int imageType=BufferedImage.TYPE_INT_RGB;
BufferedImage image=new BufferedImage(width,height,imageType); //画板
Graphics g=image.getGraphics();
g.setColor(Color.YELLOW);
//绘制一个实心的矩形
g.fillRect(1,1,width-2,height-2); //把随机数画进图片中
g.setColor(Color.BLACK);
Font font=new Font("宋体",Font.BOLD+Font.ITALIC,20);
g.setFont(font);
g.drawString(randomCode,10,20);
//干扰线,这个的目的就是为了防止黑客去用软件识别验证码
g.setColor(Color.GRAY);
Random r=new Random();
for (int i = 0; i < 100; i++) {
g.fillRect(r.nextInt(width),r.nextInt(height),2,2);
} //关闭
g.dispose();
//把图片对象以流的方式保存出去
ImageIO.write(image,"jpg",resp.getOutputStream()); }
}
LoginServlet:主要负责接收JSP传来的参数,验证码和用户输入的验证码进行一个对比
package com.vae.RandomCode; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/randomlogin")
public class LoginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.接收参数
String name=req.getParameter("username");
String email=req.getParameter("email");
String randomcode=req.getParameter("randomcode");
//2.获取session中的随机数,判断验证码是否正确
String randomcodesession=req.getSession().getAttribute("RANDOM_IN_SESSION").toString();
if (!randomcode.equalsIgnoreCase(randomcodesession)) {
req.setAttribute("errogMsg","验证码不对,请重新输入");
req.getRequestDispatcher("/randomcode/randomlogin.jsp").forward(req,resp);
return;
}
System.out.println("验证码正确");
req.getSession().removeAttribute("RANDOM_IN_SESSION"); //删除缓存 } }
最后一个是我们的JSP
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>验证码登录</title>
</head>
<body>
<h3>用户登录</h3>
${errogMsg}
<form action="/randomlogin" method="post">
账号:<input type="text" name="username" id="username" required/><br>
邮箱:<input type="email" name="email" id="email" required><br>
验证码:<input type="text" name="randomcode" id="randomcode" size="5" maxlength="5">
<img src="/randomcode" id="randomcodeImg" title="看不清,换一张"
style="cursor: pointer;" onclick="change()" > <input type="submit" value="注册">
</form> <script type="text/javascript">
function change() {
//刷新验证码的图片
document.getElementById("randomcodeImg").src="/randomcode?"+new Date().getTime();
}
</script> </body>
</html>
看看效果
就这么简单,但是有一个问题啊,就是表单重复提交了怎么办?我们不能表单重复提交,这个问题下篇文章专门来介绍一下
Java Web之验证码的更多相关文章
- Java Web模块——验证码模块
一.什么是验证码及它的作用 验 证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答. 可以防止恶意破解密码. ...
- java web 实现验证码
验证码的作用:通常的登录或者注册系统时,都会要求用户输入验证码,以此区别用户行为和计算机程序行为,目的是有人防止恶意注册.暴力破解密码等. 实现验证码的思路:用 server 实现随机生成数字和字母组 ...
- java web中验证码生成的demo
首先创建一个CaptailCode类 package com.xiaoqiang.code; import java.awt.*; import java.awt.font.FontRenderCon ...
- Java web 学习之旅
java web学习之旅 来公司十天了,感觉已经慢慢地融入了这个环境中,几个学长人都很好,都是在他们帮助下,我才能比较顺利的开始了学习java web的旅途. 来这里学习的第一个阶段是做一个简单的用户 ...
- java web实现 忘记密码(找回密码)功能及代码
java web实现 忘记密码(找回密码)功能及代码 (一).总体思路 (二).部分截图 (三).部分代码 (一).总体思路: 1.在 找回密码页面 录入 姓名.邮箱和验证码,录入后点击[提交]按钮, ...
- Java Web整合开发(3) -- Servlet
Servlert基本程序架构: (FirstServlet.java + web.xml) FirstServlet.java package com.helloben.servlet; import ...
- Java web项目综合练习(Estore)
Java web项目综合练习(Estore) 复习day18: ajax代码的书写步骤 2)json格式文本,转js对象的方法是那个 项目开发流程介绍 这里学习的JavaWEB项目实战,主要是把前面学 ...
- java web 整合开发王者归来学习总结
第一章java web开发概述 胖客户端CS,瘦客户端BS(Browser) 网址请求---服务器处理响应-----返回结果-----浏览器显示 CGI可以动态生成页面,但是每个进程都要启动一个CGI ...
- Java Web(三) 会话机制,Cookie和Session详解(转载)
https://www.cnblogs.com/whgk/p/6422391.html 很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因 ...
随机推荐
- BZOJ3239Discrete Logging——BSGS
题目大意:给出$P,B,N$,求最小的正整数$L$,使$B^L\equiv N(mod\ P)$. $BSGS$模板题. #include<set> #include<map> ...
- 洛谷P1118数字三角形题解
题目 这个题我们乍一看会有些熟悉.觉得是可以用DP来做的那个题.但是打眼一看,就会发现不对了.因为那个题是顺推而这个题则是逆推. 这样的话可怎么办呢. 我们可以在草稿纸上推一下,我们随便写个数n. 再 ...
- [ZJOI2007] 仓库建设
传送门:>HERE< 题意:有n个地点,每个地点有货物P[i]个,距离起点(地点0)的距离为x[i].在每个地点建立仓库需要费用c[i],现在需要在某些地点建设仓库,从而将货物转移到仓库里 ...
- python打印log重复问题
本博客转载于:http://www.cnblogs.com/huang-yc/p/9209096.html,写得真不错 浅析python日志重复输出问题 目录 问题起源: 问题解析 解决办法 1.改名 ...
- robotframework中RIDE的下载及安装
1.首先说一下我当前的环境配置 win10系统64位 python3.6.5,已配置环境变量 2.安装RIDE前需要安装的依赖包(使用pip就可以直接安装) 首先必须有robotframework这就 ...
- Destroying the bus stations HDU - 2485(最小割点)
题意: 就是求最小割点 解析: 正向一遍spfa 反向一遍spfa 然后遍历每一条边,对于当前边 如果dis1[u] + dis2[v] + 1 <= k 那么就把这条边加入到网络流图中, 每 ...
- Peaceful Commission HDU - 1814(输出最小的一组解)
Description 根据宪法,Byteland民主共和国的公众和平委员会应该在国会中通过立法程序来创立. 不幸的是,由于某些党派代表之间的不和睦而使得这件事存在障碍. 此委员会必须满足下列条件: ...
- Codeforces Round #541 (Div. 2) D(并查集+拓扑排序) F (并查集)
D. Gourmet choice 链接:http://codeforces.com/contest/1131/problem/D 思路: = 的情况我们用并查集把他们扔到一个集合,然后根据 > ...
- 使用 JavaScript, HTML 和 CSS 构建跨平台的桌面应用
https://electronjs.org/ —— 官网 https://github.com/electron/electron-api-demos/releases —— 下载demo 下载安装 ...
- 自学Python4.4-装饰器的进阶
自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...