http://www.tot.name/show/3/6/20060715135316.htm
使用JSP生成的验证码会报出异常:getOutputStream() has already been called for this response,其原因就是输出流的问题,使用Servlet则解决了此问题以下是代码:
/*
* Image.java
*
* Created on 2006年7月13日, 下午4:43
*/
package com.tot.certcode;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import javax.imageio.*;
/**
*
* @author
* @version
*/
public class Image extends HttpServlet {
/** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("image/jpeg");
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
HttpSession session=request.getSession();
// 在内存中创建图象
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics g = image.getGraphics();
//生成随机类
Random random = new Random();
// 设定背景色
g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);
//设定字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
//画边框
//g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
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
session.setAttribute("rand",sRand);
// 图象生效
g.dispose();
ServletOutputStream responseOutputStream =response.getOutputStream();
// 输出图象到页面
ImageIO.write(image, "JPEG", responseOutputStream);
//以下关闭输入流!
responseOutputStream.flush();
responseOutputStream.close();
}
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);
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/** Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Returns a short description of the servlet.
*/
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
}
分享到:
相关推荐
【JSP验证码(Servlet)详解】 验证码是一种常用的安全机制,用于防止自动化的恶意程序,如机器人,进行非法操作。在Web开发中,JSP(JavaServer Pages)与Servlet结合使用可以实现动态生成并验证验证码的功能。这...
### jsp验证码——数字 #### 知识点详解 ##### JSP 验证码实现原理与过程 在本文档中,我们关注一个基于JavaServer Pages (JSP) 的数字验证码生成示例。此示例主要涉及到JSP页面的配置、Java图形处理库的使用以及...
以下是一个简单的JSP数字验证码的实现方法: 首先,我们来看一下JSP的基本结构。`@%>` 和 `是JSP中的脚本元素,它们分别用于执行Java代码和输出Java表达式的值。在这个例子中,我们主要使用了`@%>`来编写Java代码。...
**JSP验证码与JavaScript验证详解** 验证码是一种常用的安全机制,用于防止自动化的恶意程序或机器人进行非法操作,如批量注册、刷票等。在Web开发中,Java Server Pages (JSP) 和 JavaScript 是两种常见的技术,...
在Java Web开发中,"getOutputStream() has already been called for this response" 是一个常见的错误,通常出现在使用Servlet或JSP时。这个错误意味着在HTTP响应中,`getOutputStream()`已经被调用,然后尝试再次...
**JSP验证码(简单版)** 验证码是一种常用的安全机制,用于防止自动机器人或者恶意脚本在网站上进行非法操作,如注册、登录、发布信息等。JSP(Java Server Pages)验证码是基于Java技术实现的一种网页验证码。在...
总之,理解和掌握JSP验证码的实现,不仅可以保护你的Web应用免受恶意攻击,还能帮助你更好地理解Web开发中的安全问题。通过下载、学习和实践提供的源码,你将能更深入地理解验证码技术及其在实际项目中的应用。
在这个特定的案例中,我们关注的是一个JSP验证码的实现,其核心功能是生成4位随机数字并转化为图片进行用户验证。 验证码的主要目的是防止自动化程序(如机器人或恶意脚本)进行非法操作,比如注册、登录或提交表单...
**JSP验证码登录程序详解** 验证码(CAPTCHA)是一种用于防止自动机器人或恶意脚本进行非法操作的安全机制,常用于用户登录、注册等场景。在JSP(Java Server Pages)中,结合Servlet实现验证码功能,可以有效提升...
简单实用动态jsp页面验证码 ImageIO.write(image, "JPEG", response.getOutputStream()); }catch(Exception e){ e.printStackTrace(); }
下面我们将详细探讨如何在JSP中创建图片验证码以及验证用户输入的验证码是否正确。 ### 1. 图片验证码的生成原理 图片验证码的基本原理是生成一串随机字符(通常包含字母和数字),将这些字符绘制到一张图片上,...
在本教程中,我们将探讨如何使用Java Server Pages (JSP)来实现一个简单的验证码功能,同时解决可能出现的`getOutStream()`相关问题。 首先,验证码的目的是确保用户是真实的,而不是自动化程序。它通常要求用户...
总的来说,JSP生成的数字验证码结合了Java的强大功能和网页的交互性,提供了一种简单而有效的用户验证方法。在开发过程中,确保验证码的安全性和用户体验是至关重要的。通过对验证码的不断刷新和复杂化设计,我们...
本文将深入探讨如何使用JSP(JavaServer Pages)来生成随机验证码。 验证码的核心在于生成难以被机器识别的随机字符串或图像,同时确保服务器端能够正确验证用户输入的验证码。JSP提供了丰富的功能,可以方便地实现...
在本主题“利用jsp生成图片验证码”中,我们将探讨如何在JavaServer Pages (JSP)上下文中创建一个简单的图片验证码,而无需使用Servlet。首先,我们要明白JSP是Java Web开发中的视图层技术,它允许我们在HTML页面中...
**JSP验证码简单示例** 验证码(CAPTCHA)是一种用于防止自动机器人或恶意脚本进行非法操作的技术。在网页开发中,尤其是用户登录、注册、评论等场景,验证码能够有效地防止垃圾信息的产生,保护网站的安全。JSP...
**JSP实现验证码数字图片详解** 验证码是一种常用的安全机制,用于防止自动机器人或者恶意脚本进行非法操作,如批量注册、频繁提交等。在Web开发中,JSP(JavaServer Pages)可以用来创建动态验证码图片。本文将...
### jsp验证码学习代码 #### 一、简介 在web应用程序的安全性方面,验证码是一种常见的保护机制,可以有效防止机器自动填写表单等自动化攻击行为。对于使用Java Server Pages(JSP)技术进行Web开发的技术人员来说...
在Web开发中,基于JSP(Java Server Pages)的验证码生成系统是常见的实现方式。本文将详细讨论如何使用Java编程语言和JSP技术来创建一个动态验证码生成系统。 首先,我们需要了解JSP的基本概念。JSP是Java的一种...