生成随機驗證碼
public classidentfify extends HttpServelet{
public statcifinal char[] chars={'2','3','9','a','z'};//随機字元串
public staticRandom random=new Random();//随機數
public static StringgetRandomString()//擷取6位随機數字元串
{
StringBuffer buffer=newStringBuffer();//random.nextInt(5)傳回從0-4
for(int i=0;i<6;i++)
{
buffer.append(chars[random.nextInt(chars.length)]);
}
returnbuffer.toString();
}
public staticColor getRandomColor()//擷取随機眼色
{
return newColor(random.nextInt(255),random.next(255),random.netInt(255));
}
public staticColor getReverseColor(Color c)//傳回某顔色的反色
{
return newColor(255-c.getRed(),255-c.getGreen(),255-c.getBlue());//紅 綠 藍
}
public void doGet(HttpServletRequestrequest,HttpServletResponse response) throws ServletException,IOException
{
response.setContentType("image/jpeg");//設定輸出類型
StringrandomString=getRandomString();//調用方法擷取随機字元串
request.getSession(true).setAttribute("randomString",randomString);
intwidth=100;int height=30;
Colorcolor=getRandomColor();
Colorreverse=getReverseColor();//反色,用于前景色
BufferedImage bi=new BufferedImage(width,height,BufferedImage.TYPE_INT_REG);//建立一個不帶透明色的圖檔
Graphics2D g=bi.createGraphics();//建立一個 Graphics2D,可以将它繪制到此 BufferedImage 中
g.setFont(newFont(Font.SANS_SERIF,Font.Bold,16));//設定字型
g.setColor(color);
g.filRect(0,0,width,height);//起始坐标,大小,繪制了一個背景色
g.setColor(reverse);
g.drawString(randomString,18,20);//使用目前顔色,目前字型在18,20處的位置編寫一個字元串
for(inti=0,n=random.nextInt(100);i<n;i++)
{
g.drawRect(random.nextInt(width),random.nextInt(height),1,1);//在随機位置上畫一個1,1的正方形
}
//轉換成圖檔并輸出
ServletOutPutStreamout=response.getOutPutStream();
JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(out);
encoder.encode(bi);
out.flush();
}
}
html代碼:
<html>
<head>
<scripttype="text/javascript">
functionreload(){
document.getElementById('imga').src='yanzheng?date='+newDate().toString();
}
</script></head>
<body>
<imgsrc="yanzheng" id="imga"/> <button id="a"οnclick="reload()" >換一張</button>
</body>
</html>
擴充:
getSubimage方法是進行圖檔裁剪。
舉例:
public staticvoid main(String[] args) {
try {
//從特定檔案載入
BufferedImage bi= ImageIO.read(new File("c:\\test.jpg"));
bi.getSubimage(0,0, 10, 10);//前兩個值是坐标位置X、Y,後兩個是長和寬
} catch(IOException e) {
e.printStackTrace();
}
}
ImageIO.write(BufferedImageimage,String format,OutputStream out);方法可以很好的解決問題;
參數image表示獲得的BufferedImage;
參數format表示圖檔的格式,比如“gif”等;
參數out表示輸出流,如果要轉成Byte數組,則輸出流為ByteArrayOutputStream即可;
舉例:
BufferedImageimage = ImageIO.read(new File("1.gif"));
ByteArrayOutputStream out = newByteArrayOutputStream();
boolean flag = ImageIO.write(image,"gif", out);
byte[] b = out.toByteArray();
将字元串轉化為日期
dateformatformat = new SimpleDateFormat("yyyy-mm-dd");
date b=format.parse(request.getParameter("time"));
J2SE 提供的最後一個批注是 @SuppressWarnings。該批注的作用是給編譯器一條指令,告訴它對被批注的代碼元素内部的某些警告保持靜默。
Javaweb檔案結構
注解preconstruct
Httprensponse狀态碼
Page屬性
Include屬性
Plugin屬性