验证码无法显示 java_为什么我的验证码不显示出来呢

login.jsp

contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

function trim(s)

{

return s.replace(/^\s*/,"").replace(/\s*$/,"");

}

function validate(form)

{

var errStr = "";

var username = trim(form.username.value);

var password = trim(form.password.value);

if(username == "" || username == null)

errStr += "请输入用户名\n";

if(password == "" || password == null)

errStr += "请输入密码\n";

if(vercode == "" || vercode == null)

errStr += "请输入验证码";

if(errStr == "")

return true;

else

{

alert(errStr);

return false;

}

}

//为了使每次生成的验证码不一致,即不让浏览器读缓存,所以需要加上时间戳

function refresh()

{

document.getElementById("authImg").src = "authImg?d=" + new Date().getTime();

}

验证码如图:authImg看不清?单击此处刷新

AuthImg.java:

package authImg;

import java.io.*;

import java.awt.*;

import java.awt.image.*;

import java.util.*;

import javax.imageio.*;

import javax.imageio.stream.ImageOutputStream;

public class AuthImg

{

private static final long serialVersionUID = 1L;

//设置图形验证码中字符串的字体和大小

private ByteArrayInputStream image;//图像

private String str;//验证码

private AuthImg()

{

init();

}

/*

* 取得AuthImg实例

*/

public static AuthImg Instance(){

return new AuthImg();

}

/*

* 取得验证码图片

*/

public ByteArrayInputStream getImage()

{

return this.image;

}

/*

* 取得图片的验证码

*/

public String getString()

{

return this.str;

}

//生成随机颜色

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);

}

//生成服务器响应的服务方法

public void init()

{

int width = 100, height = 18;

//生成一张新图片

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(1, 1, width - 1, height - 1);

//设定背景色

g.setColor(new Color(102, 102, 102));

g.drawRect(0, 0, width - 1, height - 1);

g.setFont(new Font("Arial Black", Font.PLAIN, 16));

//随机生成线条,让图片看起来更加杂乱

g.setColor(getRandColor(160, 200));

for (int i = 0; i < 155; i++)

{

int x = random.nextInt(width - 1);

int y = random.nextInt(height - 1);

int xl = random.nextInt(6) + 1;

int yl = random.nextInt(12) + 1;

g.drawLine(x, y, x + xl, y + yl);

}

for (int i = 0; i < 70; i++)

{

int x = random.nextInt(width - 1);

int y = random.nextInt(height - 1);

int xl = random.nextInt(12) + 1;

int yl = random.nextInt(6) + 1;

g.drawLine(x, y, x - xl, y - yl);

}

//用于保存系统生成的随机字符串

StringBuffer sRand = new StringBuffer(6);

for (int i = 0; i < 6; i++)

{

String tmp = getRandomChar();

sRand = sRand.append(tmp);

//将系统生成的随机字符添加到图形验证码图片上

g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));

g.drawString(tmp, 15 * i + 10, 15);

}

//赋值验证码

this.str = sRand.toString();

g.dispose();

ByteArrayInputStream input = null;

ByteArrayOutputStream output = new ByteArrayOutputStream();

//输出图形验证码图片

try

{

ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);

ImageIO.write(image, "JPEG", imageOut);

imageOut.close();

input = new ByteArrayInputStream(output.toByteArray());

}catch(Exception e){

System.out.println("验证码图片产生出现错误:" + e.toString());

}

//赋值图像

this.image = input;

}

/*

* 生成随机字符

*/

private String getRandomChar()

{

int rand = (int) Math.round(Math.random() * 2);

long itmp = 0;

char ctmp = '\u0000';

switch(rand)

{

//生成大写字母的情形

case 1:

itmp = Math.round(Math.random() * 25 + 65);

ctmp = (char) itmp;

return String.valueOf(ctmp);

//生成小写字母的情形

case 2:

itmp = Math.round(Math.random() * 25 + 97);

ctmp = (char) itmp;

return String.valueOf(ctmp);

//生成数字的情形

default:

itmp = Math.round(Math.random() * 9);

return String.valueOf(itmp);

}

}

}

action:

package action;

import java.io.ByteArrayInputStream;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import authImg.AuthImg;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class CreateCodeImg extends ActionSupport

{

private static final long serialVersionUID = 1L;

public void setInputStream(ByteArrayInputStream inputStream)

{

this.inputStream = inputStream;

}

public ByteArrayInputStream getInputStream()

{

return inputStream;

}

public String execute() throws Exception

{

HttpServletResponse response = ServletActionContext.getResponse();

//阻止生成页面被缓存,保证每次重新生成随机验证码

response.setHeader("Pragma", "No-cache");

response.setHeader("Cache-Control", "no-cache");

response.setHeader("Cache-Control", "no-store");

response.setDateHeader("Expires", 0);

response.setContentType("image/jpeg");

AuthImg authImg = AuthImg.Instance();

// 取得带有随机字符串的图片

setInputStream(authImg.getImage());

// 取得随机字符串放入HttpSession

ActionContext.getContext().getSession().put("authImg", authImg.getString());

return SUCCESS;

}

private ByteArrayInputStream inputStream;

}

struts.xml部分

image/jpeg

inputStream

部署后,进入login.jsp出现

20:43:46,389 DEBUG SessionImpl:248 - opened session at timestamp: 12526730262

2009-9-11 20:43:50 org.apache.catalina.core.ApplicationContext log

信息: Marking servlet img as unavailable

2009-9-11 20:43:50 org.apache.catalina.core.StandardWrapperValve invoke

严重: Allocate exception for servlet img

java.lang.IllegalAccessException: Class org.apache.catalina.core.StandardWrapper can not access a member of class authImg.AuthImg with modifiers "private"

at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)

at java.lang.Class.newInstance0(Unknown Source)

at java.lang.Class.newInstance(Unknown Source)

at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1116)

at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:809)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)

at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)

at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:574)

at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527)

at java.lang.Thread.run(Unknown Source)

请帮忙

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值