关于来了解相关的api

BufferedImage(int width, int height, int imageType) 构造一个类型为预定义图像类型之一的 BufferedImage

BufferedImage 描述具有可访问图像数据缓冲区的Image 字段摘要(TYPE_INT_RGB)表示一个图像,它具有合成整数像素的 8 位 RGB 颜色分量。

getGraphics() 此方法返回 Graphics2D(Graphics2D 类扩展 Graphics 类,以提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制。它是用于在 Java(tm) 平台上呈现二维形状、文本和图像的基础类。)

jquery 相关api :post请求异步更新

实现效果如图

首相是先关的html代码:

<html>

<head>
<meta charset="utf-8">
<title>欢迎注册</title>
<script type="text/javascript" src="js/jquery-1.10.1.js"></script>
<style>
#main {
width:580px;
height: 400px;
margin: auto;
margin-top: 200px;
} #main input {
margin-top: 10px;
} .btn {
width: 80px;
height: 30px;
background: green;
color: white;
font-size: 18px;
}
form{
width:400pxs;
}
#name{
display: none;
}
#uId{
display: none;
}
</style>
</head>
<script type="text/javascript"> $(function(){
$("#userName").change(function(){
var mreg = /^[\u4E00-\u9FA5]{2,4}$/;
if(!mreg.test($("#userName").val()))
{
$("#name").css('display','inline');
$("#btns").attr('disabled',true);
$("#btns").css('background','grey'); } else{
$("#name").css('display','none');
$("#btns").attr('disabled',false);
$("#btns").css('background','green');
} var val=$("#userName").val();
val=$.trim(val); //去除空格
if (val != null) {
var url="/ShoppingCar/valiateUserName";
var args={"userName":val,"time":new Date()};
$.post(url, args, function(data) {
$("#exist").html(data);
});
}
}) $("#code").change(function() {
var value=$("#code").val();
value=$.trim(value);
if (value != null) {
var url="/ShoppingCar/CodeCheck";
//加上时间,防止缓存,这里就相当于发送一个post请求,和表单请求的格式相近,一个变量名,一个值,成对发送
var args={"code":value,"time":new Date()};
//发送请求,返回的内容封装在data中
$.post(url, args, function(data) {
$("#checkcode").html(data);
});
}
})
}); function changeCode() {
var imgNode = document.getElementById("vimg");
//重新加载验证码,达到刷新的目的
imgNode.src = "/ShoppingCar/AuthImageServlet?t=" + Math.random(); // 防止浏览器缓存的问题
}
</script>
<body> <div id="main">
<h2 style="margin-left: 40px;">请填写以下信息</h2>
<form action="/ShoppingCar/RegisterServlet" method="post">
账 号:
<input type="text" name="userName" id="userName" /><span id="name" style="color: red"> 名字只能是中文</span>
 <span id="exist"></span>
<br/> 密 码:
<input type="password" name="password" />
<br />
验证码:
<input type="text" name="code" id="code"> <span id="checkcode" ></span><br>
<img id="vimg" title="点击更换" onclick="changeCode();" src="/ShoppingCar/AuthImageServlet" style="margin-left: 99px;margin-top: 10px;"><br/>
<p style="margin-top:10px;margin-left:42px;">
<input type="submit" value="注册" style="margin:auto;" class="btn" id="btns" />
<a href="/ShoppingCar/login.html"><input type="button" value="登入" style="margin:auto;" class="btn" /></a>
</p>
</form>
</div> </body> </html>

  接下来是服务器端生成验证码的servlet

package gqx.shoppingcar.testservlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random; import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; public class AuthImageServlet extends HttpServlet { private static final String CONTENT_TYPE = "text/html; charset=gb2312";
//设置字母的大小,大小
private Font mFont = new Font("Times New Roman", Font.PLAIN, 24);
public void init() throws ServletException
{
super.init();
}
//指定范围内生成rgb颜色
Color getRandColor(int fc,int bc)
{
Random random = new Random();
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+random.nextInt(bc-fc);
int g=fc+random.nextInt(bc-fc);
int b=fc+random.nextInt(bc-fc);
return new Color(r,g,b);
} public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
//no-cache指示请求或响应消息不能缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
//表明生成的响应是图片
response.setContentType("image/jpeg"); int width=100, height=25;
//创建一个图片缓冲区
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//获取图片处理对象
Graphics g = image.getGraphics();
//填充背景色
Random random = new Random();
g.setColor(getRandColor(200,250));
g.fillRect(1, 1, width-1, height-1);
//设定边框颜色
g.setColor(new Color(102,102,102));
g.drawRect(0, 0, width-1, height-1); //画随机线
for (int i=0;i<15;i++)
{
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int xl = random.nextInt(6) + 1;
int yl = random.nextInt(12) + 1;
g.drawLine(x,y,x + xl,y + yl);
} //从另一方向画随机线
for (int i = 0;i < 10;i++)
{
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int xl = random.nextInt(12) + 1;
int yl = random.nextInt(6) + 1;
g.drawLine(x,y,x - xl,y - yl);
} //写入文字
g.setFont(mFont);
//生成随机数,并将随机数字转换为字母
String sRand="";
for (int i=0;i<4;i++)
{
int itmp = random.nextInt(26) + 65;
char ctmp = (char)itmp;
sRand += String.valueOf(ctmp);
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
//使用此图形上下文的当前字体和颜色绘制由指定 string 给定的文本。
//void drawString(String str, int x,int y) str - 要绘制的 string。 x - x 坐标。 y - y 坐标
g.drawString(String.valueOf(ctmp),22*i+10,22);
} HttpSession session = request.getSession(true);
session.setAttribute("rand",sRand);
g.dispose();
//使用支持给定格式的任意 ImageWriter 将一个图像写入 OutputStream。
ImageIO.write(image, "JPEG", response.getOutputStream());
}
}

在一个是响应页面发送来的数据,同时做出判断,将结果返回给显示层

package gqx.shoppingcar.testservlet;

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;
import javax.servlet.http.HttpSession; public class CodeCheck extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String code=request.getParameter("code");
String result="";
HttpSession session=request.getSession();
System.out.println(code);
String value=(String)session.getAttribute("rand");
if (!code.equals(value)) {
result="<font color='red'>验证码错误</font>";
System.out.println("error");
}else { }
response.setContentType("text/html;charset=UTF-8");
System.out.println(result);
response.getWriter().print(result);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
} }

至于名字的检验大同小异

package gqx.shoppingcar.testservlet;

import gqx.shoppingcar.service.impl.SerOperate;

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 valiateUserName extends HttpServlet { /**
* 处理ajax验证名字是否已经存在
*/
private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name=request.getParameter("userName");
SerOperate operate =new SerOperate();
String result=null;
if (operate.exist(name)) {
result="<font color='red'>该用户名已经被使用</font>"; }else {
result=" ";
}
response.setContentType("text/html;charset=UTF-8");
response.getWriter().print(result);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
} }

此处的SerOperate是我在MVC的Service层处理的接口实现类。具体就不写了,会在后面的购物车代码中全部写上去。

Java验证码和ajax判断的更多相关文章

  1. Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求   Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java ...

  2. java端拦截器判断客户的的请求是否是ajax请求

    java端拦截器判断客户的的请求是否是ajax请求 发表于 2014-08-22 23:38:08 普通请求与ajax请求的报文头不一样,通过如下 String requestType = reque ...

  3. springMVC+Java验证码完善注册功能

    这篇文章简单的写了一个java验证码,为之前写过的springMVC注册功能加上验证码,验证码的作用就不多说了,防止机器人程序恶意注册什么的.. 其中User.java,加上了password和cod ...

  4. Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 >>>>>>>>>>>>>>&g ...

  5. java制作验证码(java验证码小程序)

    手动制作java的验证码 Web应用验证码的组成: (1)输入框 (2)显示验证码的图片 验证码的制作流程: 生成验证码的容器使用 j2ee的servlet 生成图片需要的类: (1) Buffere ...

  6. 第88节:Java中的Ajax和ASP.NET和TCP/IP 教程和JSON

    第88节:Java中的Ajax和Jquery ajax是什么?有什么用?原理,怎么用? ajax是asynchronous javascript and xml(异步javascript和xml),是 ...

  7. Java 验证码、二维码

    Java 验证码.二维码 资源 需要:   jelly-core-1.7.0.GA.jar网站:   http://lychie.github.io/products.html将下载下来的 jelly ...

  8. Java学习-030-JSON 之四 -- 判断 JSONObject 是否包含键值对

    前文对获取 JSON 数据封装方法,使之可通过类似于 cssSelector 的方法获取 JSON 数据,使获取数据变得简单.敬请参阅:模仿 cssSelector 封装读取 JSON 数据方法. 在 ...

  9. JAVA 中两种判断输入的是否是数字的方法__正则化_

    JAVA 中两种判断输入的是否是数字的方法 package t0806; import java.io.*; import java.util.regex.*; public class zhengz ...

随机推荐

  1. Python冒泡排序

    冒泡排序,顾名思义,按照一定的规则,把数据一直排下去 直接上代码 import random def bubblesort(data): for i in range(len(data)-1,1,-1 ...

  2. vi 编辑器的使用

    1)    vi的自动对齐功能   我从window的网页上拷贝了一段代码到vi中,结果是不对齐的.见下图 此时为了对齐,我的做法是: ESC-v  进入视图模式,然后全选 再然后直接按 = 号. 然 ...

  3. STM32学习内容和计划

    一.STM32学习内容(流程) 1.学习STM32开发流程 ①MDK使用.建立工程.调试等 ②库开发方法 2.学习STM32常用外设开发 ①GPIO ②中断 ③定时器 ④串口 ⑤CAN 3.学习STM ...

  4. 启动Tomcat出现Using CATALINA_BASE

    有一次命令行启动Tomcat的时候,出现: Using CATALINA_BASE: "D:\apache-tomcat-6.0.35"Using CATALINA_HOME: & ...

  5. OneAPM Cloud Test——系统性能监控神器

    2015 年 8 月,OneAPM 推出了一款系统性能监控产品--Cloud Test,产品上线以来以「两低一高」的特点迅速成为市场增长率最快的一匹黑马.「两低一高」,即低使用成本.低学习成本以及高服 ...

  6. 基于Delphi的Socket I/O模型全接触 good

    老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系.他们的信会被邮递员投递到他们的信箱里. 这和Socket模型非常类似.下面我就以老陈接收信件为例讲解Socket I/O模型. 一:se ...

  7. 窗口的子类化与超类化——子类化是窗口实例级别的,超类化是在窗口类(WNDCLASS)级别的

    1. 子类化 理论:子类化是这样一种技术,它允许一个应用程序截获发往另一个窗口的消息.一个应用程序通过截获属于另一个窗口的消息,从而实现增加.监视或者修改那个窗口的缺省行为.子类化是用来改变或者扩展一 ...

  8. bzoj1093

    首先缩点然后半连通其实就是缩点后节点数最多的链注意这里一定是一条链才一定是半连通然后重建图拓扑排序上做dp即可 type node=record po,next:longint; end; ..] o ...

  9. UVA_11178_Morley's_Theorem_(计算几何基础)

    描述 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=23&pag ...

  10. 【转】你应该知道的十个VirtualBox技巧与高级特性

    原文网址:http://www.searchvirtual.com.cn/showcontent_76463.htm VirtualBox集成的许多功能你可能从来没有使用过,即使你经常用它来运行虚拟机 ...