关于来了解相关的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分割sql文件

    之前用joomla帮一学校做了个网站,然后要部署到他们到服务器上,他们只提供了sftp和phpmyadmin的账号,上传网站文件倒是挺顺利的,但后来用phpmyadmin导入mysql数据就遇到问题了 ...

  2. Leetcode 解题 Longest Substring without repeating charcater python

    原题: Given a string, find the length of the longest substring without repeating character For example ...

  3. java中抽象类与接口的区别

    1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系.但是,一个类却可以实现多个interface. 2.在abstract class 中可以有自己 ...

  4. STM32内存映射

    一.概述 STM32内存映射是STM32的架构的重要组成部分,不可或缺. 二.STM32内存映射图 1.内存映射图--摘自<CM3权威指南> 2.内存映射图--摘自<STM32F10 ...

  5. NotePad++更改背景颜色

    白色的编辑框看得眼睛不舒服,怎么样更改NotePad++的背景颜色使眼睛更舒服些? 1.设置--语言格式设置 2.设置背景色 “背景色”一栏,选择背景色颜色   “使用全局背景色”一栏要打上√,否则无 ...

  6. Jsop入门程序

    package com.baidu; import java.io.IOException; import org.jsoup.Jsoup;import org.jsoup.nodes.Documen ...

  7. bzoj 1209: [HNOI2004]最佳包裹 三维凸包

    1209: [HNOI2004]最佳包裹 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 160  Solved: 58[Submit][Status] ...

  8. PHP 判断是表单否有这个参数,如果没有则设置默认值

    <?php @$name = $_GET["name"]; if(isset($name)) { echo "name = " .$name; } els ...

  9. Hibernate 注解 没有加@Column一样会在数据库创建这些字段

    Hibernate 注解 没有加@Column一样会在数据库创建这些字段 如下一个注解类: package com.hyy.hibernate.one_to_many.domain; import j ...

  10. Android 模拟器上的127.0.0.1 localhost

    调试中通过android simulator模拟器链接localhost或者127.0.0.1,因为我在电脑上面建立了apache,我的代码大概就是URL url = new URL(urlStrin ...