为什么我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"> 专业班主任务周计划系统</td>
</tr>
<tr>
<td width="65">用户名:</td>
<td width="147"><input type="text" name="name" size="20" /></td>
</tr>
<tr>
<td>密 码:</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">
<input type="button" value="提交" onClick="check()">
<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();}
我的验证码用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"> 专业班主任务周计划系统</td>
</tr>
<tr>
<td width="65">用户名:</td>
<td width="147"><input type="text" name="name" size="20" /></td>
</tr>
<tr>
<td>密 码:</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">
<input type="button" value="提交" onClick="check()">
<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();}
解决方案 »
- css 两个table之间如何紧挨着
- JSP加载swf文件(在线文档阅读)的问题
- 关于clientHeight的问题
- Applet得奇怪问题!!超急
- 为什么我的jsp说找不到postgresql驱动呢?
- jsp打印设置 scriptx
- 编译.java文件时提示找不到javax.mail和javax.mail.internet包,怎么办???
- 大家开发servlet除了jbuilder外还用什么开发呀
- javabean的一个问题
- 请问大家layout网页都用什么工具啊?Dreamweaver 吗?
- 求日期的正则表达式
- web.xml 中 filter 配置只对 .jsp生效 ,对 .action却没反映的问题.
比如这次验证图片的数字是1234,但session.getAttribute()获取的数字去不是.等刷新一次后,验证图片的数字变为另外的了,而session.getAttribute()获取的数字才是1234,这就慢了那么一步