关于来了解相关的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. iBatis系列之三

    iBatis和Hibernate最大差别就是在于iBatis没有严格的和具体的表做关联:而是将结果集和DAO做关联. iBatis的SqlConfig.xml配置一个properties文件,其实可以 ...

  2. Unity给力插件之MegaFiers

    这是一个关于网格变形的插件.其中有非常多的功能. 这是它的API地址:http://www.west-racing.com/mf/ 花了2天的时间实践并整理了其中绝大多数的功能,只有一些关于特殊格式的 ...

  3. 二师兄VPN加速器

    http://www.2-vpn2.org/home.action?ic=B003CC4C47

  4. 成都OpenPart——DevOps专场活动参与感

    今天下午去参加了成都OpenPart——DevOps专场,感觉很好. 题外话: 回想一下,工作将近四年了,这是第一次参加类似的活动.自从结婚带了小孩以后,就基本上每个周末奔波工作和家里两个城市之间,这 ...

  5. bzoj 4031: [HEOI2015]小Z的房间 轮廓线dp

    4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 98  Solved: 29[Submit][Status] ...

  6. 为什么 API 监控对于任何业务来说都重要?

    对于商务运算来说一个比较稳定的趋势在于对 API 日渐增长的依赖性,几乎每一个代码级交互过程都会调用 API 来收集数据或触发某些关键过程.没有 API ,你将无法与同伴进行文件交流,没有 API , ...

  7. Redhat 安装Oracle DBI和DBD

    Redhat 安装DBI和ORACLE DBD tar -zxvf DBI-1.616.tar.gz cd DBI-1.616 perl Makefile.PL make make install 2 ...

  8. C++ Prime:函数

    局部静态对象: 某些时候,有必要令局部变量的生命周期贯穿函数调用及之后的时间.可以将局部变量定义成static类型从而获得这样的对象.局部静态对象在程序执行路径第一次经过对象定义语句时初始化,并且直到 ...

  9. linux使用crontab -e 遇到No space left on device

    今天用linux的crontab -e编辑定时脚本的时候.遇到No space left on device的错误. 网上找了半天终于知道原因了,昨天晚上我的一个任务因为路径没写对,到时crontab ...

  10. Linux 下报错:A Java RunTime Environment (JRE) or Java Development Kit (JDK) must解决方案

    一.报错环境:在Linux mint下,前几天还用得很好的的eclipse,今天开机不知为什么这样. Linux 下报错:A Java RunTime Environment (JRE) or Jav ...