为什么我session获取的取总比验证图片里的慢一步啊,高手指点下,加分!~
我的验证码用servlet写的,代码:
package checkDraw;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.*;
import java.awt.*;
import com.sun.image.codec.jpeg.*;
import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
import java.awt.geom.GeneralPath;
import javax.swing.*;
import java.math.*;
public class checkServlet
        extends HttpServlet {
//Process the HTTP Get request
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws
            ServletException, IOException {
         response.setContentType(request.getContentType());
         response.setContentType("image/jpeg"); //必须设置ContentType为image/jpeg
         response.setHeader("Pragma","No-cache");   
         response.setHeader("Cache-Control","no-cache");   
         response.setDateHeader("Expires",   0);
         HttpSession session = request.getSession(true);
        int length = 4; //设置默认生成4个数字
        Date d = new Date();
        long lseed = d.getTime();
        Random r = new Random(); //设置随机种子
        if (request.getParameter("length") != null) {
            try {
                length = Integer.parseInt(request.getParameter("length"));
            }
            catch (NumberFormatException e) {
            }
        }
        StringBuffer str = new StringBuffer();
        for (int i = 0; i < length; i++) {
            str.append(r.nextInt(9)); //生成随机数字
        }
//可以在此加入保存验证码的代码
   session.setAttribute("Rand",String.valueOf(str)); 
//创建内存图像
        BufferedImage bi = new BufferedImage(40, 16, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = bi.createGraphics();
        g.clearRect(0, 0, 16, 40);
        g.setColor(Color.RED);
        g.drawString(str.toString(), 4, 12);
        try {
//使用JPEG编码,输出到response的输出流
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.
                    getOutputStream());
            JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
            param.setQuality(1.0f, false);
            encoder.setJPEGEncodeParam(param);
            encoder.encode(bi);
        }
        catch (Exception ex) {
        }
下面是我在JSP页面获取的代码:
<html>
<body>
<form  action="ConServlet" name="form1" method="post">
<table width="228" height="244" border="1" align="center">
  <!--DWLayoutTable-->
  <tr>
    <td colspan="2"> &nbsp;&nbsp;&nbsp;专业班主任务周计划系统</td>
  </tr>
  <tr>
    <td width="65">用户名:</td>
    <td width="147"><input type="text" name="name" size="20" /></td>
  </tr>
  <tr>
    <td>密&nbsp;&nbsp;码:</td>
    <td><input type="password" name="password" size="20" /></td>
  </tr>
  <tr>
    <td height="39" colspan="2" valign="top"><table width="100%" border="0" cellpadding="0" cellspacing="0">
      <!--DWLayoutTable-->
      <tr>
        <td width="68" height="35" align="center" valign="middle"><div align="left">验证码:</div></td>
        <td width="77" align="center" valign="middle"><input type="text" name="c_code" size="10"></td>
        <td width="73" rowspan="2" align="center" valign="middle"><img     src="checkServlet" alt="看不清楚?点击更换验证码"  width="50" height="26" align="middle"  onclick="this.src='checkServlet'"/>

<!-- 下面代码是为了检验是否与验证码相同-->
<% String random = (String) session.getAttribute("Rand");
            out.println(random);
  %>
  </td>
      </tr>
      <tr>
        <td height="1"></td>
        <td></td>
        </tr>
      
    </table>    </td>
    </tr>
  <tr>
    <td colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      <input  type="button" value="提交" onClick="check()">
      &nbsp;&nbsp;
     <input type="reset" value="重填"></td>
  </tr>
</table>
</form>
</body>
</html>
<script language="javascript">function check()
{
   if(document.form1.c_code.value!="<%=session.getAttribute("code")%>")
  {
  alert("验证码输入错误!");
  socument.form1.c_code.focus();
  return;
  }
 document.form1.submit();}