验证码图片不能正常显示的一个原因
验证码技术实现按如下步骤:
    1、设计一个验证码生成类RandomImageGenerator.java
import java.awt.*;
如何提高电脑网速    import java.awt.image.*;
    import java.io.*;快乐暑假手抄报内容文字
    import javax.imageio.ImageIO;
    public class RandomImageGenerator {
        final static int LENGTH=4;
        static Color colors[]={d,Color.black,Color.blue,Color.an};
        public static String random() {//创建一个4位的验证码字符串
            String str="1234567890ABCDEFGHIJKLMNOPORSTUVWXYZabcefghijklmnopqrstuvwxyz",rand="";
            java.util.Random random=new java.util.Random();
            for(int i=0;i<LENGTH;i++) {
                int Int(str.length());
                rand+=str.substring(index,index+1);
            }
            return rand;
        }
        public static void render(String num,OutputStream out) throws IOException {//创建一幅含有验证码的干扰图象,送输出流
            if (num.length()!=LENGTH)
                throw new IllegalArgumentException("验证码长度不足");
            int height=30;
            int width=(height-10)*LENGTH;
            BufferedImage bi=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
            Graphics2D g=(Graphics();
关于庐山的诗句            java.util.Random random=new java.util.Random();
            g.setColor(Color.white);
            g.fillRect(0,0,width,height);
            Font mFont=new Font("宋体",Font.BOLD+Font.ITALIC,height-5);
            g.setFont(mFont);
            FontMetrics FontMetrics();
            //画干扰点
            for(int i=0;i<200;i++) {
                int Int(width);
                int Int(height);
                Color color1=new Int(255),Int(255),Int(255));
                g.setColor(color1);
                g.drawOval(x,y,0,0);
            }
            //画干扰线
            for(int i=0;i<5;i++) {
                int x=0;
                int Int(height);
                int x1=width;
                int Int(height);
                Color color1=new Int(255),Int(255),Int(255));
                g.setColor(color1);
                g.drawLine(x,y,x1,y1);
            }
            //显示验证码字符
            char str[]=CharArray();
            for(int i=0,x=0,y=0;i<str.length;i++) {
                Descent();
                if (i%2==0){
                    y-=10;
                }
                g.setColor(Int(colors.length)]);
                g.drawChars(str,i,1,x,y);
                x+=fm.charWidth(str[i])+5;
            }
            g.dispose();
            ImageIO.write(bi,"jpg",out);
        }
            }

    2.使用Servlet程序来实现验证码
    在页面中使用这个Servlet程序,显示验证码图案。
import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    public class RandomImageServlet extends HttpServlet {
        public final static String RANDOM_LOGIN_KEY="RANDOM_LOGIN_KEY";
        public void init() throws ServletException {
            System.setProperty("java.awt.headless","true");//设置一个系统属性
        }
        public String getRandomLoginKey(HttpServletRequest request){
            return (Session().getAttribute(RANDOM_LOGIN_KEY荥阳旅游景点大全);
        }
        protected void doGet(HttpServletRequest request,HttpServletResponse response)
                                                    throws ServletException,IOException {
            HttpSession Session();
            if (session!=null){
                String randomString=RandomImageGenerator.random();//得到一个6位的验证码字符串
明晓溪经典语录                session.setAttribute(RANDOM_LOGIN_KEY , randomString);//验证码保存到se
ssion中
                response.setContentType("image/jpeg");//设置响应类型为jpeg类型
                response.setHeader("Pragma","No-cache");//设置响应不采用缓冲
                response.setHeader("Cache-Control","no-cache");//设置响应不采用缓冲
受孕生男孩的三个最佳时间点                response.setDateHeader("Expires", 0);//设置响应不采用缓冲
                der(OutputStream());
            }
        }
        protected void doPost(HttpServletRequest request,HttpServletResponse response)  throws ServletException,IOException {
            doGet(request,response);
        }
    }

    在l中配置这个Servlet程序:
    <servlet>
        <servlet-name>image</servlet-name>
        <servlet-class>ch17.RandomImageServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>image</servlet-name>
        <url-pattern>/verifyCode.jsp</url-pattern>
    </servlet-mapping>
   
    3.JSP页面实现testRandom.jsp
    <script type="text/javascript" language="javascript">
        function Check() {
            if (document.register.random.value==""){
                window.alert("请填写验证码!");
                ister.random.focus();
                return false;
            }
            document.register.submit();
        }
        function reloadImage(url){
            document.register.img1.src = url;
        }
    </script>
<form name="register" method="post" action="">
    <table cellpadding="0" cellspacing="0">
        <tr>
            <td><div align="right" class="style2"><strong>验证码</strong></div></td>
            <td><div align="center"><input name="random" type="text" id="random"></div></td>
            <td><img name="img1" src="./verifycode.jsp" width="100" height="20" border="1"
align="absmiddle">
        <a href="JavaScript:reloadImage('./verifyCode.jsp');"><font size="2">看不清楚,换一张</font></a></td>
        </tr>
        <tr><td></td><td></td><td>
            <input type="button" name="Submit" value="登录" onclick="Check()">
        <td></tr>
    </table>
</form>

    在Eclipse按上述步骤完成后,点击“运行”,界面上验证码图标总是显示不出来,出现一把叉,究竟是什么原因,在网上查了很久,大多数都说是要下载类似flash插件,或者是Cookie禁用等方法,我按网上的方法改来改去,最后都是不行,最后我把l里的配置一个一个重新加进去,发现,竟然是在l里面配置了过滤器导致的。把这个过滤器的配置去掉,嘿嘿,竟然可以正常显示验证码图标了,问题得以解决,花了好长好长时间啊。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。