解决方案 »
- 获取路径问题
- jsp与flash这间传值问题,急
- 怎么jsp直连可以连接SQL2000,桥接就不行呢??
- java如何做文件下载?
- 我在http://www.mycodes.net/soft/1566.htm下载到《NTsky留言本v1.2》代码,我看了3天了,还没找到数据库连接池名字是在哪里设置的。请各
- WebNMS是干什么用的啊???
- spring 事物造成getHibernateTemplate().save()无法执行
- 怎样使xxx.jsp?id=1&name=jjj 中的id,name的参数进行编码呢?
- 急!有会(Calendar)日历操作的吗?
- 在jbuilder中,jsp 页面 调试问题?
- 新人求助!百度说是关键字冲突但是不知道哪里冲突了
- 跪求一个xsd文件
检查下,新的验证码出来后,怎么存放的?有没有放进session中,替换老的验证码
看看项目中session的存取数据跟你的单独网页的session有什么差异
或者 在项目中打断点,从验证码产生,放进session开始,跟踪一下session中的验证码
在验证码生成页面就已经将图片保存进去了啊,但就是显示的时候session还是上一个
<%!
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-catch");
response.setDateHeader("Expires",0);
//在内存中创建图象
int width = 150;
int height = 50;
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("Tines Nev Roman",Font.PLAIN,30));
//随机产生干扰线
g.setColor(getRandColor(160,200));
for(int i = 0; i < 255; i++){
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
}
//随机产生认证码,4位数字
String sRand = "";
for(int i = 0; i < 4; i++){
String rand = String.valueOf(random.nextInt(10));
sRand += rand;
//将认证码显示到图象中
g.setColor(new Color(20 + random.nextInt(110),20 + random.nextInt(110),20 + random.nextInt(110)));
g.drawString(rand,30*i+6,35);
}
session.setAttribute("rCode",sRand);
//图像生效
g.dispose();
//输出图像到页面
ImageIO.write(image,"JPEG",response.getOutputStream());
out.clear();
out = pageContext.pushBody();
%>
这是前台显示调用验证码图片代码
<label for="image">验证码</label>
<input type="text" id="image" name="image" placeholder="请输入验证码" style="width:200px;float:left;">
<span id="num" style="color:red"></span>
<%
String rand = (String)request.getSession().getAttribute("rCode");
String input = request.getParameter("rand");
%>
<%= rand %>
<a href="#"><img alt="看不清,点击换一张" src="image.jsp" style="float:right;margin-top:-5px;" onClick="this.src=this.src+'?';return false;" >
</a>中间那段Java就是我获取当前的session验证码
String rand = (String)request.getSession().getAttribute("rCode");
String input = request.getParameter("rand");
%>
<%= rand %>
session.setAttribute("rCode",sRand);
打印下验证码,看是多少?String rand = (String)request.getSession().getAttribute("rCode");
上面一行是后才存放的验证码吧,打印下验证码String input = request.getParameter("rand");
这一行代码是什么作用呢?
刚打印了一下,前台显示的验证码跟生成验证码是一样的,就是前台那里调用session总是慢一步
1.图片压缩输出response.setContentType("image/jpeg");
OutputStream ops = response.getOutputStream();
//write方法:将原始图片(image)使用
ImageIO.write(image, "jpeg", ops);
ops.close();2.jsp页面<h3>验证码:<h3/>
<img id="num" src="checkcode" />
<a href="javascript:;" onclick="document.getElementById('num').src = 'checkcode?'+Math.random()">换一张</a>src=“checkcode”中换成你在xml中配置的生成验证码的servlet
少了HttpSession session =request.getSession();没报错?
1. 你的页面输出验证码明文的时候,你的新验证码还没有被生成,因为图片时在HTML页面加载后才访问的,也就是说你已经把验证码输出到页面了才又去访问的验证码生成功能,所以不论你怎么做,显示的都肯定是上一次的。
2.给你的建议是单独做一个页面用于显示后台验证码,该页面在验证码图片显示完成后你手动刷新下就行了。