| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 680 人关注过本帖
标题:请教:调用验证码函数,显示无图错误(是否session没生成)
只看楼主 加入收藏
africanfarme
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-2-18
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
请教:调用验证码函数,显示无图错误(是否session没生成)
---ValidationCodeServlet.java---
package servlet;

import java.awt.*;
import java.awt.image.BufferedImage;
import *;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.*;
import javax.servlet.http.*;

public class ValidationCodeServlet extends HttpServlet
{
    private static String codeChars = null;

    private static Color getRandomColor(int minColor, int maxColor)
    {
        Random random = new Random();
        int red = minColor + random.nextInt(maxColor - minColor);
        int green = minColor + random.nextInt(maxColor - minColor);
        int blue = minColor + random.nextInt(maxColor - minColor);
        return new Color(red, green, blue);
    }

    @Override
    protected void service(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException
    {
        // 如果未加载验证码字符串,从code.txt文件中读取验证码字符串
        if(codeChars == null)
        {
            FileInputStream fis = new FileInputStream(this.getServletContext()
                    .getRealPath("/WEB-INF/code.txt"));
            InputStreamReader isr = new InputStreamReader(fis);
            BufferedReader br = new BufferedReader(isr);
            String s = "";
            while ((s = br.readLine()) != null)
            {
                codeChars = s;
            }
        }
        // 获得验证码集合的长度
        int charsLength = codeChars.length();

        // 禁止客户端缓存网页
        response.setHeader("ragma", "No-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);

        // 设置图形验证码的长和宽(验证码图像的大小)
        int width = 150, height = 30;
        BufferedImage image = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        Random random = new Random();
        // 随机设置要填充的颜色
        g.setColor(getRandomColor(190, 250));
        // 填充图形背景
        g.fillRect(0, 0, width, height);
        // 随机设置字体颜色
        g.setColor(getRandomColor(80, 160));
        // 用于保存最后随机生成的验证码
        StringBuilder validationCode = new StringBuilder();
        String[] fontNames = new String[]{"宋体", "楷体", "隶书"};
        // 随机生成3个到5个验证码
        for (int i = 0; i < 3 + random.nextInt(3); i++)
        {
            // 随机设置当前验证码的字符的字体
            g.setFont(new Font(fontNames[random.nextInt(3)], Font.ITALIC, height));
            // 随机获得当前验证码的字符
            
            char codeChar = codeChars.charAt(random.nextInt(charsLength));
            validationCode.append(codeChar);
            // 随机设置当前验证码字符的颜色
            g.setColor(getRandomColor(10, 100));
            // 在图形上输出验证码字符
            g.drawString(String.valueOf(codeChar), 25 * i + 6,
                    height - random.nextInt(5));

        }

        HttpSession session = request.getSession();

        // 设置session对象30分钟失效
        session.setMaxInactiveInterval(30 * 60);
        // 将验证码保存在session对象中,key为vcode
        session.setAttribute("vCode", validationCode.toString());

        g.dispose();
        OutputStream os = response.getOutputStream();
        ImageIO.write(image, "JPEG", os);
        
    }
}
--
调用,错误如图。
图片附件: 游客没有浏览图片的权限,请 登录注册

<img hint="a" id="img_validation_code"    src=" validationCode"  />,用 <% out.println(session.getAttribute("vCode")); %>,显示为null。
搜索更多相关主题的帖子: servlet class 验证码 private public 
2012-02-18 15:25
baifenghan
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:258
专家分:952
注 册:2006-3-17
收藏
得分:20 
试了下,是可以的,应该是你没有放置code.txt文件,这个文件是你算法中生成随机码的输入条件。
你的图形上的数字和那个要session中的串值不同,你可以看看算法。
2012-02-19 09:05
africanfarme
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-2-18
收藏
得分:0 
code.txt是放了的。我测试过,在另一个纯servlet的程序中,能显示。就是用ssh的不行。很奇怪。
2012-02-22 21:10
快速回复:请教:调用验证码函数,显示无图错误(是否session没生成)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019742 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved