解决方案 »

  1.   

    验证码干嘛写到后台啊,代码写到JSP里,输出一个img,在页面用img标签引一下你JSP页面就OK了,一般简单的验证码都是这样。
      

  2.   

    我是在后台写个类的,你说的“所以取出的时上一个,”,这个呢,我也试过了,你是不是在页面把session的值输出的?测试几次都是上个session的值,这个我也纠结的,不过提交测试是没有问题的。
      

  3.   

    很有意思,但是不应该。估计是你逻辑处理错误。
    session中你用什么标记变量是怎么处理的?
      

  4.   

    验证码不是在后台写代码生成验证图片,在jsp页显示吗?
      

  5.   

    jsp页面内:写一个验证吗,放在session内
    <%@page contentType="image/jpeg;charset=Utf-8"%>
    <%@page import="java.util.*,java.awt.*,java.awt.image.*,javax.imageio.*" %>
    <%@ page import="java.io.OutputStream" %>
    <html>
    <body>
    <%! 
    Color getRandColor(int fc,int bc)
    {
    Random rd=new Random();
    if(fc>255) fc=255;
    if(bc>255) bc=255;
    int red=fc+rd.nextInt(bc-fc);
    int green=fc+rd.nextInt(bc-fc);
    int blue=fc+rd.nextInt(bc-fc);
    return new Color(red,green,blue);
    }
     %>
     <% 
      Random r=new Random();
      response.addHeader("Pragma","No-cache");
      response.addHeader("Cache-Control","no-cache");
      response.addDateHeader("expires",0);  
      int width=90;
      int height=23;
    BufferedImage pic=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
    Graphics gc=pic.getGraphics();
    gc.setColor(getRandColor(200,250));
    gc.fillRect(0,0,width,height);
    String[] rNum ={"0","1","2","3","4","5","6","7","8","9","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","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"};
    int[] style = {Font.PLAIN,Font.BOLD,Font.ITALIC,Font.PLAIN+Font.BOLD,
    Font.BOLD+Font.ITALIC,Font.PLAIN+Font.ITALIC,Font.PLAIN+Font.BOLD+Font.ITALIC};
    gc.setColor(Color.WHITE);
    gc.drawLine(0,30,90,10);
    gc.setColor(getRandColor(160,200));
    for (int i=0;i<50;i++)    
    {
    int x = r.nextInt(width);    
    int y = r.nextInt(height);    
    int xl = r.nextInt(10);    
    int yl = r.nextInt(10);    
    gc.drawLine(x,y,x+xl,y+yl);    
    }
    gc.setColor(getRandColor(60,150));
    String rt = "";
    for(int i=0;i<4;i++){
    String temp = rNum[r.nextInt(62)];
    rt = rt+temp;
    gc.setFont(new Font("Times New Roman",style[r.nextInt(7)],15));
    gc.drawString(temp,5+i*15+r.nextInt(10),10+r.nextInt(10));
    }
    gc.dispose();
    session.setAttribute("randNum",rt);
    OutputStream os=response.getOutputStream();
    ImageIO.write(pic,"JPEG",os);
    System.out.println(session.getAttribute("randNum"));
    os.flush();
    os.close();
    os=null;
    response.flushBuffer();
    out.clear();
    out = pageContext.pushBody();
      %>
    </body>
    </html>在用到验证码的界面:<a href="javascript:reloadImage();" title="看不清?点击换一张^_^" >
    <img id="pic" src="admin/yzm.jsp" border="0" style="vertical-align:middle;"/>
    </a> <a href="javascript:reloadImage();" tabindex="200">
      <font color="#bc2931" size="2" face="宋体" title="不区分大小写">看不清楚?换张图片</font>
      </a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      

  6.   

    js的reloadImage方法:
    function reloadImage(){
    document.all.pic.src="admin/yzm.jsp?"+Math.random();
    }