jsp做验证码的生成

请问哪位高手帮忙解决一下,怎样用jsp编写验证码的产生,最好是能把具体用到的函数也给注释或解释的详细一些,谢谢咯,最好能再补充一些学习jsp的心得和建议,谢谢了,小弟初学... 请问哪位高手帮忙解决一下,怎样用jsp编写验证码的产生,最好是能把具体用到的函数也给注释或解释的详细一些,谢谢咯,最好能再补充一些学习jsp的心得和建议,谢谢了,小弟初学。 展开
 我来答
闳颀WB
2007-07-03 · TA获得超过232个赞
知道答主
回答量:83
采纳率:0%
帮助的人:0
展开全部
用Serverlet编写!以下是验证码的产生代码!你可以研究一下!

public class ValidateCodeServlet extends HttpServlet {

/**
*
*/
private static final long serialVersionUID = 4008416931787800531L;

/**
* Constructor of the object.
*/
public ValidateCodeServlet() {
super();
}

/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
}

/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

//设置页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);

// 在内存中创建图象
int width = 60, height = 20;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);

// 获取绘画对象
Graphics g = image.getGraphics();
// 设定背景色
g.setColor(getRandColor(225, 250));
g.fillRect(0, 0, width, height);
//设定字体
g.setFont(new Font("Times New Roman", Font.BOLD, 20));

// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
Random random = new Random();
g.setColor(getRandColor(160, 200));
for (int i = 0; i < 155; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x, y, x + xl, y + yl);
}

// 取随机产生的认证码(4位数字)
String sRand = "";
for (int i = 0; i < 4; i++) {
String rand = String.valueOf(random.nextInt(10));
sRand += rand;
// 将认证码显示到图象中
g.setColor(new Color(20 + random.nextInt(110), 20 + random
.nextInt(110), 20 + random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand, 13 * i + 6, 16);
}

// 将认证码存入SESSION
HttpSession session = request.getSession();
session.setAttribute("valicode", sRand);

// 图象生效
g.dispose();

// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());

}

/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}

/**
* 给定范围获得随机颜色
* @param fc
* @param bc
* @return
*/
private Color getRandColor(int fc, int bc) {
Random random = new Random();
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}

}
404331164
2007-07-03 · TA获得超过356个赞
知道小有建树答主
回答量:646
采纳率:0%
帮助的人:357万
展开全部
jsp做验证码和ASP有好大的不同,ASP可以几句话做好,但JSP要很多内容才可以做好。。学习JSP要先学好JAVA的基础,学得才没那么吃力,然后要掌握JSP的语法,如:编译指令,动作指令等!还有就是JSP的对象!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式