severlet能取到值,到页面就取不到了,session默认30分钟,肯定没过期啊,值也存进去了,
 servlet中:request.getSession().setAttribut("validateCode",randomCode.toString());   
  System.out.println(session.getAttribute("validateCode")+"vvvvvvvv");
  到这里能打印出来的
jsp:中: ${sessionScope.validateCode} 为null
跪求高手指点,不胜感激!!

解决方案 »

  1.   

    jsp中应该写成这样: ${sessionScope.validateCode}没错但为什么取不到呢。
    是不是你在请求的时候没有先请求存入session的这个servlet而是先请求了JSP页面。
    如果这样的话肯定取不到值
      

  2.   

    我请求了啊,我检测session id 后servlet中的和jsp中的不一样啊,这是什么问题呢
    注册页面7B4918FC4D652821B93727D73BA60BD8
    servle 中:yanzhengma---5BEEC61A4E662D838FE8BF1F54B00539
       ----EFWO
    生成验证码后---5BEEC61A4E662D838FE8BF1F54B00539
    验证码代码:
    public class ImageNum extends HttpServlet { private static final long serialVersionUID = -5040751626178508171L;
    /**
     * 验证码图片的宽度。
     */
    private int width = 60; /**
     * 验证码图片的高度。
     */
    private int height = 20; /**
     * 验证码字符个数
     */
    private int codeCount = 4; /**
     * xx
     */
    private int xx = 0; /**
     * 字体高度
     */
    private int fontHeight; /**
     * codeY
     */
    private int codeY; /**
     * codeSequence
     */
    char[] codeSequence = { '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 void init() throws ServletException {
    // 从web.xml中获取初始信息
    // 宽度
    String strWidth = this.getInitParameter("width");
    // 高度
    String strHeight = this.getInitParameter("height");
    // 字符个数
    String strCodeCount = this.getInitParameter("codeCount"); // 将配置的信息转换成数值
    try {
    if (strWidth != null && strWidth.length() != 0) {
    width = Integer.parseInt(strWidth);
    }
    if (strHeight != null && strHeight.length() != 0) {
    height = Integer.parseInt(strHeight);
    }
    if (strCodeCount != null && strCodeCount.length() != 0) {
    codeCount = Integer.parseInt(strCodeCount);
    }
    } catch (NumberFormatException e) {
    e.printStackTrace();
    } xx = width / (codeCount + 1);
    fontHeight = height - 2;
    codeY = height - 4; } @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
    this.doPost(req, resp);
    } @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException { System.out.println("yanzhengma---" + req.getSession().getId());
       // 定义图像buffer   
            BufferedImage buffImg = new BufferedImage(width, height,   
                    BufferedImage.TYPE_INT_RGB);   
            Graphics2D gd = buffImg.createGraphics();   
      
            // 创建一个随机数生成器类   
            Random random = new Random();   
      
            // 将图像填充为白色   
            gd.setColor(Color.WHITE);   
            gd.fillRect(0, 0, width, height);   
      
            // 创建字体,字体的大小应该根据图片的高度来定。   
            Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);   
            // 设置字体。   
            gd.setFont(font);   
      
            // 画边框。   
            gd.setColor(Color.BLACK);   
            gd.drawRect(0, 0, width - 1, height - 1);   
      
            
            gd.setColor(Color.BLACK);   
            for (int i = 0; i < 2; i++) {   
                int x = random.nextInt(width);   
                int y = random.nextInt(height);   
                int xl = random.nextInt(12);   
                int yl = random.nextInt(12);   
                gd.drawLine(x, y, x + xl, y + yl);   
            }   
      
            // randomCode用于保存随机产生的验证码,以便用户登录后进行验证。   
            StringBuffer randomCode = new StringBuffer();   
            int red = 0, green = 0, blue = 0;   
      
            // 随机产生codeCount数字的验证码。   
            for (int i = 0; i < codeCount; i++) {   
                // 得到随机产生的验证码数字。   
                String strRand = String.valueOf(codeSequence[random.nextInt(36)]);   
                // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。   
                red = random.nextInt(255);   
                green = random.nextInt(255);   
                blue = random.nextInt(255);   
      
                // 用随机产生的颜色将验证码绘制到图像中。   
                gd.setColor(new Color(red, green, blue));   
                gd.drawString(strRand, (i + 1) * xx, codeY);   
      
                // 将产生的四个随机数组合在一起。   
                randomCode.append(strRand);   
            }   
            // 将四位数字的验证码保存到Session中。   
            HttpSession session = req.getSession();   
            session.setAttribute("validateCode", randomCode.toString());   
            System.out.println("   ----"+session.getAttribute("validateCode"));
            System.out.println("生成验证码后---"+session.getId());
         //  System.out.println(session.getAttribute("validateCode")+"vvvvvvvv");
            // 禁止图像缓存。   
            resp.setHeader("Pragma", "no-cache");   
            resp.setHeader("Cache-Control", "no-cache");   
            resp.setDateHeader("Expires", 0);   
      
            resp.setContentType("image/jpeg");   
      
            // 将图像输出到Servlet输出流中。   
            ServletOutputStream sos = resp.getOutputStream();   
            ImageIO.write(buffImg, "jpeg", sos);   
            sos.close(); 
    }}
    servelt代码:
    public class ZhuceAjaxNum extends HttpServlet { @Override
    protected  void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    doPost(request,response);

    }
    @Override
    protected  void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { request.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();

    System.out.println("222222---"+request.getSession().getId());
    String code=request.getSession().getAttribute("validateCode").toString();
    String codeshu=request.getParameter("codeshu");
    System.out.println(code+"aaaaaa");
    System.out.println(codeshu+"bbbbbbbbb");
    if(!(codeshu==null)&&!"".equals(codeshu)){
    if(code.equals(codeshu)){
    out.write("<font color='green'size='2'>"+"√"+"</font>");
    }else{
    out.write("<font color='red'size='2'>"+"验证码错误!"+"</font>");
    }
    }else{
    out.write("<font color='red'size='2'>"+"请输入验证码!"+"</font>");
    } out.flush();
    out.close();
    }}
      

  3.   

    从生成验证码的servlet类中获取的seesion id与jsp页面获取的session id不同啊,根本不是一个session啊