zoukankan      html  css  js  c++  java
  • jsp验证码,解决无法更新验证码问题

    首先给你个验证码模板,文件名为Num.jsp

    <%@ page pageEncoding = "gbk" contentType="image/jpeg" import = "javax.imageio.*,java.util.*,java.awt.image.*,java.awt.*" %>
    window.self.location.reload(
    true);

    <%!

    //在此处 获取并生成随机颜色

    Color getRandColor(Random random,
    int ff, int cc) {

    if (ff > 255)

    ff
    = 255;

    if (cc > 255)

    cc
    = 255;

    int r = ff + random.nextInt(cc - ff);

    int g = ff + random.nextInt(cc - ff);

    int b = ff + random.nextInt(cc - ff);

    return new Color(r, g, b);

    }
    %>



    <%

    response.setHeader(
    "Pragma","No-cache");

    response.setHeader(
    "Cache-Control","no-cache");

    response.setDateHeader(
    "Expires", 0);



    int width=60; //定义验证码图片的长度

    int height=20; //定义验证码图片的宽度

    BufferedImage image
    = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);



    Graphics g
    = image.getGraphics();



    Random random
    = new Random();



    g.setColor(getRandColor(random,
    200,250));

    g.fillRect(
    0, 0, width, height);



    g.setFont(
    new Font("Times New Roman",Font.PLAIN,18));


    //定义字体形式


    g.setColor(getRandColor(random,
    160,200));

    for (int i=0;i<155;i++)

    {

    int i_x = random.nextInt(width);

    int i_y = random.nextInt(height);

    int i_xl = random.nextInt(12);

    int i_yl = random.nextInt(12);

    g.drawLine(i_x,i_y,i_x
    +i_xl,i_y+i_yl);

    }


    //用线条画背景


    String s_Rand
    ="";

    for (int i=0;i<4;i++)

    {

    String rand
    =String.valueOf(random.nextInt(10));

    s_Rand
    +=rand;



    g.setColor(
    new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));

    g.drawString(rand,
    13*i+6,16);

    }


    //产生4位随机码


    session.setAttribute(
    "rand",s_Rand);


    //将验证码存入Session中


    g.dispose();



    ImageIO.write(image,
    "JPEG", response.getOutputStream());


    //输出验证图片


    out.clear();

    out = pageContext.pushBody();



    %>

    重要的是如何调用这个验证码,而且单击验证码让它自动换一张,看下面代码,文件名为test.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
    <%
    String path
    = request.getContextPath();
    String basePath
    = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <base href="<%=basePath%>">

    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <script type="text/javascript">
    function change()
    {
    var img
    =document.getElementById("code");
    img.src
    ="Num.jsp?date="+new Date();//此处很重要,不加后面的就不会变
    }
    </script>
    </head>

    <body>
    <center>
    <form id="dForm" method=post action="">
    用户名:
    <input name="username"><br>
    &nbsp;码:<input type="password" name="password"><br>
    校验码:
    <input id="check" size="10">
    <img id="code" border=0 src="Num.jsp" onclick="change()"/><br>
    <input type="reset" value="重置">
    <input type="submit" value="提交">

    </form>
    </center>
    </body>
    </html>
    --------------------------------------- 贵有恒,何必三更起五更眠。最无益,只怕一日曝十日寒。--------------------------------------------
  • 相关阅读:
    [atAGC052D]Equal LIS
    [atAGC052C]Nondivisible Prefix Sums
    [atAGC052B]Tree Edges XOR
    [gym103055H]Grammy and HearthStone
    Vector底层结构和源码剖析
    ArrayList的底层源码分析及注意事项
    Collection接口
    集合介绍
    用户管理底层实现
    什么是Mybatis
  • 原文地址:https://www.cnblogs.com/lhxfzu/p/2032254.html
Copyright © 2011-2022 走看看