关于来了解相关的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. web2py相关-------------------------------(一)初遇

    在第一次换工作的时候,希望转行 做编程,就面试了很多家,很多人问我 懂不懂html 书写,我非常诚实的告诉他们不会. 当然那时我很天真的认为,只要自己愿意学习这些都不是问题,事实证明人的学习能力是很快 ...

  2. [原博客] BZOJ 2725 : [Violet 6]故乡的梦

    这个题在bzoj上好像是个权限题,想做的可以去Vani的博客下载测试数据.这里有题面. 简单叙述一下题意:给你一个n个点.m条边的带权无向图,S点和T点,询问Q次删一条给定的边的S-T最短路. 其中  ...

  3. JavaWeb学习总结(一)——JavaWeb开发入门(转载)

    转载自http://www.cnblogs.com/xdp-gacl/p/3729033.html感谢孤傲苍狼的分享. 一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意 ...

  4. 系统调用与API的区别

    整理自系统调用与API的区别 1.为什么用户程序不能直接访问系统内核模式提供的服务? 答:在linux中,将程序的运行空间分为内核与用户空间(内核态和用户态),在逻辑上它们之间是相互隔离的,因此用户程 ...

  5. 练习PYTHON协程之GREENLET

    STACKLESS就算了,了解一下原理即可. GREENLET,GEVENT,EVENTLET这些,比较好测试,还是都 撸一次,得个印象. 测试代码都是网上的大路货. from greenlet im ...

  6. 【POJ 2987】Firing (最小割-最大权闭合子图)

    裁员 [问题描述] 在一个公司里,老板发现,手下的员工很多都不务正业,真正干事员工的没几个,于是老板决定大裁员,每开除一个人,同时要将其下属一并开除,如果该下属还有下属,照斩不误.给出每个人的贡献值和 ...

  7. bzoj1758

    好题显然是分数规划,二分答案之后我们要找是否存在一条边数在[l,u]长度和为正的路径可以用树的分治来解决这个问题我们假设当前处理的是过点root的路径显然我们不好像之前男人八题里先算出所有答案,然后再 ...

  8. C#实例:5个.net经典例子(窗体与界面设计)

    实例001  带历史信息的菜单 实例说明 在开发图纸管理软件时,要求在菜单上记录用户最近打开的档案或图纸,以方便下次使用.如图1.1所示,单击“文件”菜单下的“打开文件”子菜单,打开需要查阅的图纸.下 ...

  9. POJ_2104_Kth_(主席树)

    描述 http://poj.org/problem?id=2104 给出一个n个数的数列,m次询问,每次询问求区间[l,r]中第k小的数,无修改操作. K-th Number Time Limit: ...

  10. 最短路(数据处理):HDU 5817 Ice Walls

    Have you ever played DOTA? If so, you may know the hero, Invoker. As one of the few intelligence car ...