public class ImageEnsure {
public ImageEnsure(){ } private char mapTable[]={
'A','B','C','D','E','F',
'G','H','I','J','K','L',
'M','N','O','P','Q','R',
'S','T','U','V','W','X',
'Y','Z','0','1','2','3',
'4','5','6','7','8','9'}; public String getEnsure(int width,int height,OutputStream os){
if(width<=0)width=60;
if(height<=0)height=20; BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
//获取图形上下文
Graphics g=image.getGraphics();
//设定背景颜色
g.setColor(new Color(0xDCDCDC));
g.fillRect(0, 0, width, height);
//画边框
g.setColor(Color.black);
g.drawRect(0, 0, width-1, height-1);
//取随机产生的认证码
String strEnsure="";
//4代表4位验证码
for(int i=0;i<4;++i){
strEnsure+=mapTable[(int)(mapTable.length*Math.random())];
}
//将认证码显示到图像中
g.setColor(Color.red);
g.setFont(new Font("Atlantic Inline",Font.PLAIN,18));
String str=strEnsure.substring(0,1);
g.drawString(str, 8, 17); str=strEnsure.substring(1,2);
g.drawString(str, 20, 15);
str=strEnsure.substring(2,3);
g.drawString(str, 35, 18); str=strEnsure.substring(3,4);
g.drawString(str, 45, 15);
//随机产生100个干扰点
Random rand=new Random();
for(int i=0;i<100;i++)
{
int x=rand.nextInt(width);
int y=rand.nextInt(height);
g.drawOval(x, y, 1, 1);
}
//释放图形上下文
g.dispose();
try{
//输出图像到页面
ImageIO.write(image, "JPEG", os);
}catch(IOException e){
return "";
}
return strEnsure;
}
}
//调用javabean的页面
<jsp:useBean id="image" scope="page" class="myBean.ImageEnsure"/>
<%
String str=image.getEnsure(0,0,response.getOutputStream());
session.setAttribute("strEnsure",str);
%> 我把session里的strensure读出来看,发觉和显示的不一样,仔细看,session里存的是上一个显示出来的验证码,也就是说图片显示的是“1234”,刷新一次页面后显示“5678”,但session里的是1234,存的是上次显示的码
public ImageEnsure(){ } private char mapTable[]={
'A','B','C','D','E','F',
'G','H','I','J','K','L',
'M','N','O','P','Q','R',
'S','T','U','V','W','X',
'Y','Z','0','1','2','3',
'4','5','6','7','8','9'}; public String getEnsure(int width,int height,OutputStream os){
if(width<=0)width=60;
if(height<=0)height=20; BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
//获取图形上下文
Graphics g=image.getGraphics();
//设定背景颜色
g.setColor(new Color(0xDCDCDC));
g.fillRect(0, 0, width, height);
//画边框
g.setColor(Color.black);
g.drawRect(0, 0, width-1, height-1);
//取随机产生的认证码
String strEnsure="";
//4代表4位验证码
for(int i=0;i<4;++i){
strEnsure+=mapTable[(int)(mapTable.length*Math.random())];
}
//将认证码显示到图像中
g.setColor(Color.red);
g.setFont(new Font("Atlantic Inline",Font.PLAIN,18));
String str=strEnsure.substring(0,1);
g.drawString(str, 8, 17); str=strEnsure.substring(1,2);
g.drawString(str, 20, 15);
str=strEnsure.substring(2,3);
g.drawString(str, 35, 18); str=strEnsure.substring(3,4);
g.drawString(str, 45, 15);
//随机产生100个干扰点
Random rand=new Random();
for(int i=0;i<100;i++)
{
int x=rand.nextInt(width);
int y=rand.nextInt(height);
g.drawOval(x, y, 1, 1);
}
//释放图形上下文
g.dispose();
try{
//输出图像到页面
ImageIO.write(image, "JPEG", os);
}catch(IOException e){
return "";
}
return strEnsure;
}
}
//调用javabean的页面
<jsp:useBean id="image" scope="page" class="myBean.ImageEnsure"/>
<%
String str=image.getEnsure(0,0,response.getOutputStream());
session.setAttribute("strEnsure",str);
%> 我把session里的strensure读出来看,发觉和显示的不一样,仔细看,session里存的是上一个显示出来的验证码,也就是说图片显示的是“1234”,刷新一次页面后显示“5678”,但session里的是1234,存的是上次显示的码
解决方案 »
- 是爬虫里的代码怎么理解,刚开始学习
- Tomcat中Session的外观模式
- 我在JSP中为何不能使用absolute()方法
- [tomcat]以往配置了都可以访问,为什么现在不行?
- 求有关oracle httpserver遇到中文冷僻字(GBK)的解决方案,急在线等待....
- JB7下中文字符问题,十万火急!SOS
- 熟悉struts2 的原理的进,我在做一个类似struts2的控制器
- 关于mvc模式的问题?急
- hibernate操作数据库从一端取多
- 请教各位html中jsp的javascript执行问题
- 过滤HTML中新闻标题的正规表达式该怎么写?
- JMail怎么发出去,在局域网,就宿舍,连着路由器?
out.println("此次产生的sessionId为:"+session.getId());
out.println("<br>session.strEnsure:"+session.getAttribute("strEnsure"));不过你的代码在firefox上跑出一堆乱码
String str=new String(image.getEnsure(0,0,response.getOutputStream()));
session.setAttribute("strEnsure",str);
%>