JSP网站开发基础总结《十三》
继上一篇为大家补充过滤器类后,本篇为大家简单介绍一下如何实现验证码效果。验证码的作用是什么呢?1、防止恶意注册2、防止恶意提交3、防止盗取账户等等,总的来说验证码的存在就是为了,防止非人为的操作,不过需要指出的是验证码是一种影响用户体验的功能,所以一些网站通过设置参数,当用户第一次操作失败后,才会提示用户输入验证码,这可以说是验证码的一种提高。不说这没有用的了,下面我们开始实现我们的验证码效果。
1、实现效果图:

2、index.jsp:
在这个界面设计时添加了一些JavaScript的操作,如有疑问,可以留言。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>验证码</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript">
function reloadCode(){
var time = new Date().getTime();//通过这个来保证浏览器刷新界面
document.getElementById("img").src="<%=request.getContextPath() %>/servlet/ImgSelect?time="+time;//验证更新操作
document.getElementById("code").value="";
document.getElementById("code").focus();
}
</script>
</head> <body>
<center>
<h1>验证码</h1>
<form action="<%=request.getContextPath() %>/servlet/loginSelect" method="post">
<input type="text" id="code" name="code"/><img alt="验证码" id="img" src="<%=request.getContextPath() %>/servlet/ImgSelect">
<a href="javascript:reloadCode()" >看不清</a><br/>
<input type="submit" value="提交">
</form>
</center>
</body>
</html>
3、生成验证码select:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
BufferedImage bi = new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB);
Graphics g = bi.getGraphics();
Color color = new Color(200, 130, 255);
g.setColor(color);
g.fillRect(0, 0, 68, 22); char [] ch = "QWERTYUIOPASDFGHJKLZXCVBNM1234567890zxcvbnmlkjhgfdsaqwertyuiop".toCharArray();
Random r = new Random();
StringBuffer buf = new StringBuffer();
int len = 0;
for(int i=0; i<4; i++){
len = r.nextInt(ch.length);
g.setColor(new Color(r.nextInt(150), r.nextInt(255), r.nextInt(200)));
g.drawString(ch[len]+"", (i*15)+3, 18);
buf.append(ch[len]);
}
String code = buf.toString();
request.getSession().setAttribute("code", code);
ImageIO.write(bi, "JPG", response.getOutputStream());
}
4、验证selelct:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8"); response.setContentType("text/html");
PrintWriter out = response.getWriter(); String code = request.getParameter("code");
String imgCode = (String) request.getSession().getAttribute("code");
if(imgCode.equalsIgnoreCase(code)){
out.println("登录成功");
}else{
out.println("登录失败");
} }
到这里我们的验证码效果就实现了,对于生成汉字验证码、数学算式表达式的验证码效果大家就自行研究吧,思想已经为大家介绍完毕,对于JSP的总结,目前就差关于文件的上传和下载了,估计会在随后的日子里为大家分享,当然如果你能实现,还望多多指点。
JSP网站开发基础总结《十三》的更多相关文章
- JSP网站开发基础总结《二》
有了上一篇的学习,我相信大家对于JSP一定有了一定的认识,从今天开始我们真正开启JSP模式,如果你有HTML的基础,那学起JSP来也就方便了很多了,首先JSP做为网站开发语言,它与HTML有很多相似的 ...
- JSP网站开发基础总结《一》
经过JAVASE的学习相信大家对JAVA已经不再陌生,那么JAVA都可以干什么呢?做算法.应用程序.网站开发都可以,从今天开始为大家奉上JAVAEE之JSP动态网站开发基础总结. 既然是动态网站开发, ...
- JSP网站开发基础总结《八》
JSP的学习总结到本篇已经八篇了,内容比较多,但都是实战,本篇最后为大家介绍一个小效果:百度分页.就是当我们遍历的数据对象较多时,这时我们就会看到了这个效果了,那他是如何实现的呢?下面我们就一起学习一 ...
- JSP网站开发基础总结《七》
按照计划本篇将为大家总结搜索功能的两种实现:确定搜索与模糊搜索.所谓精确搜索便是指,根据用户的输入的搜索内容,在数据库中寻找具有一一对应的关系的数据,一般都是用户在数据库中的主键值.而模糊搜索,是一种 ...
- JSP网站开发基础总结《十二》
前两篇已经简单为大家介绍了一下,有关Filter接口的知识,本篇就让我们以一个登录小功能,来具体实现一下过滤器的作用,便于大家掌握.具体为大家介绍一下如何使用Filter对访问进行过滤,及如何防止中文 ...
- JSP网站开发基础总结《四》
经过前几篇的摸爬滚打,下面我们就开始我们真正的数据库操作了,本篇重点在于如何在网站端编写数据库操作语句,内容不多,就是我们常见的增删改查. 0.数据库对象创建: 在JAVASE基础知识总结时,就为大家 ...
- JSP网站开发基础总结《九》
本篇属于附加篇,在之前的总结中给大家提到过一个关于登录状态验证的效果,当时是通过Session对象完成的,今天我查了一下,JSP为我们封装了一个用于过滤用的过滤器类Filter,通过它我们就可以非常轻 ...
- JSP网站开发基础总结《六》
对于本篇需要总结的内容,量估计有点大,大家好好看哈,绝对全是干货,代码的已经运行测试,不存在问题,大家可以参考学习,下面开始本篇的内容. 1.添加数据到数据库: 如何用户在JSP页面的填写的信息输入到 ...
- JSP网站开发基础总结《九》(转)
本篇属于附加篇,在之前的总结中给大家提到过一个关于登录状态验证的效果,当时是通过Session对象完成的,今天我查了一下,JSP为我们封装了一个用于过滤用的过滤器类Filter,通过它我们就可以非常轻 ...
随机推荐
- 关于PHP堆栈与列队
在PHP中数组常被当作堆栈(后进先出:LIFO)与队列(先进先出:FIFO)结构来使用.PHP提供了一组函数可以用于push与pop(堆栈)还有shift与unshift(队列)来操作数组元素.堆栈与 ...
- Ubuntu12.04下编译OpenCv2.4.9程序
引用地址http://blog.163.com/huai_jing@126/blog/static/171861983201311103411229/ 方法1:直接命令编译: g++ main.cpp ...
- 如何为Eclipse安装主题(Color Theme)
Eclipse开发环境默认都是白底黑字的,看到同事的Xcode中设置的黑灰色背景挺好看的,就去网上查了一下.发现Eclipse也可以设置主题. 方法1:你可以从Eclipse Marketplace中 ...
- ZabbixCPU温度监视-Centos
ZabbixCPU温度监视 1, lm_sensors安装 #yum install lm_sensors … #sensors-detect 出来的选项全部选yes 重启服务器 2, lm_sens ...
- Apple II DOS 源代码发布
加州山景城的计算机历史博物馆不仅仅展示硬件,还展示软件.博物馆此前已发布了著名软件MacPaint .Photoshop和APL的源代码,现在它公开了1978年的Apple II DOS源代码.源代码 ...
- C# Entity Framework查询小技巧 NoTracking
在使用Entity Framework做查询的时候,如果只需要显示,而不用保存实体,那么可以用AsNoTracking()来获取数据. 这样可以提高查询的性能. 代码如下: var context = ...
- TCP字节流和UDP数据报区别
两者的区别在于TCP接收的是一堆数据,而每次取多少由主机决定;而UDP发的是数据报,客户发送多少就接收多少. 拥有这些区别的原因是由于TCP和UDP的特性不同而决定的.TCP是面向连接的,也就是说,在 ...
- Java虚拟机9:Java类加载机制
前言 我们知道我们写的程序经过编译后成为了.class文件,.class文件中描述了类的各种信息,最终都需要加载到虚拟机之后才能运行和使用.而虚拟机如何加载这些.class文件?.class文件的信息 ...
- Wix 安装部署教程(八) 自动生成XML小工具
这个功能类似于Heat.exe,指定文件夹,生成对应的WIX标签.Winform做的,代码简单,生成的标签需要粘贴到对应的目录才能使用,并不是一步到位. 需要设定两个参数,一个是文件夹路径,一个是文件 ...
- 使用Guava提供的transform批量转换
实际开发了,为了快速查询,我们会把日期以Long类型的方式存储到数据库中,比如20000000000000L,但显示的时候,要完整的日期,即yyyy-MM-dd的格式显示. 这个时候,我们就可以使用C ...