1.首先创建ImageCodeAction类
package com.szy.bean.action;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.Random;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* 验证码生成类
* @author soft1
*
*/
public class ImageCodeAction extends BaseAction{
/**
* 使用struts2的type=stream输出
*/
private InputStream inputStream;
public String execute(){
//step1:生成长60宽20的图片
BufferedImage image=new BufferedImage(60,20,BufferedImage.TYPE_INT_RGB);
//得到画笔
Graphics g=image.getGraphics();
//随机设置画笔颜色
Random random=new Random();
g.setColor(new Color(random.nextInt(256),random.nextInt(256),random.nextInt(256)));
//填充背景
g.fillRect(0, 0, 60, 20);
//设置画图颜色
g.setColor(new Color(0,0,0));
//随机生成六位数字
String s=random.nextInt(999999)+"";
//将生成的数字放入session中
session.put("imageCode", s);
//将数字画到图片上
g.drawString(s, 5, 15);
//画干扰线
g.drawLine(random.nextInt(50), random.nextInt(45), 0, random.nextInt(74));
g.drawLine(random.nextInt(50), random.nextInt(64), random.nextInt(64), 0);
g.drawLine(random.nextInt(50), 0, random.nextInt(34),random.nextInt(34));
g.drawLine(0, random.nextInt(50), random.nextInt(64), random.nextInt(69));
// step2.将图片赋值给imageStream属性
ByteArrayOutputStream bos = new ByteArrayOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
try {
//将图片压缩成jpeg格式
encoder.encode(image);
//将图片从bos中取出赋值给inputStream
byte[] bytes=bos.toByteArray();//图片信息
inputStream =new ByteArrayInputStream(bytes);
return "success";
} catch (Exception e) {
e.printStackTrace();
}
return "success";
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
}
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.Random;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* 验证码生成类
* @author soft1
*
*/
public class ImageCodeAction extends BaseAction{
/**
* 使用struts2的type=stream输出
*/
private InputStream inputStream;
public String execute(){
//step1:生成长60宽20的图片
BufferedImage image=new BufferedImage(60,20,BufferedImage.TYPE_INT_RGB);
//得到画笔
Graphics g=image.getGraphics();
//随机设置画笔颜色
Random random=new Random();
g.setColor(new Color(random.nextInt(256),random.nextInt(256),random.nextInt(256)));
//填充背景
g.fillRect(0, 0, 60, 20);
//设置画图颜色
g.setColor(new Color(0,0,0));
//随机生成六位数字
String s=random.nextInt(999999)+"";
//将生成的数字放入session中
session.put("imageCode", s);
//将数字画到图片上
g.drawString(s, 5, 15);
//画干扰线
g.drawLine(random.nextInt(50), random.nextInt(45), 0, random.nextInt(74));
g.drawLine(random.nextInt(50), random.nextInt(64), random.nextInt(64), 0);
g.drawLine(random.nextInt(50), 0, random.nextInt(34),random.nextInt(34));
g.drawLine(0, random.nextInt(50), random.nextInt(64), random.nextInt(69));
// step2.将图片赋值给imageStream属性
ByteArrayOutputStream bos = new ByteArrayOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
try {
//将图片压缩成jpeg格式
encoder.encode(image);
//将图片从bos中取出赋值给inputStream
byte[] bytes=bos.toByteArray();//图片信息
inputStream =new ByteArrayInputStream(bytes);
return "success";
} catch (Exception e) {
e.printStackTrace();
}
return "success";
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
}
===========================================================================================================
2.配置struts.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="user" extends="dang-default" namespace="/User">
<!-- 验证码 -->
<action name="imageCode" class="com.szy.bean.action.ImageCodeAction">
<result name="success" type="stream">
<!-- 输出的参数 -->
<param name="inputStream"></param>
</result>
</action>
</package>
</struts>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="user" extends="dang-default" namespace="/User">
<!-- 验证码 -->
<action name="imageCode" class="com.szy.bean.action.ImageCodeAction">
<result name="success" type="stream">
<!-- 输出的参数 -->
<param name="inputStream"></param>
</result>
</action>
</package>
</struts>
===========================================================================================================
3.在test.jsp页面中进行测试
==========================================================================================================
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<img src="/DangNet/User/imageCode" id="num">
<a href="javascript:;" οnclick="document.getElementById('num').src = '/DangNet/User/imageCode?'+(new Date()).getTime()">换一张</a>
</body>
</html>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<img src="/DangNet/User/imageCode" id="num">
<a href="javascript:;" οnclick="document.getElementById('num').src = '/DangNet/User/imageCode?'+(new Date()).getTime()">换一张</a>
</body>
</html>
================================================================================================================
注意: 其中DangNet为工程名