- 浏览: 93903 次
- 来自: ...
文章分类
最新评论
-
juluren:
http://apidoc.cn/archives/47
java 导出excel并且针对海量数据进行处理 -
xiangsoftware:
不错.....
面试题 -
ranbo:
汗……关闭防火墙竟然好了。
mysql远程访问的设置 -
sunq1314:
我找到的 看能行不
--------------
默认状况下, ...
mysql远程访问的设置 -
feitianzi:
下载不了!
jsf自带分页
1.思路:
页面上的验证码图片是servlet,采用jquery实现异步校验信息
2.所用到的文件
VerifyCodeServlet.java --用于生成图片的servlet
ResultServlet.java --用于校验验证码正确性的servlet
verifyCode.js --校验的js文件
jquery.js --jquery包里的源文件
verifyCode.jsp --页面
3.代码
VerifyCodeServlet.java
- import java.awt.Color;
- import java.awt.Font;
- import java.awt.Graphics2D;
- import java.awt.image.BufferedImage;
- import java.util.Random;
- import javax.imageio.ImageIO;
- import javax.servlet.ServletException;
- import javax.servlet.ServletOutputStream;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- public class VerifyCodeServlet extends HttpServlet {
- // 验证码图片的宽度。
- private int width = 60;
- // 验证码图片的高度。
- private int height = 20;
- // 验证码字符个数
- private int codeCount = 4;
- private int x = 0;
- // 字体高度
- private int fontHeight;
- private int codeY;
- char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
- 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
- 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
- /**
- * 初始化验证图片属性
- */
- public void init() throws ServletException {
- // 从web.xml中获取初始信息
- // 宽度
- String strWidth = this.getInitParameter("width");
- // 高度
- String strHeight = this.getInitParameter("height");
- // 字符个数
- String strCodeCount = this.getInitParameter("codeCount");
- // 将配置的信息转换成数值
- try {
- if (strWidth != null && strWidth.length() != 0) {
- width = Integer.parseInt(strWidth);
- }
- if (strHeight != null && strHeight.length() != 0) {
- height = Integer.parseInt(strHeight);
- }
- if (strCodeCount != null && strCodeCount.length() != 0) {
- codeCount = Integer.parseInt(strCodeCount);
- }
- } catch (NumberFormatException e) {
- }
- x = width / (codeCount + 1);
- fontHeight = height - 2;
- codeY = height - 4;
- }
- protected void service(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, java.io.IOException {
- // 定义图像buffer
- BufferedImage buffImg = new BufferedImage(width, height,
- BufferedImage.TYPE_INT_RGB);
- Graphics2D g = buffImg.createGraphics();
- // 创建一个随机数生成器类
- Random random = new Random();
- // 将图像填充为白色
- g.setColor(Color.WHITE);
- g.fillRect(0, 0, width, height);
- // 创建字体,字体的大小应该根据图片的高度来定。
- Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);
- // 设置字体。
- g.setFont(font);
- // 画边框。
- g.setColor(Color.BLACK);
- g.drawRect(0, 0, width - 1, height - 1);
- // 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
- g.setColor(Color.BLACK);
- for (int i = 0; i < 160; i++) {
- int x = random.nextInt(width);
- int y = random.nextInt(height);
- int xl = random.nextInt(12);
- int yl = random.nextInt(12);
- g.drawLine(x, y, x + xl, y + yl);
- }
- // randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
- StringBuffer randomCode = new StringBuffer();
- int red = 0, green = 0, blue = 0;
- // 随机产生codeCount数字的验证码。
- for (int i = 0; i < codeCount; i++) {
- // 得到随机产生的验证码数字。
- String strRand = String.valueOf(codeSequence[random.nextInt(36)]);
- // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
- red = random.nextInt(255);
- green = random.nextInt(255);
- blue = random.nextInt(255);
- // 用随机产生的颜色将验证码绘制到图像中。
- g.setColor(new Color(red, green, blue));
- g.drawString(strRand, (i + 1) * x, codeY);
- // 将产生的四个随机数组合在一起。
- randomCode.append(strRand);
- }
- // 将四位数字的验证码保存到Session中。
- HttpSession session = req.getSession();
- session.setAttribute("validateCode", randomCode.toString());
- // 禁止图像缓存。
- resp.setHeader("Pragma", "no-cache");
- resp.setHeader("Cache-Control", "no-cache");
- resp.setDateHeader("Expires", 0);
- resp.setContentType("image/jpeg");
- // 将图像输出到Servlet输出流中。
- ServletOutputStream sos = resp.getOutputStream();
- ImageIO.write(buffImg, "jpeg", sos);
- sos.close();
- }
- }
import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class VerifyCodeServlet extends HttpServlet { // 验证码图片的宽度。 private int width = 60; // 验证码图片的高度。 private int height = 20; // 验证码字符个数 private int codeCount = 4; private int x = 0; // 字体高度 private int fontHeight; private int codeY; char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; /** * 初始化验证图片属性 */ public void init() throws ServletException { // 从web.xml中获取初始信息 // 宽度 String strWidth = this.getInitParameter("width"); // 高度 String strHeight = this.getInitParameter("height"); // 字符个数 String strCodeCount = this.getInitParameter("codeCount"); // 将配置的信息转换成数值 try { if (strWidth != null && strWidth.length() != 0) { width = Integer.parseInt(strWidth); } if (strHeight != null && strHeight.length() != 0) { height = Integer.parseInt(strHeight); } if (strCodeCount != null && strCodeCount.length() != 0) { codeCount = Integer.parseInt(strCodeCount); } } catch (NumberFormatException e) { } x = width / (codeCount + 1); fontHeight = height - 2; codeY = height - 4; } protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException { // 定义图像buffer BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = buffImg.createGraphics(); // 创建一个随机数生成器类 Random random = new Random(); // 将图像填充为白色 g.setColor(Color.WHITE); g.fillRect(0, 0, width, height); // 创建字体,字体的大小应该根据图片的高度来定。 Font font = new Font("Fixedsys", Font.PLAIN, fontHeight); // 设置字体。 g.setFont(font); // 画边框。 g.setColor(Color.BLACK); g.drawRect(0, 0, width - 1, height - 1); // 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。 g.setColor(Color.BLACK); for (int i = 0; i < 160; i++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); g.drawLine(x, y, x + xl, y + yl); } // randomCode用于保存随机产生的验证码,以便用户登录后进行验证。 StringBuffer randomCode = new StringBuffer(); int red = 0, green = 0, blue = 0; // 随机产生codeCount数字的验证码。 for (int i = 0; i < codeCount; i++) { // 得到随机产生的验证码数字。 String strRand = String.valueOf(codeSequence[random.nextInt(36)]); // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。 red = random.nextInt(255); green = random.nextInt(255); blue = random.nextInt(255); // 用随机产生的颜色将验证码绘制到图像中。 g.setColor(new Color(red, green, blue)); g.drawString(strRand, (i + 1) * x, codeY); // 将产生的四个随机数组合在一起。 randomCode.append(strRand); } // 将四位数字的验证码保存到Session中。 HttpSession session = req.getSession(); session.setAttribute("validateCode", randomCode.toString()); // 禁止图像缓存。 resp.setHeader("Pragma", "no-cache"); resp.setHeader("Cache-Control", "no-cache"); resp.setDateHeader("Expires", 0); resp.setContentType("image/jpeg"); // 将图像输出到Servlet输出流中。 ServletOutputStream sos = resp.getOutputStream(); ImageIO.write(buffImg, "jpeg", sos); sos.close(); } }
ResultServlet.java
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class ResultServlet extends HttpServlet {
- /**
- * The doGet method of the servlet. <br>
- *
- * This method is called when a form has its tag value method equals to get.
- *
- * @param request the request send by the client to the server
- * @param response the response send by the server to the client
- * @throws ServletException if an error occurred
- * @throws IOException if an error occurred
- */
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doPost(request, response);
- }
- /**
- * The doPost method of the servlet. <br>
- *
- * This method is called when a form has its tag value method equals to post.
- *
- * @param request the request send by the client to the server
- * @param response the response send by the server to the client
- * @throws ServletException if an error occurred
- * @throws IOException if an error occurred
- */
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- response.setContentType("text/html;charset=utf-8");
- String validateC = (String) request.getSession().getAttribute("validateCode");
- String veryCode = request.getParameter("c");
- PrintWriter out = response.getWriter();
- if(veryCode==null||"".equals(veryCode)){
- out.println("验证码为空");
- }else{
- if(validateC.equals(veryCode)){
- out.println("验证码正确");
- }else{
- out.println("验证码错误");
- }
- }
- out.flush();
- out.close();
- }
- }
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ResultServlet extends HttpServlet { /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); String validateC = (String) request.getSession().getAttribute("validateCode"); String veryCode = request.getParameter("c"); PrintWriter out = response.getWriter(); if(veryCode==null||"".equals(veryCode)){ out.println("验证码为空"); }else{ if(validateC.equals(veryCode)){ out.println("验证码正确"); }else{ out.println("验证码错误"); } } out.flush(); out.close(); } }
verifyCode.js
- function changeImg(){
- var imgSrc = $("#imgObj");
- var src = imgSrc.attr("src");
- imgSrc.attr("src",chgUrl(src));
- }
- //时间戳
- //为了使每次生成图片不一致,即不让浏览器读缓存,所以需要加上时间戳
- function chgUrl(url){
- var timestamp = (new Date()).valueOf();
- url = url.substring(0,17);
- if((url.indexOf("&")>=0)){
- url = url + "×tamp=" + timestamp;
- }else{
- url = url + "?timestamp=" + timestamp;
- }
- return url;
- }
- function isRightCode(){
- var code = $("#veryCode").attr("value");
- code = "c=" + code;
- $.ajax({
- type:"POST",
- url:"resultServlet",
- data:code,
- success:callback
- });
- }
- function callback(data){
- $("#info").html(data);
- }
function changeImg(){ var imgSrc = $("#imgObj"); var src = imgSrc.attr("src"); imgSrc.attr("src",chgUrl(src)); } //时间戳 //为了使每次生成图片不一致,即不让浏览器读缓存,所以需要加上时间戳 function chgUrl(url){ var timestamp = (new Date()).valueOf(); url = url.substring(0,17); if((url.indexOf("&")>=0)){ url = url + "×tamp=" + timestamp; }else{ url = url + "?timestamp=" + timestamp; } return url; } function isRightCode(){ var code = $("#veryCode").attr("value"); code = "c=" + code; $.ajax({ type:"POST", url:"resultServlet", data:code, success:callback }); } function callback(data){ $("#info").html(data); }
verifyCode.jsp
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <script type="text/javascript" src="js/verifyCode.js"></script>
- <script type="text/javascript" src="js/jquery.js"></script>
- <title>test verify code</title>
- </head>
- <body>
- <input id="veryCode" name="veryCode" type="text"/>
- <img id="imgObj" alt="" src="verifyCodeServlet"/>
- <a href="#" onclick="changeImg()">换一张</a>
- <input type="button" value="验证" onclick="isRightCode()"/>
- <div id="info"></div>
- </body>
- </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="js/verifyCode.js"></script> <script type="text/javascript" src="js/jquery.js"></script> <title>test verify code</title> </head> <body> <input id="veryCode" name="veryCode" type="text"/> <img id="imgObj" alt="" src="verifyCodeServlet"/> <a href="#" onclick="changeImg()">换一张</a> <input type="button" value="验证" onclick="isRightCode()"/> <div id="info"></div> </body> </html>
相关推荐
CRC校验码生成器是实现这一功能的工具,通常以可执行文件(exe文件)的形式存在,用户可以简单地双击运行,对输入的报文进行加密和校验。 CRC的工作原理基于多项式除法,具体步骤如下: 1. **选择生成多项式**:...
**Modbus RTU CRC-16校验码生成器 CRC_Calc v0.3详解** 在工业自动化领域,数据通信的正确性和可靠性至关重要。其中,Modbus RTU(远程终端单元)是一种广泛应用的通信协议,它依赖于错误检测机制来确保数据在传输...
**Modbus RTU CRC-16校验码生成器CRC_Calc v0.2** Modbus RTU(Remote Terminal Unit)是一种广泛应用于工业自动化领域的通信协议,它基于串行通信,提供了一种设备间交换数据的标准方法。在Modbus RTU通信中,为了...
在压缩包中的"LRC校验码生成器"很可能是一个完整的程序,包括用户界面和上述的LRC计算逻辑,允许用户输入数据并生成相应的LRC校验码,或者对已有数据进行校验。 总之,LRC校验码是一种简单但有效的错误检测方法,...
用于汽车等机械第九位校验码的生成,只需要输入前8位和后8位即可。第九位可以自动生成,用于汽车等机械第九位校验码的生成,只需要输入前8位和后8位即可。第九位可以自动生成,
crc16校验码生成工具,MFC可执行程序
CRC校验码生成器,如"CRC校验码生成器(v0.2)",是一种方便的工具,能够帮助用户自动生成不同类型的CRC校验码。 该软件支持CRC7和CRC16两种常见的CRC校验类型。CRC7常用于一些简单的通信协议和存储设备,如早期的...
CRC校验码生成工具,CRC校验码生成工具,CRC校验码生成工具
CRC循环冗余校验码生成器 ,计算机网络课程作业,有bug,参考,共享。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...
MD5Check校验码生成器是一个实用工具,主要用于在MCU(微控制器)固件升级过程中验证文件的完整性和一致性。MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的数据转化为固定长度的...
标题中的"WinMD5 校验码生成器"是一款专为Windows操作系统设计的工具,它能够帮助用户轻松生成和验证MD5校验码。这个程序的主要功能包括: 1. 文件MD5生成:用户可以选择本地的任意文件,WinMD5会计算该文件的MD5...
如24 4D 73 67……等等数据输入后,自动计算异或校验和
CRC16校验码生成器delphi版,源码,带程序。本程序修改自网络资源。原程序有错误,因此进行了更正。使用Delphi 11.3编译通过,但理论上适合于几乎任何版本。此程序本人是用于串口通信中的数据校验,符合Modbus协议GB...
CRC&LRC;校验码生成器,可同时生成如下格式验证码: CRC16_CCITT CRC16_CCITT_FALSE CRC16_XMODEM CRC16_X25 CRC16_MODBUS CRC16_IBM CRC16_MAXIM CRC16_USB
将十六进制字符串中的数(长度不限)累加求和,取累加和最低一个字节,生成CheckSum校验码。例如十六进制字符串:01 03 00 10 00 4D 31 30 30 20 32 36 64 42 6D 20 56 31 2E 30,生成CheckSum校验码为92(十六进制)...
在VB中编写LRC校验码生成器,主要是通过编程实现LRC计算算法。LRC的基本原理是对传输数据的每一位进行累加,最后将结果取反得到校验码。具体步骤如下: 1. 初始化校验和:通常设置为0或某个特定值。 2. 遍历数据:...
LRC校验器,实现字符串的lrc校验功能,计算器形式的界面-LRC validator, to achieve string lrc checking function, form interface Calculator
这意味着在进行CRC计算时,会使用一个16位的寄存器,并且最终生成的校验码也是16位。 3. **CRC16的生成多项式**: - CRC16可以有多种不同的生成多项式,如CCITT(X^16 + X^12 + X^5 + 1)或MODBUS(X^16 + X^15 + ...
ModBus RTU校验码自动生成,我的上一篇博客讲解了ModBus RTU协议,如有不清楚的可以参考下。
这是一个本地使用的CRC16计算器,用于计算CRC16 校验码,多项式可以自定义,初始值可以自定义。程序启动时,输入框已填写了默认值。请您正确了解这些值的含义,并合理合法的使用。