servlet中生成验证码
在servlet中生成验证码
package login;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* 生成验证码servlet
* @author Administrator
*
*/
public class CheckCodeServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("service called");
/**1.设置server响应类型为jpg格式图片 */
response.setContentType("image/jpeg");
/**2.绘图**/
//1.在内存中开辟空间存储图片
BufferedImage image = new BufferedImage(60,25,BufferedImage.TYPE_INT_RGB);
//2.获得画笔
Graphics g = image.getGraphics();
//3.准备随机数对象
Random r = new Random();
//4.设置图片背景色
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
//5.填充
g.fillRect(0, 0, 60, 25);
//6.设置画笔前景色(设置字体颜色)
g.setColor(new Color(0,0,0));
//7.产生随机数
String number = String.valueOf(r.nextInt(99999)+1000);
/**将验证码存放session中*/
HttpSession session =request.getSession();
session.setAttribute("checkcode", number);
//8.数字画到图片上
g.drawString(number, 15,15);
g.drawLine(r.nextInt(20), r.nextInt(20), r.nextInt(50), r.nextInt(50));
g.drawLine(r.nextInt(20), r.nextInt(20), r.nextInt(50), r.nextInt(50));
g.drawLine(r.nextInt(20), r.nextInt(20), r.nextInt(50), r.nextInt(50));
g.drawLine(r.nextInt(20), r.nextInt(20), r.nextInt(50), r.nextInt(50));
/**3.使用特定格式压缩图片并输出*/
//1.建立文件输出流
OutputStream os =response.getOutputStream();
//2.使用指定格式
JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(os);
encoder.encode(image);
}
}
在jsp页面使用java产生的验证码:
<td style="width:80px">
验证码:
</td>
<td valign="middle" >
<input name="validatecode" size="7px"/>
<img src="checkcode" id="img"><!-- 等效于"#" -->
<a href="javascript:;" onclick="document.getElementById('img').
src='checkcode?'+new Date().getTime();"><span style="font-size:12px;">看不清。换一张</span></a>
<br/>
<span style="color:red;">
<%
String check_error=(String)request.getAttribute("check_error");
%>
<%=check_error==null?"":check_error%>
</span>
</td>
在xmd文件中面的配置
<servlet>
<servlet-name>check</servlet-name>
<servlet-class>login.CheckCodeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>check</servlet-name>
<url-pattern>/checkcode</url-pattern>
</servlet-mapping>
进行验证推断的部分代码:
String validatecode=request.getParameter("validatecode");//验证码
String checkCode=(String)session.getAttribute("checkcode");
在servlet里面进行比較
servlet中生成验证码的更多相关文章
- java中生成验证码,以及验证码的使用
java中生成验证码,以及验证码的使用: 1:验证码生成工具类: import java.awt.Color; import java.awt.Font; import java.awt.Graphi ...
- JAVA WEB项目中生成验证码及验证实例(附源码及目录结构)
[我是一个初学者,自己总结和网上搜索资料,代码是自己敲了一遍,亲测有效,现将所有的目录结构和代码贴出来分享给像我一样的初学者] 作用 验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计 ...
- 使用Servlet动态生成验证码
最近在重新看了一遍servlert,看到篇优质博客推荐给大家:https://www.cnblogs.com/xdp-gacl/p/3798190.html 顺便把学习过程中的知识记录下来. 今天是如 ...
- 2017.11.29 JSP+Servlet 中功能验证码及验证的实现
源代码如下: validate.jsp <%@ page language="java" import="java.util.*" pageEncodin ...
- PHP中生成验证码
//生成图片$im = imagecreatetruecolor(100,30);//生成颜色,当第一次调用生成颜色的方法,是生成背景颜色,默认是黑色//如果想自定义背景颜色,用到imagefill函 ...
- Servlet生成验证码并进行账号密码和验证码的验证登陆!
前言: 人不是生来就懂事的,在编程的世界也是一样,想想在大一的时候我还是那个连输出Hello World!都不会的小孩子是,现在我已经可以编出属于我自己的小程序了.编程其实并不可怕,可怕的是你不去编. ...
- Java生成验证码原理(jsp)
验证码的作用: 验证码是Completely Automated Public Turing test to tell Computers and Humans Apart(全自动区分计算机和人类的 ...
- Java生成验证码并进行验证(转)
本文转自http://blog.csdn.net/worm0527/article/details/51030864 一.实现思路 使用BufferedImage用于在内存中存储生成的验证码图片 使用 ...
- 详细说说如何生成验证码—ASP.NET细枝末节(4)
前言 今天小编详细的说一下,ASP.NET网站开发过程中生成验证码的全部问题. 本文的目标,是让读者了解,生成验证码涉及的全部基础知识问题. 当然这里说的是比较简单的验证码. 真正符合要求的验证码,涉 ...
随机推荐
- Java8学习笔记(六)--Optional
前言 身为一名Java程序员,大家可能都有这样的经历:调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法.我们首先要判断这个返回值是否为null,只有在非空的前提下才能将其作为其他方法的 ...
- [Artoolkit] Marker of nftSimple
重点看:markers.dat 的解析原理 1. int main(int argc, char** argv) { ]; const char *cparam_name = "Data2/ ...
- Mac 上 Charles 抓取 iso http、https数据包
一.下载charles包. http://www.charlesproxy.com/download/ 选择mac版本的最新包Charles is 3.11.4. http://www.charles ...
- MySql按字段分组取最大值记录 [此博文包含图片]
要求:获得按table1_id分组,并且age最大的记录信息,即2.3.5条 方法一: select * from (select * from table2 order by age d ...
- 【转载】Eclipse 的快捷键以及文档注释、多行注释的快捷键
一.多行注释快捷键 1.选中你要加注释的区域,用ctrl+shift+C 或者ctrl+/ 会加上//注释2.先把你要注释的东西选中,用shit+ctrl+/ 会加上/* */注释 3.以上快捷 ...
- mac环境变量
环境: 当前已经有 .bash_profile文件了 打开.bash_profile: open -e .bash_proile open -e .bash_profile 查看node安装路径: w ...
- 【win10】更改资源管理器显示:快速访问和此电脑
通常,我习惯通过按 win+E来打开资源管理器,然后显示各个分区并进行操作.在win10打开资源管理器默认显示的是快速访问,并不是显示的分区.下面是修改步骤. 1.按Win+E打开资源管理器,点击[查 ...
- 【CF582E】Boolean Function 树形DP+FWT
[CF582E]Boolean Function 题意:给你一个长度为n的表达式,其中未知数有A,B,C,D和?,运算有&和|和?(表达式中用括号确定了唯一的运算顺序).?代表A,B,C,D或 ...
- 离线安装 Android 4.0 SDK
现在 4.0 的SDK已经可以下载, 开发者应该立刻去下载安装最新的SDK,然后打开4.0的模拟器 在上面测试自己的程序是否能够正常运行. 对于下载SDK比较慢的用户, 可以直接使用其他下载工具(比如 ...
- tsm 存放磁带到带库
1 磁带从带库中取放操作 1.1 checkout 磁带 查询checkout命令参数remove默认为yes 1.单盘磁带举例 #查看存储池 tsm>q stgpool f=d ts ...