利用Struts2製作簡單驗證碼:
1、Struts.xml配置:
<struts>
<package name="default" extends="struts-default" namespace="/">
<action name="hello" class="com.strus1.Hello">
<result name="success" > /index.jsp</result>
</action>
<!-- 驗證碼 -->
<action name="YzmAction" class="com.strus1.YzmAction">
<result name="ok" type="stream">
<param name="inputName">inputStream</param>
<!--傳輸類型-->
<param name="contentType">${contentType}</param>
</result>
</action>
</package>
</struts>
2、代碼如下:
package com.strus1;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Random;
import javax.imageio.ImageIO;
public class YzmAction {
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
private InputStream inputStream;
private String contentType;
private int contentLength;
public String execute() throws IOException{
//設置傳輸類型
contentType="image/jpeg";
//創建bufferedimage
BufferedImage bufferedImg=new BufferedImage(200, 100, BufferedImage.TYPE_INT_RGB);
//創建畫筆
Graphics2D g= (Graphics2D) bufferedImg.getGraphics();
//g.setBackground(Color.WHITE);
Random random=new Random();
//隨機畫幾個數字
for (int i = 0; i < 4; i++) {
g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));
g.setFont(new Font("", Font.BOLD, 50));
g.drawString(random.nextInt(10)+"",i*50+10, 80);
}
ByteArrayOutputStream byteArrayOut=new ByteArrayOutputStream();
//把畫好的bufferedImg 包裝一下,寫到byteArrayOut裏面去
ImageIO.write(bufferedImg, "jpeg", byteArrayOut);
//contentLength=byteArrayOut.toByteArray().length;
inputStream=new ByteArrayInputStream(byteArrayOut.toByteArray());
return "ok";
}
}
3、效果圖