1。bufferedimageの紹介
検証コード画像の生成は、主にBufferedImageクラスを使用します。
ドローイメージサーブレットを作成して、検証コード画像を生成します
パッケージgacl.response.study; import java.awt.color; import java.awt.font; import java.awt.graphics; Import java.awt.graphics2d; import java.awt.image.image.bufferedimage; import java.ioexception; import java.util.util.util.util.util.util.util.util.util.util.iiio.iioexce javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse;/**最終的な長いSerialVersionUid = 3038623696184546092l; public static final int width = 120; //生成された画像の幅public static final height = 30; //生成された画像の高さpublic void doget(httpservletrequest request、httpservletrequest Response)は、servletexception、ioexception {this.dopost(request、response); } public void dopost(httpservletrequest request、httpservletResponse応答)servletexception、ioexception {string createTypefLag = request.getParameter( "recreateTypefLag");メモリで画像を作成するbufferedimage bi = new bufferedimage(幅、高さ、bufferedimage.type_int_rgb); // 2。画像グラフィックを取得g = bi.getGraphics(); // 3。 Picture Setbackground(g)のバックカラーを設定します。 // 4。画像の境界線を設定しましたセットボーダー(g); // 5。画像に干渉線を描画します。 // 6。写真にランダム数を書き込む//文字列ランダム= drawrandomnum((graphics2d)g、 "ch"); //中国検証コード画像// string random = drawrandomnum((graphics2d)g、 "nl");写真//文字列ランダム= drawrandomnum((graphics2d)g、 "l"); //純粋な文字検証コード写真文字列= drawrandomnum((graphics2d)g、createTypeflag);乱数をセッションリクエストに保存します。getSession()。setAttribute( "checkcode"、random); // 8。応答ヘッダーを設定して、response.setContentType( "Image/jpeg"); // respons.setheader( "content-type"、 "image/jpeg"); // 9。応答ヘッダーを設定して、ブラウザを制御してResponse.setDateHeader( "Expries"、-1)をキャッシュしないように制御します。 Response.setheader( "Cache-Control"、 "no-cache"); Response.setheader( "Pragma"、 "no-cache"); // 10。画像をブラウザーImageio.write(bi、 "jpg"、response.getOutputStream())に書き込みます。 } / ***画像の背景色を設定* @param g* / private void setbackground(グラフィックスG){//色g.setcolor(color.white); //エリアG.FillRect(0、0、幅、高さ)を埋める; } / ***画像の境界線* @param g* / private void setborder(graphics g){//境界色の色G.setcolor(color.blue); //ボーダーエリアG.DrawRect(1、1、幅-2、高さ-2); } / ***画像にランダムな線を描く* @param g* / private void drawrandomline(グラフィックスG){// color g.setcolor(color.green); //行数を設定し、(int i = 0; i <5; i ++){int x1 = new Random()。nextint(width); int y1 = new Random()。nextint(height); int x2 = new Random()。nextint(width); int y2 = new Random()。nextint(height); G.drawline(x1、y1、x2、y2); }} /** *ランダム文字を描画 * @param g * @param createTypeflag * @return * String ... createTypefLagは変数パラメーターです。 Javaは、可変パラメーターを配列として扱います。注:変数パラメーターは、最後の項目*/ private string drawrandomnum(graphics2d g、string ... createTypeflag){// Color G.SetColor(color.red); // font g.setfont(new Font( "宋体"、font.bold、20)); //一般的に使用される漢字String Basechinesechar = "/u7684/u4e00/u4e86/u662f/u6211/u4e0d/u5728/u4eba/u4eec/u6709/u6765/u4ed6/u8fd9/u4e0a/u7740 /u4e2a/u5730/u5230/u5927/u91cc/u8bf4/u5c31/u53bb/u5b50/u5f97/u4e5f/u548c/u90a3/u8981/u4e0b/u4e0b/ U770B/U5929/U65F6/U8FC7/U51FA/U5C0F/U4E48/U8D77/U4F60/U90FD/U628A/U597D/U8FD8/U591A/U6CA1/U 4E3A/U53C8/U53EF/U5BB6/U5B66/U53EA/U4EE5/U4E3B/U4F1A/U6837/U5E74/U60F3/U751F/U540C/U8001/U4E 2D/U5341/U4ECE/U81EA/U9762/U524D/U5934/U9053/U5B83/U540E/U7136/U8D70/U5F88/U50CF/U89C1/U4E2 4/U7528/U5979/U56FD/U52A8/U8FDB/U6210/U56DE/U4EC0/U8FB9/U4F5C/U5BF9/U5F00/U800C/U5DF1/U4E9B/U4E9B/ U73B0/U5C71/U6C11/U5019/U7ECF/U53D1/U5DE5/U5411/U4E8B/U547D/U7ED9/U957F/U6C34/U51E0/U4E49/U 4E09/U58F0/U4E8E/U9AD8/U624B/U77E5/U7406/U773C/U5FD7/U70B9/U5FC3/U6218/U4E8C/U95EE/U4F46/U8E AB/U65B9/U5B9E/U5403/U505A/U53EB/U5F53/U4F4F/U542C/U9769/U6253/U5462/U771F/U5168/U624D/U56D B/U5DF2/U6240/U654C/U4E4B/U6700/U5149/U4EA7/U60C5/U8DEF/U5206/U603B/U6761/U767D/U8BDD/U4E1C /u5e2d/u6b21/u4eb2/u5982/u88ab/u82b1/u53e3/u653e/u513f/u5e38/u6c14/u4e94/u7b2c/u4f7f/u5199/u5199/ U519B/U5427/U6587/U8FD0/U518D/U679C/U600E/U5B9A/U8B8/U5FEB/U660E/U884C/U56E0/U522B/U98DE/U5 916/U6811/U7269/U6D3B/U90E8/U95E8/U65E0/U5F80/U8239/U671B/U65B0/U5E26/U961F/U5148/U529B/U5B 8c/u5374/u7ad9/u4ee3/u5458/u673a/u66f4/u4e5d/u60a8/u6bcf/u98ce/u7ea7/u8ddf/u7b11/u554a/u5b69 /u4e07/u5c11/u76f4/u610f/u591c/u6bd4/u9636/u8fde/u8f66/u91cd/u4fbf/u6597/u9a6c/u54ea/u5316/u5316/ U592A/U6307/U53D8/U793E/U4F3C/U58EB/U8005/U5E72/U77F3/U6EE1/U65E5/U51B3/U767E/U539F/U62FF/U7 FA4/U7A76/U5404/U516D/U672C/U601D/U89E3/U7ACB/U6CB3/U6751/U516B/U96BE/U65E9/U8BBA/U5417/U68 39/U5171/U8BA9/U76F8/U7814/U4ECA/U5176/U4E66/U5750/U63A5/U5E94/U5173/U4FE1/U89C9/U6B65/U53C D/U5904/U8BB0/U5C06/U5343/U627E/U4E89/U9886/U6216/U5E08/U7ED3/U5757/U8DD1/U8C01/U8349/U8D8A/U5B57/U52A0/U81 1A/U7D27/U7231/U7B49/U4E60/U9635/U6015/U6708/U9752/U534A/U706B/U6CD5/U9898/UU9752/U534A/U706B/U6CD5/U9898/UU 5EFA/U8D76/U4F4D/U5531/U6D77/U4E03/U5973/U4EFB/U4EF6/U611F/U51C6/U5F20/U56E2/U5C4B/U79BB/U8 272/U8138/U7247/U79D1/U5012/U775B/U5229/U4E16/U521A/U4E14/U7531/U9001/U5207/U661F/U5BFC/U665 A/U8868/U591F/U6574/U8BA4/U54CD/U96EA/U6D41/U672A/U573A/U8BE5/U5E76/U5E95/U6DF1/U523B/U5E73/U5E73/U5E73/U5E95 U4F1F/U5FD9/U63D0/U786E/U8FD1/U4EAE/U8F7B/U8BB2/U519C/U53E4/U9ED1/U544A/U754C/U62C9/U540D/UU 5440/u571f/u6e05/u9633/u7167/u529e/u53f2/u6539/u5386/u8f6c/u753b/u9020/u5634/u6b64/u6cbb/u5 317/U5FC5/U670D/U96E8/U7A7F/U5185/U8BC6/U9A8C/U4F20/U4E1A/U83DC/U722C/U7761/U5174/U5F62/U91C F/U54B1/U89C2/U82E6/U4F53/U4F17/U901A/U51B2/U5408/U7834/U53CB/U5EA6/U672F/U996D/U516C/U65C1/U62 3F/U6781/U5357/U67AA/U8BFB/U6C99/U5C81/U7EBF/U91CE/U575A/U7A7A/U6536/U7B97/U81F3/U653F/UU653F/U 57ce/u52b3/u843d/u94b1/u7279/u56f4/u5f1f/u80dc/u6559/u70ed/u5c55/u5305/u6b4c/u7c7b/u6e10/u5 F3A/U6570/U4E61/U547C/U6027/U97F3/U7B54/U54E5/U9645/U65E7/U795E/U5EA7/U7AE0/U5E2E/U5566/U53D 7/U7CFB/U4EE4/U8DF3/U975E/U4F55/U725B/U53D6/U5165/U5CB8/U6562/U6389/U5FFD/U79CD/U88C5/U9876 /u6025/u6797/u505c/u606f/u53e5/u533a/u8863/u822c/u62a5/u53f6/u538b/u6162/u53d4/u80cc/u7ec6 "; //数字と文字列basenumletterの組み合わせ= "0123456789ABCDEFGHJKLMNOPQRSTUVWXYZ"; //純粋な数値文字列basenum = "0123456789"; //純粋な文字列baseletter = "abcdefghjklmnopqrstuvwxyz"; // createTypefLag [0] == nullは、パラメーターが渡されないことを意味します(createTypeflag.length> 0 && null!= createTypefLag [0]){if(createTypeflag [0] .equals( "ch")){//中国語の文字はCreaterandomghar(G、Basechinesechar); } else if(createTypefLag [0] .equals( "nl")){//数字と文字の組み合わせを挿入しますCreaterandomChar(g、basenumletter); } else if(createTypefLag [0] .equals( "n")){//番号を迎えるcreaterandomchar(g、basenum); } else if(createTypefLag [0] .equals( "l")){//文字return return createrandomchar(g、baseletter); }} else {//デフォルトは数字と文字の組み合わせをインターセプトしますreturn createrandomchar(g、basenumletter); } 戻る ""; } / ***ランダム文字の作成* @param g* @param Basechar* @returnランダム文字* / private string createrandomchar(graphics2d g、string basechar){stringbuffer sb = new StringBuffer(); int x = 5;文字列ch = ""; //(int i = 0; i <4; i ++){// font回転角度int度= new Random()。nextint()%30; ch = basechar.charat(new Random()。nextint(basechar.length()) + ""; sb.append(ch); //前方角度G.rotate(degree * math.pi / 180、x、20); G.DrawString(CH、X、20); //逆角度G.rotate(-degree * math.pi / 180、x、20); x += 30; } return sb.toString(); }}操作結果は次のとおりです。
2。フォームの検証コード画像を使用します
<%@ページ言語= "java" import = "java.util。*" pageencoding = "utf-8"%> <!doctype html public " - // w3c // dtd html 4.01 transitional // en"> <html> <head> <title> form formififing of </titlififist = "> </<cript typrifict"> </< changeimg(){document.getElementById( "validateCodeimg")。src = "$ {pagecontext.request.contextpath}/servlet/drawimage?"+math.random(); } </script> </head> <body> <form action = "$ {pagecontext.request.contextpath}/servlet/checkservlet" method = "post">検証コード:<入力タイプ= "テキスト" name = "validatecode"/> <img src = "$ {pagecontext.request.context onclick = "changeimg()"> <a href = "javascript:void(0)" onclick = "changeimg()">別の1つを変更できません</a> <br/> <入力タイプ= "submit" value = "submit"> </form> </body> </html>実行結果:
生成できる文字と数字の組み合わせの検証コード写真に加えて、ドローイメージサーブレットは、漢字、純粋な数字、純粋な文字の検証コード写真を生成することもできます。以下に示すように、合意された生成識別子パラメーターをドローイムサーブレットに渡すだけが必要です。
<%@ページ言語= "java" import = "java.util。*" pageencoding = "utf-8"%> <!doctype html public " - // w3c // dtd html 4.01 transitional // en"> <html> <head> <title> form formififing of </titlififist = "> </<cript typrifict"> </< ChangeImg(obj、createTypeflag){document.getElementById(obj.id).src = "$ {pagecontext.request.contextpath}/servlet/drawimage?createTypeflag ="+createTypeflag+"&"+math.random(); } </script> </head> <body> <form action = "$ {pagecontext.request.contextpath}/servlet/checkservlet" method = "> digital lette mixed visification code:<input type =" text "name =" validatecode "/> <img src =" $ {pagecontext.context.contextpath} " id = "validatecodeimg1" onclick = "changeimg(this、 'nl')"> <br/>中国語検証コード:<入力タイプ= "text" name = "validatecode"/> <img src = "$ {pagecontext.request.contextpath}/drawim? onclick = "ChangeImg(this、 'ch')"> <br/>英語検証コード:<入力タイプ= "text" name = "validatecode"/> <img src = "$ {pagecontext.request.contextpath}/servlet/drawimage?createTyplag = l" id = "balidatecodeimg3" n '' n '' mid "=" <br/>デジタル検証コード:<入力型= "テキスト" name = "validatecode"/> <img src = "$ {pagecontext.request.contextpath}/servet/drawimage?createTypeflag = n" id = "validatecodeimg4" onclick = "submant =" ">"> <br/ </form> </body> </html>操作結果は次のとおりです。
3.サーバー側のフォームフォームによって提出された検証コードの処理
パッケージgacl.response.study; import java.io.ioexception; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.http.httptrequest; javax.servlet.http.httpservletResponse;/*** @author gacl*サーバー側で検証コードを受信した後の処理*/public class checkservletはhttpservletを拡張します{public void doget(httpservletrequestリクエスト、httpservletesception = show servletexexception、ioexexception、ioeexception、ioexception request.getParameter( "validAtecode"); //クライアントブラウザーString ServerCheckCode =(String)request.getSession()。getAttribute( "CheckCode"); //サーバー側セッションから検証コードを取得するif(client checkcode.equals.equals(server checkcode){/client secion session(server checkcode){/client secion session(server checkcode.equals){// client secion sessionの検証コードを取得します。等しい場合、検証がSystem.out.println( "検証コード検証が通過!")に渡されたことを意味します。 } else {system.out.println( "検証コード検証に失敗!"); }} public void dopost(httpservletrequest request、httpservletResponse応答)servletexception、ioexception {doget(request、response); }}上記はこの記事に関するものです。すべての人の学習に役立つことを願っています。