`

jsp验证码 javax.imageio.IIOException: Can't create output stream! 问题解决方案

    博客分类:
  • jsp
阅读更多

  新建:image.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*,com.sun.image.codec.jpeg.JPEGCodec,com.sun.image.codec.jpeg.JPEGImageEncoder" %> 
<%!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);
	}%> 
<%
 	out.clear();//这句针对resin服务器,如果是tomacat可以不要这句 
 	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();
 	Random random = new Random();
 	g.setColor(getRandColor(200, 250));
 	g.fillRect(0, 0, width, height);
 	g.setFont(new Font("Times New Roman", Font.PLAIN, 24));
 	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);
 	}
 	String sRand = "";
 	for (int i = 0; i < 4; i++) {
 		String rand = String.valueOf(random.nextInt(10));
 		sRand += rand;
 		g.setColor(new Color(50 + random.nextInt(110), 50 + random
 				.nextInt(110), 20 + random.nextInt(110)));
 		g.drawString(rand, 13 * i + 6, 16);
 	}
 	// 将认证码存入SESSION 
 	session.setAttribute("rand", sRand);
 	g.dispose();
                //javax.imageio.IIOException: Can't create output stream! 问题解决方案


          //ImageIO.write(image, "jpeg", response.getOutputStream()); 改为下面2行 input javax.imageio.IIOException: Can't create output stream! 
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream());
 	encoder.encode(image); 
 	out = pageContext.pushBody();
 %>

 

  页面引用html
function loadimage() {
	document.getElementById("randImage").src = "image.jsp?" + Math.random();
}
<img alt="code..." name="randImage" id="randImage" src="image.jsp" width="60" height="20" border="1" align="absmiddle" onclick="javascript:loadimage();">

 

分享到:
评论
2 楼 yangliuwillow 2015-08-20  
javascript
1 楼 alfusen_xiong 2013-03-18  
我也碰到这个问题,按照楼主的方法,确实可行。感谢楼主的分享精神,是我辈学习之楷模!

相关推荐

    图片处理 javax.imageio.IIOException: Unsupported Image Type

    在Java编程环境中,图片处理是一项常见的任务,但有时可能会遇到“javax.imageio.IIOException: Unsupported Image Type”的错误。这个异常通常表示Java的`ImageIO`类库无法识别或支持所尝试读取或写入的图像格式。...

    Exception in thread “main” javax.imageio.IIOException: Can’t read input file!

    Exception in thread “main” javax.imageio.IIOException: Can’t read input file!:无法读取输入文件! 原可以从两个方面分析: 路径中文乱码问题 target/classes文件夹中并没有找到图片 加粗样式看下代码: ...

    javax.imageio-1.0.5.jar

    javax.imageio-1.0.5.jar, java处理图片的库。 从maven中央仓库下载的。实测可用。

    javax.naming.NamingException: Cannot create resource instance

    javax.naming.NamingException: Cannot create resource instance类加载异常,希望可以帮助跟我一样错误的人。

    javax.servlet-3.0.0.v201112011016-API文档-中文版.zip

    赠送jar包:javax.servlet-3.0.0.v201112011016.jar; 赠送原API文档:javax.servlet-3.0.0.v201112011016-javadoc.jar; 赠送源代码:javax.servlet-3.0.0.v201112011016-sources.jar; 赠送Maven依赖信息文件:...

    javax.activation.UnsupportedDataTypeException: no object DCH for MIME type

    在Oracle 11.2.0.4中调用 javax.mail 发送邮件时可能会遇到以下错误: ORA-29532: Java call terminated by uncaught Java exception: javax.mail.MessagingException: IOException while...第二步:解决方案看文档中。

    javax.servlet-3.0.0.v201112011016-API文档-中英对照版.zip

    赠送jar包:javax.servlet-3.0.0.v201112011016.jar; 赠送原API文档:javax.servlet-3.0.0.v201112011016-javadoc.jar; 赠送源代码:javax.servlet-3.0.0.v201112011016-sources.jar; 赠送Maven依赖信息文件:...

    javax.annotation-api-1.3.2-API文档-中文版.zip

    赠送jar包:javax.annotation-api-1.3.2.jar; 赠送原API文档:javax.annotation-api-1.3.2-javadoc.jar; 赠送源代码:javax.annotation-api-1.3.2-sources.jar; 赠送Maven依赖信息文件:javax.annotation-api-...

    javax.mail-1.5.6-API文档-中文版.zip

    赠送jar包:javax.mail-1.5.6.jar; 赠送原API文档:javax.mail-1.5.6-javadoc.jar; 赠送源代码:javax.mail-1.5.6-sources.jar; 赠送Maven依赖信息文件:javax.mail-1.5.6.pom; 包含翻译后的API文档:javax.mail...

    javax.mail-1.6.2-API文档-中英对照版.zip

    赠送jar包:javax.mail-1.6.2.jar; 赠送原API文档:javax.mail-1.6.2-javadoc.jar; 赠送源代码:javax.mail-1.6.2-sources.jar; 赠送Maven依赖信息文件:javax.mail-1.6.2.pom; 包含翻译后的API文档:javax.mail...

    imageio-core-3.1.1-API文档-中文版.zip

    赠送jar包:imageio-core-3.1.1.jar; 赠送原API文档:imageio-core-3.1.1-javadoc.jar; 赠送源代码:imageio-core-3.1.1-sources.jar; 赠送Maven依赖信息文件:imageio-core-3.1.1.pom; 包含翻译后的API文档:...

    javax.transaction-api-1.2-API文档-中文版.zip

    赠送jar包:javax.transaction-api-1.2.jar; 赠送原API文档:javax.transaction-api-1.2-javadoc.jar; 赠送源代码:javax.transaction-api-1.2-sources.jar; 赠送Maven依赖信息文件:javax.transaction-api-1.2....

    javax.servlet jar包---解决找不到javax.servlet.*等问题

    当你遇到“找不到javax.servlet.*”这样的错误时,通常是因为你的项目缺少了这个库,所以需要引入`javax.servlet.jar`来解决问题。 1. **Java Servlet简介** Java Servlet是Java平台上的一个标准,用于扩展服务器...

    javax.activation-1.2.0-API文档-中文版.zip

    赠送jar包:javax.activation-1.2.0.jar; 赠送原API文档:javax.activation-1.2.0-javadoc.jar; 赠送源代码:javax.activation-1.2.0-sources.jar; 赠送Maven依赖信息文件:javax.activation-1.2.0.pom; 包含...

    javax.annotation-api-1.2-API文档-中文版.zip

    赠送jar包:javax.annotation-api-1.2.jar; 赠送原API文档:javax.annotation-api-1.2-javadoc.jar; 赠送源代码:javax.annotation-api-1.2-sources.jar; 赠送Maven依赖信息文件:javax.annotation-api-1.2.pom;...

    android DES加密解密 javax.crypto.IllegalBlockSizeException: last block incomplete in

    要解决这个问题,开发者需要确保在加密和解密过程中,数据被正确地填充到8字节的倍数。Java的`Cipher`类提供了一个`doFinal()`方法,用于处理最后一块可能不满8字节的数据。在加密前,可以使用`Cipher.PAD_PKCS5`...

    javax.xml.rpc相关jar包

    描述中提到的“解决javax.xml jar包缺失的问题,引进javax.xml.rpc-api-1.1.1.jar”,意味着在开发或运行某个Java项目时,可能会遇到由于缺少`javax.xml.rpc`相关的jar包导致的编译或运行错误。为了解决这个问题,...

    javax.servlet-api-4.0.1.jar中文文档.zip

    javax.servlet-api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发...

    jar包_javax.annotation.zip

    在这种情况下,引入`javax.annotation-api-1.3.2.jar`这个库就可以解决问题。这个版本的API包含了解析和处理`@Resource`以及其他相关注解的类和接口,如`@PostConstruct`和`@PreDestroy`,它们分别用于标记初始化...

    javax.servlet-api-3.1.0.jar中文文档.zip

    javax.servlet-api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发...

Global site tag (gtag.js) - Google Analytics