jsp使用servlet实现用户登录 及动态验证码
在进行表单设计中,验证码的增加恰恰可以实现是否为“人为”操作,增加验证码可以防止网站数据库信息的冗杂等...
现在,我将讲述通过servlet实现验证码:
验证码作为一个图片,在页面中为“画”出来的,它是如何画出来的呢?
<生成图片>
{
生成图片的类:
1.BufferedImage图像数据缓冲区
2.Graphics绘制图片
3.color获取颜色
4.Random获取随机数
5.ImageIO输出图片
}
///////////////////////////////////////////////////////////////////////////
<生成验证码图片>
1.在index.jsp中写入以下代码
<form method="get" action="demo5" onsubmit="return isvalidate();" >
姓名:<input type="text" placeholder="请输入姓名" name="myname">
密码:<input type="password" placeholder="请输入密码" name="mypassword">
验证码:<input type="text" name="checkCode"/>
<img alt="验证码" id="imagecode" src="demo4"/>
<a href="javascript:reloadCode()">看不清楚</a><br>
<input type="submit" value="提交"/>
</form>
2.在src中创建ServletDemo4类
public class ServletDemo4 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
//这个方法实现验证码的生成
BufferedImage bi = new BufferedImage(, , BufferedImage.TYPE_INT_RGB);//创建图像缓冲区
Graphics g = bi.getGraphics(); //通过缓冲区创建一个画布
Color c = new Color(, , ); //创建颜色
/*根据背景画了一个矩形框
*/
g.setColor(c);//为画布创建背景颜色
g.fillRect(, , , ); //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 = ; i < ; i++) {
index = r.nextInt(len);//产生随机数字
g.setColor(new Color(r.nextInt(), r.nextInt(), r.nextInt())); //设置颜色随机
g.drawString(ch[index] + "", (i * ) + , );//画数字以及数字的位置
sb.append(ch[index]);
}
request.getSession().setAttribute("piccode", sb.toString()); //将数字保留在session中,便于后续的使用
ImageIO.write(bi, "JPG", response.getOutputStream());
}
}
3.在WEB-INF进行配置文件
<servlet-name>ServletDemo4</servlet-name>
<servlet-class>com.neunb.servlet.ServletDemo4</servlet-class>
</servlet>
<servlet> <servlet-mapping>
<servlet-name>ServletDemo4</servlet-name>
<url-pattern>/demo4</url-pattern>
</servlet-mapping>
------华丽分割线-------
<输入信息及验证码与进行校验>
1.创建ServletDemo5类、
public class ServletDemo5 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException
//用于验证验证码
{
String name=request.getParameter("myname");
String password=request.getParameter("mypassword");
String piccode = (String) request.getSession().getAttribute("piccode");
String checkCode = request.getParameter("checkCode"); //取值
//checkCode=checkCode.toUpperCase(); //把字符全部转换为大写的(此语句可以用于验证码不区分大小写)
response.setContentType("text/html;charset=gbk");//解决乱码问题
PrintWriter out = response.getWriter();
Map<String,String> map=new HashMap<>();
map.put("小红","");//存入用户名,密码
map.put("小丽","");
map.put("小张","");
String html = "<html><head><title></title></head><body><p>登录成功</p><a href='index.jsp'>返回</a></body></html>";//设置登录成功页面
if (checkCode.equals(piccode)) {
if(map.containsKey(name)){
if(map.get(name).equals(password)){
out.write(html);//信息验证成功,跳转
}
else out.println("密码错误!!!");
}
else out.println("用户名不存在!!!");
} else {
out.println("验证码输入错误!!!");
}
out.flush();//将流刷新
out.close();//将流关闭
}
}
2.配置WEB-INF
<servlet-name>ServletDemo5</servlet-name>
<servlet-class>com.neunb.servlet.ServletDemo5</servlet-class>
</servlet>
<servlet> <servlet-mapping>
<servlet-name>ServletDemo5</servlet-name>
<url-pattern>/demo5</url-pattern>
</servlet-mapping>
------华丽分割线-----
在点击页面中的看不清楚时,需要进行刷新,在页面中书写一段JS代码
<script type="text/javascript">
function reloadCode() {//切换验证码
var time = new Date().getTime();
document.getElementById("imagecode").src = "demo4?d=" + time;
} function isvalidate()
{//对输入信息合格性进行判断
if(document.getElementsByName("myname")[].value.length<||document.getElementsByName("myname")[].value.length>)
{
alert("用户名不合法(提示:长度在2-12个字符组成)");
return false;
} if(document.getElementsByName("mypassword")[].value.length<)
{
alert("密码长度至少为3位");
return false;
}
if(document.getElementsByName("checkCode")[].value.length!=)
{
alert("验证码为4位");
return false;
}
return true;
}
</script>
运行结果截图:

jsp使用servlet实现用户登录 及动态验证码的更多相关文章
- 模拟用户登录,内含验证码验证和request等操作
模拟用户登录,内含验证码验证和jsp等操作 1.案例需求: 1. 访问带有验证码的登录页面login.jsp 2. 用户输入用户名,密码以及验证码. * 如果用户名和密码输入有误,跳转登录页面,提示: ...
- JSP内置对象---用户登录页面(get和post)
Login.jsp 页面: <%@ page language="java" import="java.util.*" contentType=" ...
- JSP小例子——实现用户登录小例子(不涉及DB操作)
实现用户登录小例子用户名和密码都为"admin",登陆成功使用服务器内部转发到login_success.jsp页面,并且提示登陆成功的用户名.如果登陆失败则请求重定向到login ...
- Servlet——简单用户登录实例+http协议解析
编写项目.用户登录系统1.0版本号 登录界面Servlet: package com.gavin.view; import java.io.IOException; import java.io.Pr ...
- 使用jsp,tomcat实现用户登录注册留言的代码
以下jsp中,未使用样式表对网页进行排版和表单的验证(每个jsp的表单填写的时候应该进行空值与空格的验证,防止提交时出错) 所有错误,链接到error.jsp <%@ page language ...
- 用servlet实现用户登录案例
以下实现登录窗口 Login.jsp <!--Login.jsp--> <%@ page language="java" import="java.ut ...
- Servlet实现用户登录
1.登录过程分析: 通过表单收集用户的数据,Servlet通过request对象获得用户提交的数据,服务器还需要从数据库中通过sql语句查询有没有表单提交的数据中的用户.有则登录成功,否则,登录失败. ...
- Java EE之servlet实现用户登录
1.在连接数据库的JAVA类中添加查询功能: 在这之前有一个连接数据库的方法: Connection conn=null; PreparedStatement stat=null; ...
- JSP慕课网阶段用户登录小例子(不用数据库)
getAttribute和setAttribute一起使用,而getParameter用于取得如request传来的参数. Web是请求/响应架构的使用,而request和response就是在服务器 ...
随机推荐
- [Project] MiniSearch文本检索简介
1. 预处理过程 预处理主要用来事先生成程序在运行过程中可能用到的数据,以便加速处理时间. 预处理的过程主要生成程序所需的三个文件:网页库文件,网页位置信息文件和倒排索引文件. 网页库文件 其中网页库 ...
- 背水一战 Windows 10 (83) - 用户和账号: 数据账号的添加和管理, OAuth 2.0 验证
[源码下载] 背水一战 Windows 10 (83) - 用户和账号: 数据账号的添加和管理, OAuth 2.0 验证 作者:webabcd 介绍背水一战 Windows 10 之 用户和账号 数 ...
- 【spring源码分析】IOC容器初始化——查漏补缺(一)
前言:在[spring源码分析]IOC容器初始化(十一)中提到了初始化bean的三个步骤: 激活Aware方法. 后置处理器应用(before/after). 激活自定义的init方法. 这里我们就来 ...
- GCD on Blackboard
题目大意:给你n个数,然后在这n个数中选一个数,选中的这个数可以变成任意的数,使这n个数的gcd(最大公约数)最大.打印这个最大的gcd. 思路:这题一看貌似很复杂,其实这题只要你知道前缀和 和 ...
- maya2015卸载/安装失败/如何彻底卸载清除干净maya2015注册表和文件的方法
maya2015提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装maya2015失败提示maya2015安装未完成,某些产品无法安装,也有时候想重新安装maya ...
- InnoDB体系架构(三)Checkpoint技术
Checkpoint技术 前篇 InnoDB体系架构(二)内存 从缓冲池.缓冲池的管理.重做日志缓冲.额外内存缓冲这四个点介绍了InnoDB存储引擎的内存结构,而在将缓冲池的数据刷新到磁盘的过程中使用 ...
- JavaScript获取键盘事件
JavaScript中: onkeydown 事件会在用户按下一个键盘按键时发生. onkeypress 事件会在键盘按键被按下并释放一个键时发生. onkeyup 事件会在键盘按键被松开时发生. 支 ...
- 用HTML5 video标签插入视频,在谷歌浏览器上播放视频时,右下角显示的下载按钮怎么去掉
使用H5的video标签可以直接插入视频,一般在浏览器效果如下图显示: 但有时在谷歌浏览器上显示,会遇到右下角有下载按钮.如果项目要求去掉这个下载按钮,怎么办呢?如下图显示: 分析: 经本人测试,是谷 ...
- Android 开发工具推荐
简评: 自己过去在 Android 开发中发现的好工具,在这里分享给大家.: ) Library methods count 每一个 Android App 的开发中都会用到很多的库,这个工具能够让你 ...
- Liferay7 BPM门户开发之19: 理解Service Builder体系
Service Builder是Liferay为业务开发而设计的模型驱动(model-driven)平台工具,提供一系列的实体类.数据持久化.服务相关的代码自动生成服务.支持Hibernate and ...