<
img
border
=0
src
="imageAction.do"
>
webwork自生成验证码图片ResultTyp
ImageResult.class
package
com.test.randomimage;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.opensymphony.webwork.ServletActionContext;
import com.opensymphony.webwork.dispatcher.WebWorkResultSupport;
import com.opensymphony.xwork.ActionInvocation;
public class ImageResult extends WebWorkResultSupport
{
private HttpSession session;
@Override
protected void doExecute(String arg0, ActionInvocation invocation) throws Exception
{
// 获得Request
HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(
ServletActionContext.HTTP_REQUEST);
// 获得response
HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(
ServletActionContext.HTTP_RESPONSE);
// 设置无缓存
response.setHeader( " Pragma " , " No-cache " );
response.setHeader( " Cache-Control " , " no-cache " );
response.setDateHeader( " Expires " , 0 );
VerifyImage verify = new VerifyImage();
OutputStream os = response.getOutputStream();
// 获得随机验证码
String str = verify.GetImage(os);
// 获得session
session = request.getSession( true );
// 将验证码放入session
session.setAttribute( " rand " , str);
}
}
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.opensymphony.webwork.ServletActionContext;
import com.opensymphony.webwork.dispatcher.WebWorkResultSupport;
import com.opensymphony.xwork.ActionInvocation;
public class ImageResult extends WebWorkResultSupport
{
private HttpSession session;
@Override
protected void doExecute(String arg0, ActionInvocation invocation) throws Exception
{
// 获得Request
HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(
ServletActionContext.HTTP_REQUEST);
// 获得response
HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(
ServletActionContext.HTTP_RESPONSE);
// 设置无缓存
response.setHeader( " Pragma " , " No-cache " );
response.setHeader( " Cache-Control " , " no-cache " );
response.setDateHeader( " Expires " , 0 );
VerifyImage verify = new VerifyImage();
OutputStream os = response.getOutputStream();
// 获得随机验证码
String str = verify.GetImage(os);
// 获得session
session = request.getSession( true );
// 将验证码放入session
session.setAttribute( " rand " , str);
}
}
VerifyImage.class
package
com.test.randomimage;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
public class VerifyImage
{
public String GetImage(OutputStream outputStream)
{
// 验证码宽和高
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(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( 20 + random.nextInt( 110 ), 20 + random.nextInt( 110 ), 20 + random
.nextInt( 110 )));
g.drawString(rand, 13 * i + 6 , 16 );
}
g.dispose();
try
{
ImageIO.write(image, " JPEG " , outputStream);
outputStream.flush();
return sRand;
} catch (IOException e)
{
e.printStackTrace();
return " fail " ;
}
}
public 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);
}
}
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
public class VerifyImage
{
public String GetImage(OutputStream outputStream)
{
// 验证码宽和高
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(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( 20 + random.nextInt( 110 ), 20 + random.nextInt( 110 ), 20 + random
.nextInt( 110 )));
g.drawString(rand, 13 * i + 6 , 16 );
}
g.dispose();
try
{
ImageIO.write(image, " JPEG " , outputStream);
outputStream.flush();
return sRand;
} catch (IOException e)
{
e.printStackTrace();
return " fail " ;
}
}
public 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);
}
}
ImageAction.class
package
com.test.randomimage;
import com.opensymphony.xwork.Action;
public class ImageAction implements Action
... {
public String execute() throws Exception
...{
return SUCCESS;
}
}
import com.opensymphony.xwork.Action;
public class ImageAction implements Action
... {
public String execute() throws Exception
...{
return SUCCESS;
}
}
xwork.xml
<
result-types
>
< result-type name ="image" class ="com.test.randomimage.ImageResult" />
</ result-types >
< action name ="imageAction" class ="com.test.randomimage.ImageAction" >
< result name ="success" type ="image" />
</ action >
< result-type name ="image" class ="com.test.randomimage.ImageResult" />
</ result-types >
< action name ="imageAction" class ="com.test.randomimage.ImageAction" >
< result name ="success" type ="image" />
</ action >
test.jsp
<
img
border
=0
src
="imageAction.do"
>