在进行表单设计中,验证码的增加恰恰可以实现是否为“人为”操作,增加验证码可以防止网站数据库信息的冗杂等...

现在,我将讲述通过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实现用户登录 及动态验证码的更多相关文章

  1. 模拟用户登录,内含验证码验证和request等操作

    模拟用户登录,内含验证码验证和jsp等操作 1.案例需求: 1. 访问带有验证码的登录页面login.jsp 2. 用户输入用户名,密码以及验证码. * 如果用户名和密码输入有误,跳转登录页面,提示: ...

  2. JSP内置对象---用户登录页面(get和post)

    Login.jsp 页面: <%@ page language="java" import="java.util.*" contentType=" ...

  3. JSP小例子——实现用户登录小例子(不涉及DB操作)

    实现用户登录小例子用户名和密码都为"admin",登陆成功使用服务器内部转发到login_success.jsp页面,并且提示登陆成功的用户名.如果登陆失败则请求重定向到login ...

  4. Servlet——简单用户登录实例+http协议解析

    编写项目.用户登录系统1.0版本号 登录界面Servlet: package com.gavin.view; import java.io.IOException; import java.io.Pr ...

  5. 使用jsp,tomcat实现用户登录注册留言的代码

    以下jsp中,未使用样式表对网页进行排版和表单的验证(每个jsp的表单填写的时候应该进行空值与空格的验证,防止提交时出错) 所有错误,链接到error.jsp <%@ page language ...

  6. 用servlet实现用户登录案例

    以下实现登录窗口 Login.jsp <!--Login.jsp--> <%@ page language="java" import="java.ut ...

  7. Servlet实现用户登录

    1.登录过程分析: 通过表单收集用户的数据,Servlet通过request对象获得用户提交的数据,服务器还需要从数据库中通过sql语句查询有没有表单提交的数据中的用户.有则登录成功,否则,登录失败. ...

  8. Java EE之servlet实现用户登录

    1.在连接数据库的JAVA类中添加查询功能: 在这之前有一个连接数据库的方法: Connection conn=null; PreparedStatement stat=null;           ...

  9. JSP慕课网阶段用户登录小例子(不用数据库)

    getAttribute和setAttribute一起使用,而getParameter用于取得如request传来的参数. Web是请求/响应架构的使用,而request和response就是在服务器 ...

随机推荐

  1. nginx 502 bad gateway 问题处理集锦

    一般看来, 这种情况可能是由于nginx默认的fastcgi进程响应的缓冲区太小造成的, 这将导致fastcgi进程被挂起, 如果你的fastcgi服务对这个挂起处理的不好, 那么最后就极有可能导致5 ...

  2. go语言异常处理

    go语言异常处理 error接口 go语言引入了一个关于错误错里的标准模式,即error接口,该接口的定义如下: type error interface{ Error() string } 对于要返 ...

  3. 小程序基础知识点讲解-WXML + WXSS + JS,生命周期

    小程序基础 小程序官方地址,小程序开发者工具,点击此处下载.在微信小程序中有一个配置文件project.config.json,此文件可以让开发者在不同设备中进行开发. 微信小程序共支持5种文件,wx ...

  4. 再次理解HTTP请求过程[概念原理篇]

    我曾多次阅读http协议,但是理解依然不深,在此,再次阅读,再次理解.加深两点:解析头部信息\r\n,分解头部和主体用\r\n\r\n.之所以一次请求会看到网络里有很多请求,是因为浏览器代替访问了多次 ...

  5. Qt之使用CQU库快速开发统一风格界面

    在使用Qt开发时,肯定是想让开发的项目界面统一风格:不希望每个界面都要程序员用代码去修饰美化以及进行事件处理等等,这样非常繁琐,容易出错而且没有格调:所以我就开发一个动态链接库,封装统一的风格界面.事 ...

  6. 安装 composer 并启动 yii2 项目

    环境 MacOS 10.12.6 PHP 5.6.30 yii2.0 一.composer (类似 node's npm) 1.安装 php -r "copy('https://getcom ...

  7. org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException

    相信很多的朋友在开发过程中都或多或少的遇见一些异常,下面我给大家说一说NoSuchRequestHandlingMethodException 这个异常说的是找不到处理这样的请求方法,那是什么原因导致 ...

  8. 3-5 Vue中的样式绑定

    Vue中的样式绑定: 本案例,简单设计一个<div>的点击绑定事件来改变div的样式效果 方法一:[class] ①(class和对象的绑定) //如上,运用class和一个对象的形式来解 ...

  9. app自动化测试之实战应用(百度app简单测试)

    模拟在百度app中搜索python相关内容代码如下: from appium import webdriver desired_caps = {} desired_caps['deviceName'] ...

  10. 安装Elasticsearch中Head插件并使用

    基础环境 Elasticsearch集群搭建请参考前一篇文章http://www.cnblogs.com/aubin/p/8012840.html 系统 节点名 IP 软件版本 CentOS7.3 e ...