java 网站验证码 验证码功能是怎么做的? 请提供一点思路,当然有源码最好。怎么存到session 然后对比啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一、index.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"><title>Insert title here</title><script type="text/javascript"> function reloadImage(){ document.getElementById("identity").src = "IdentityServlet?ts="+new Date().getTime(); }</script></head><body><img alt="" src="IdentityServlet" id="identity"><input type="button" value="换个图片" onclick="reloadImage();"></body></html>二、IdentityServletpackage cn.bddy;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;/** * Servlet implementation class IdentityServlet */public class IdentityServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final char[] CHARS = { '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; private static Random random = new Random(); // 返回随机字符串 public static String getRandomString() { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < 6; i++) { buffer.append(CHARS[random.nextInt(CHARS.length)]); } return buffer.toString(); } // 返回背景色 public static Color getRandomColor() { return new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)); } // 返回某颜色的反色 public static Color getReverseColor(Color c) { return new Color(255 - c.getRed(), 255 - c.getGreen(), 255 - c.getBlue()); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/jpeg");// 设置输出类型,必须的 String randomString = getRandomString();// 获取随机字符串 request.getSession().setAttribute("randomString", randomString); int width = 100;// 图片宽度 int height = 30;// 图片高度 Color color = getRandomColor();// 随即颜色,用于背景色 Color reverse = getReverseColor(color);// 反色,用于前景色 BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//创建一个彩色图片 Graphics2D g = bi.createGraphics();//获取绘图对象 g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16));//设置字体 g.setColor(color);//设置颜色 g.fillRect(0, 0, width, height);//绘制背景 g.setColor(reverse);//设置颜色 g.drawString(randomString, 18, 20); //画最多100个噪音点 for(int i=0,n=random.nextInt(100);i<n;i++){ g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1); } ServletOutputStream out = response.getOutputStream(); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(bi);//对图片进行编码 out.flush();//输出到客户端 } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub }}如果不知道怎么放到你的项目中我可以把这个验证码的项目发给你 要的话留下邮箱 <%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*;,javax.imageio.*" %><!---------------------------------------- 算出随机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); }//---------------------页面不缓存 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache_Control","no-cache"); response.setDateHeader("Expires",0);//---------------------------内存中创建一个60*20大小图形 int width=60,height=20; 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(0,0,width,height); //填充图形 g.setFont(new Font("Times New Roman",Font.PLAIN,18));// 设置图形字体 //g.setColor(new Color());//-----------------|图形边框 //g.drawRect(0,0,width-1,height-1);----------|颜色 for(int i=0;i<155;i++) { int x= random.nextInt(width); int y= random.nextInt(width); int xl= random.nextInt(width); int yl= random.nextInt(width); g.grawLine(x,y,x+xl,y+yl); // GRAWLINE 功能是X,Y XL,YL 划线 循环一百五十五条 = =..... 好多.... 待效果..... } String sRand=""; for(int i=0; i<4,i++){ String rand=String.valueOf(random.nextInt(10));//------------|随机产生0-9的数字并强制转换为字符 sRand+=rand;//-----------------------------------------------|再将字符链接到一起 g.setColor(new Color(20+random.nextInt(110),40+random.nextInt(110),60+random.nextInt(110))); //随机生成颜色 不要浅色 颜色也最好不要相同 ,所以取值区间不同 g.drawString(rand,13*i+6,16); //将验证码计算出并显示到图像中 (Strign字符,X坐标,Y坐标,锚点) 啥时锚点? } session.setAttribute("rand",sRand); //将验证码存到SESSION 然后把它扔回去做验证 g.dispose(); ImageIO.write(image,"JPEG",response,getOutputStrem()); //输出图像到页面%> 这个代码我有,我也会引用,但是我不会取出来比较 session.setAttribute("rand",sRand); //将验证码存到SESSION 然后把它扔回去做验证 这个该怎么取呢? String 变量=(String)session.getAttribute("session变量"); 在表单的POST页里判断用户输入值和验证码是否相符 session 中取到的值第一次为null, 以后每次都是上次存的,怎么解决呢?不用说废话,直接上解决方法就好。 不可能,大部是可以用的。这其实就是一个用servlet或jsp来画图罢了。然后显示出来。存session中是很容易的事。session.setAttribute() 方法来完成。 servlet中的destroy()方法是自动调用的嘛? hibernate 根据对应关系创建数据库出现问题跪求解决! myeclipse+tomcat哪里可以下载 你们在干啥呢?各位java-web开发的兄弟姐妹们。 时间控件MY97的问题 图片``急用!!!! 急!关于下载文件问题!不知道怎么会事情! 如何在tomcat下配置连接池? 连接池的名字叫什么哦? [求救]前辈高人帮俺看看 CXF restful Webservice 自定义异常处理无反应 如何根据用户权限给用户显示不同内容 如何用遍历表机构形成树ztree
<%@ 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">
<title>Insert title here</title>
<script type="text/javascript">
function reloadImage(){
document.getElementById("identity").src = "IdentityServlet?ts="+new Date().getTime();
}
</script>
</head>
<body>
<img alt="" src="IdentityServlet" id="identity">
<input type="button" value="换个图片" onclick="reloadImage();">
</body>
</html>二、IdentityServlet
package cn.bddy;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;/**
* Servlet implementation class IdentityServlet
*/
public class IdentityServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final char[] CHARS = { '2', '3', '4', '5', '6', '7', '8',
'9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M',
'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
private static Random random = new Random(); // 返回随机字符串
public static String getRandomString() {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < 6; i++) {
buffer.append(CHARS[random.nextInt(CHARS.length)]);
}
return buffer.toString();
} // 返回背景色
public static Color getRandomColor() {
return new Color(random.nextInt(255), random.nextInt(255),
random.nextInt(255));
} // 返回某颜色的反色
public static Color getReverseColor(Color c) {
return new Color(255 - c.getRed(), 255 - c.getGreen(),
255 - c.getBlue());
} protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("image/jpeg");// 设置输出类型,必须的
String randomString = getRandomString();// 获取随机字符串
request.getSession().setAttribute("randomString", randomString);
int width = 100;// 图片宽度
int height = 30;// 图片高度
Color color = getRandomColor();// 随即颜色,用于背景色
Color reverse = getReverseColor(color);// 反色,用于前景色
BufferedImage bi = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);//创建一个彩色图片
Graphics2D g = bi.createGraphics();//获取绘图对象
g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16));//设置字体
g.setColor(color);//设置颜色
g.fillRect(0, 0, width, height);//绘制背景
g.setColor(reverse);//设置颜色
g.drawString(randomString, 18, 20);
//画最多100个噪音点
for(int i=0,n=random.nextInt(100);i<n;i++){
g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);
}
ServletOutputStream out = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(bi);//对图片进行编码
out.flush();//输出到客户端
} protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}}
如果不知道怎么放到你的项目中我可以把这个验证码的项目发给你 要的话留下邮箱
<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*;,javax.imageio.*" %>
<!---------------------------------------- 算出随机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);
}
//---------------------页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache_Control","no-cache");
response.setDateHeader("Expires",0);
//---------------------------内存中创建一个60*20大小图形
int width=60,height=20;
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(0,0,width,height); //填充图形
g.setFont(new Font("Times New Roman",Font.PLAIN,18));// 设置图形字体
//g.setColor(new Color());//-----------------|图形边框
//g.drawRect(0,0,width-1,height-1);----------|颜色
for(int i=0;i<155;i++)
{
int x= random.nextInt(width);
int y= random.nextInt(width);
int xl= random.nextInt(width);
int yl= random.nextInt(width);
g.grawLine(x,y,x+xl,y+yl); // GRAWLINE 功能是X,Y XL,YL 划线 循环一百五十五条 = =..... 好多.... 待效果.....
}
String sRand="";
for(int i=0; i<4,i++){
String rand=String.valueOf(random.nextInt(10));//------------|随机产生0-9的数字并强制转换为字符
sRand+=rand;//-----------------------------------------------|再将字符链接到一起
g.setColor(new Color(20+random.nextInt(110),40+random.nextInt(110),60+random.nextInt(110))); //随机生成颜色 不要浅色 颜色也最好不要相同 ,所以取值区间不同
g.drawString(rand,13*i+6,16); //将验证码计算出并显示到图像中 (Strign字符,X坐标,Y坐标,锚点) 啥时锚点?
}
session.setAttribute("rand",sRand); //将验证码存到SESSION 然后把它扔回去做验证
g.dispose();
ImageIO.write(image,"JPEG",response,getOutputStrem()); //输出图像到页面
%>
session.setAttribute("rand",sRand); //将验证码存到SESSION 然后把它扔回去做验证
这个该怎么取呢?
String 变量=(String)session.getAttribute("session变量");
在表单的POST页里判断用户输入值和验证码是否相符
不用说废话,直接上解决方法就好。
这其实就是一个用servlet或jsp来画图罢了。然后显示出来。
存session中是很容易的事。session.setAttribute() 方法来完成。