用JSP實現圖形驗證碼

來源:互聯網
上載者:User
js|圖形|驗證碼

import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.image.*;


public class ValidateCode  extends HttpServlet {

 private Font mFont=new Font("宋體", Font.PLAIN,12);//設定字型
 //處理post
 public void doPost(HttpServletRequest request,HttpServletResponse response)
   throws ServletException,IOException {

  doGet(request,response);
}
 public void doGet(HttpServletRequest request,HttpServletResponse response)
   throws ServletException,IOException {
 //取得一個1000-9999的隨機數
  String s="";

  int intCount=0;

  intCount=(new Random()).nextInt(9999);//

  if(intCount<1000)intCount+=1000;

  s=intCount+"";


  //儲存入session,用於與使用者的輸入進行比較.
  //注意比較完之後清除session.

  HttpSession session=request.getSession (true);

  session.setAttribute("validateCode",s);

  response.setContentType("image/gif");

  ServletOutputStream out=response.getOutputStream();

  BufferedImage image=new BufferedImage(35,14,BufferedImage.TYPE_INT_RGB);

  Graphics gra=image.getGraphics();
  //設定背景色
  gra.setColor(Color.yellow);

  gra.fillRect(1,1,33,12);
  //設定字型色
  gra.setColor(Color.black);

  gra.setFont(mFont);
  //輸出數字
  char c;

  for(int i=0;i<4;i++) {

  c=s.charAt(i);

  gra.drawString(c+"",i*7+4,11); //7為寬度,11為上下高度位置

  }

  JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);

  encoder.encode(image);

  out.close();

  }
}

  java的圖片處理包需要圖形環境,而linux上沒有啟動圖形環境,找不到圖形環境的server(X11 window server using ':0.0' )所以會報這個錯。而通過java -Djava.awt.headless=true 這個參數的指定就可以避免java 2d去找圖形環境。

  要麼這樣試試,應該也可以。在servlet裡一開始寫一句:

System.setProperty("java.awt.headless","true");

  web伺服器的java虛擬機器必須加以個參數java.awt.headless=true

  以tomcat為例

  可以在/etc/profile或啟動web服務的使用者的.bash_profile中的CATALINA_OPTS變數中加入:

CATALINA_OPTS="... -Djava.awt.headless=true"

  其他的也可以看看啟動指令碼。只要加上這個參數就沒問題了。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.