A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 胡浩 于 2013-5-24 09:56 编辑

我在些jsp页面识别验证码时,第一次点击会生成验证码,但是第二次就没有效果,百思不得其解,希望各位帮忙看看。
    一下是index.jsp的页面
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  7. <html>
  8.   <head>
  9.     <base href="<%=basePath%>">
  10.    
  11.     <title>学士后 短消息平台</title>
  12.         <meta http-equiv="pragma" content="no-cache">
  13.         <meta http-equiv="cache-control" content="no-cache">
  14.         <meta http-equiv="expires" content="0">   
  15.         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  16.         <meta http-equiv="description" content="This is my page">
  17.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  18.         <link type="text/css" rel="stylesheet" href="css/sms.css" />
  19.         
  20.         <script type="text/javascript">
  21.    function change() {
  22.           var c = document.getElementById("code");
  23.       c.src="code.jsp?rand=Math.random()" ;
  24.          }
  25.         </script>
  26.   </head>
  27.   
  28.   <body>
  29.   <%out.print(request.getSession().getAttribute("str")); %>
  30. <div id="loginTitle" class="png"></div>
  31. <div id="loginForm" class="userForm png">
  32.         <form method="post" name="loginform" action="" onsubmit = "">               
  33.                 <dl>                        
  34.                         
  35.                         <dt>用户名:</dt>
  36.                         <dd><input type="text" name="username" /></dd>
  37.                         <dt>密 码:</dt>
  38.                         <dd><input type="password" name="password" /></dd>
  39.                         <dt>验证码:</dt>
  40.                         <dd>
  41.                         <input name="code" />
  42.                         <img alt="未找到图片" src="code.jsp" id="code" onclick="change()"/>
  43.                         </dd>
  44.                 </dl>
  45.                 <div class="buttons">
  46.                         <input class="btn-login png" type="submit" name="submit" value=" " /><input class="btn-reg png" type="button" name="register" value=" " />
  47.                 </div>               
  48.         </form>
  49. </div>
  50. </body>
  51. </html>
复制代码



下面是code.jsp页面的代码,这个页面负责随机生成验证码。通过访问index页面,获得验证码,当点击验证码图片时,可以产生新的验证码。

评分

参与人数 1技术分 +1 黑马币 +5 收起 理由
袁梦希 + 1 + 5 很给力!

查看全部评分

10 个回复

倒序浏览
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6. <base href="<%=basePath%>">
  7. <%@ page import="java.awt.*,javax.imageio.*,java.awt.image.*"%>
  8. <%!
  9.         Color getRandColor(int fc ,int bc){
  10.         Random random=new Random();
  11.                 if (fc>255){
  12.                         fc=255;
  13.                 }
  14.                 if (bc>255){
  15.                 bc=255;
  16.                 }
  17.                 int r=fc+random.nextInt(bc-fc);
  18.                 int g=fc+random.nextInt(bc-fc);
  19.                 int b=fc+random.nextInt(bc-fc);
  20.                 return new Color(r,g,b);
  21.         }
  22. %>
  23. <%
  24. String charsLong = "23456789abcdefghjklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";   
  25. String charsShort = "0123456789";   
  26. String charss = charsLong;
  27. int charsLength = charss.length();
  28.         response.setHeader("Pragma","No-cache");
  29.         response.setHeader("Cache-Control","no-cache");
  30.         response.setDateHeader("Expires",0);
  31.         int width=60;
  32.         int height=20;
  33.         BufferedImage image=new BufferedImage(width,height,8);
  34.         Graphics g=image.getGraphics();
  35.         Random random=new Random();
  36.         g.setColor(getRandColor(200,250));
  37.         g.fillRect(0,0,width,height);
  38.         g.setFont(new Font("Arial",Font.PLAIN,18));
  39.         g.setColor(getRandColor(100,199));
  40.         //画边框
  41.         g.drawRect(0,0,width-1,height-1);
  42.         //画155条干扰线
  43.         for(int i=0;i<5;i++)
  44.         {
  45.                 int x=random.nextInt(width);
  46.                 int y=random.nextInt(height);
  47.                 int x1=random.nextInt(12);
  48.                 int y1=random.nextInt(12);
  49.                 g.drawLine(x,y,x+x1,y+y1);
  50.         }
  51.         //随机产生随机码
  52.     String str="";
  53.     String[] fontNames = { "Times New Roman", "Arial", "Book antiqua" };      
  54.     for (int i=0;i<4;i++){
  55.     g.setFont(new Font(fontNames[random.nextInt(3)], Font.PLAIN, 18));   
  56.     String rand = String.valueOf(charss.charAt(random.nextInt(charsLength)));   
  57.             str+=rand;
  58.             //将图片显示到图片中
  59.             g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
  60.             g.drawString(rand,13*i+6,16);
  61.     }
  62.     request.getSession().setAttribute("str",str);
  63.     g.dispose();

  64.     out.clear();
  65.     out= pageContext.pushBody();
  66.     ImageIO.write(image,"jpeg",response.getOutputStream());
  67. %>




复制代码
接着上个问题,不好意思,没写完就发了。这是code.jsp页面
回复 使用道具 举报
楼主你好,在这里面提问的都是学习java基础的,对于JSP部分是在黑马培训要学习的内容,
所以大家提一些java基础性的题比较稳妥,我先给你1分,虽然我不会这些。加油吧
回复 使用道具 举报
在jsp中我还真不知道,没学到那去,不过在ASP。net中有一个页面加载事件的方法,Page_Load(),可以直接用。。。。。。
回复 使用道具 举报
袁梦希 发表于 2013-5-23 18:34
楼主你好,在这里面提问的都是学习java基础的,对于JSP部分是在黑马培训要学习的内容,
所以大家提一些java ...

jsp都没自学?
回复 使用道具 举报
袁梦希 发表于 2013-5-23 18:34
楼主你好,在这里面提问的都是学习java基础的,对于JSP部分是在黑马培训要学习的内容,
所以大家提一些java ...

jsp都没自学?
回复 使用道具 举报
冯超 发表于 2013-5-23 19:14
jsp都没自学?

入学黑马,不用学习jsp,以前接触过,现在忘的一干二净
回复 使用道具 举报
冯超 高级黑马 2013-5-23 19:18:08
8#
袁梦希 发表于 2013-5-23 19:17
入学黑马,不用学习jsp,以前接触过,现在忘的一干二净

  没事·基础好·一天就能补上 就是九大域
回复 使用道具 举报
胡浩 中级黑马 2013-5-24 09:49:23
9#
恩,谢谢各位!
回复 使用道具 举报
本帖最后由 xiewen 于 2013-5-24 11:47 编辑

你应该把生成的验证码放到一个<span>标签里,更新验证码应该用一个超链接<a>,生成的验证码的代码应该写在servlet中,你就把更新验证码的超链接链接到这个servlet就可以啊,我把我以前的代码给你看一下啊
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. %>
  5. <html>
  6.   <head>
  7.     <title>登录</title>
  8.   </head>
  9.   <script type="text/javascript">
  10.           function changeCheckCode(){
  11.                   var code=document.getElementById("Code");
  12.                   code.setAttribute("src", "/ValidateCode/ValidateCodeServlet?rd="+Math.random());
  13.           }
  14.   </script>
  15.   <body>
  16.     <form>
  17.             用户名:<input type="text" name="name"/>

  18.             密   码:<input type="password" name="password"/>

  19.             验证码:<input type="text" name="validateCode"/>
  20.             <!-- 图片的路径跟以前不一样的时候图片会重新加载 -->
  21.             <span><img src="<%=path %>/ValidateCodeServlet" id="Code"></span>
  22.             <a href="javascript:changeCheckCode()">看不清,换一张</a>
  23.     </form>
  24.   </body>
  25. </html>
复制代码
   黑马云青年为您解答
















回复 使用道具 举报
挺一下!

黑马云青年
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马