ツール:
パッケージcom.lhy.web.servlet; import java.awt.basicroke; import java.awt.color; import java.awt.font; Import java.awt.graphics2d; Import java.awt.image.Bufferedimage; Import Java.io.filenotexexexputsception; java.io.ioexception; Import java.io.outputstream; Import java.util.random; Import javax.imageio.imageio; public class verifycode {private int w = 70; // picture lenge int h = 35; // picture width private random r = new Random();フォント "、"中国のカイテクニック "、" Bold Font "、" Chinese New Wei "、" Chinese lishu "、" Microsoft Elegant Black "、" Kai Technique_GB2312 "} private String [] fontNames = {" song font "、" chinese kai technique "、" bold font "、" microsoft eelgant black " //検証コードオプション文字プライベート文字列コード= "23456789ABCDEFGHJKMNOPQRSTUVWXYZABCDEFGHJKMNPQRSTUVWXYZ"; //背景色プライベートカラーbgcolor = new Color(255、255、255); //検証コードのテキストプライベート文字列テキスト。 //ランダムカラープライベートカラーランダムカラー(){int red = r.nextint(150); int green = r.nextint(150); int Blue = R.Nextint(150);新しい色(赤、緑、青)を返します。 } //ランダムフォントプライベートフォントランダムフォント(){int index = r.nextint(fontnames.length); string fontname = fontnames [index]; //ランダムフォント名int style = r.nextint(4); //ランダムスタイルを生成する、0(ノースタイル)、1(bold)、2(italics)、3(bold + italics)int size = r.nextint(5) + 24; //ランダムフォントサイズを生成します。24〜28新しいフォント(fontname、style、size)を返します。 } //干渉線の描画プライベートボイドドローライン(bufferedimageイメージ){int num = 3; // 3グラフィック2d g2 =(graphics2d)image.getgraphics(); for(int i = 0; i <num; i ++){// 2つのポイントの座標、つまり4値int x1 = r.nextint(w); int y1 = r.nextint(h); int x2 = r.nextint(w); int y2 = r.nextint(h); g2.setstroke(new BasicStroke(1.5F)); g2.setcolor(color.blue); //干渉線は青g2.drawline(x1、y1、x2、y2); // draw line}} //文字をランダムに生成private char randomChar(){int index = r.nextint(codes.length()); return codes.charat(index); } // bufferedimage private bufferedimage createimage(){// width、height、image type bufferedimage image = new bufferedimage(w、h、bufferedimage.type_int_rgb); Graphics2d g2 =(graphics2d)image.getGraphics(); g2.setcolor(this.bgcolor); g2.fillrect(0、0、w、h);画像を返します。 } //検証コードのテキストを返す画像public string gettext(){return text; } //画像を指定された出力ストリームに保存しますpublic static void output(bufferedimage image、outputStream out)throws ioexception {imageio.write(image、 "jpeg"、out); } //このメソッドを呼び出して検証コードを取得しますpublic bufferedimage getimage(){bufferedimage image = createimage(); //画像バッファーグラフィックス2d g2 =(graphics2d)image.getgraphics(); //描画環境を取得しますstringbuilder sb = new stringbuilder(); i <4; i ++){// 4回、1文字列s = randomChar()+""; //文字sb.append(s)を生成するたびに生成します。 // sbフロートx = i * 1.0f * w /4に文字を追加します。 //現在の文字g2.setfont(randomfont())のx軸座標を設定します。 //ランダムフォントg2.setcolor(randomcolor())を設定します。 //ランダムカラーg2.drawstring(s、x、h-5)を設定します。 //絵を描く} this.text = sb.toString(); //生成された文字列をthis.text drawline(image)に割り当てます。 //干渉線を返す画像を追加します。 } public static void main(string [] args)throws filenotfoundexception、ioexception {verifycode vc = new verifyCode(); // verifyCodeクラスbufferedimage bi = vc.getimage(); // call getimage()メソッドを取得するverifycode class bufferedimage bi = vc.getimage() 3.jpg ")verifyCodeServlet:
パッケージcom.lhy.web.servlet; import java.awt.image.bufferedimage; Import java.io.ioexception; Import javax.servletexception; Import javax.servlet.http.httpservlet; Import javax.servlet.http.httppservletrequest; javax.servlet.http.httpservletResponse; public class verifycodeServletはhttpservlet {public void doget(httpservletrequest request、httpservletresponse応答)servletexception、ioexception { /**1。 vc = new verifyCode(); bufferedimage image = vc.getimage(); request.getSession()。setAttribute( "session_vcode"、vc.getText()); //画像のテキストをセッションフィールドに保存verifyCode.output(image、response.getPutStream()); }}LoginServlet:
パッケージcom.lhy.web.servlet; import java.io.ioexception; import javax.servlet.requestdispatcher; import javax.servletexception; Import javax.servlet.http.cookie; Import javax.servlet.http.httpservlet; javax.servlet.http.httpservletrequest; Import javax.servlet.httpservletrequest; Import javax.servlet.httpservletresponse; Import javax.servlet.http.httssession;パブリッククラスLoginservlete httpsevet dopost(httpservletrequest request、httpservletresponse応答)Servletexception、ioexception { /**検証コード* 1。セッションから正しい検証コードを取得* 2。 * 4。同じことが真の場合、実行されます。それ以外の場合は、リクエストドメインにエラーメッセージを保存し、login.jsp */ string sessioncode =(string)request.getSession()。 string paramcode = request.getParameter( "verifyCode"); if(!paramcode.equalsignorecase(sessionCode)){request.SetAttribute( "MSG"、 "検証コードエラー!"); request.getRequestDispatcher( "/login.jsp")。戻る; } /** 1。フォームデータを取得* / //中国語の質問request.setcharacterencoding( "utf-8"); //文字列username = request.getParameter( "username");文字列パスワード= request.getParameter( "password"); /** 2。ユーザー名とパスワードが正しいかどうかを確認*/if( "itcast" .equalsignorecase(username)){// login rogin custely/**追加アイテム:クッキーにユーザー名を保存してクライアントブラウザーに送信し、login.jspが再び開かれたとき、クッキー= Cookie = cookie in logie in logie in logie in jsp*/display in uss and jsp Cookie( "Uname"、username); // Cookie Cookie.setMaxage(60* 60* 24); // Cookie Lifeを1日間のResponse.AddCookie(Cookie)に設定します。 session.setattribute( "username"、username); // session domain response.sendredirect( "/test/succ1.jsp")にユーザー名を保存します。 } else {// login failed/** 4。失敗した場合*>エラーメッセージを保存してドメインを要求*> login.jsp*/request.setattribute( "msg"、 "ユーザー名またはパスワードのエラー!"); requestDisPatcher QR = request.getRequestDisPatcher( "/login.jsp"); // get forwarder qr.forward(request、response); // wordwer}}}}login.jsp:
<%@ page Language = "Java" Import = "Java.util。*" PageEncoding = "Utf-8"%> <%string path = request.getContextpath(); string basepath = request.getscheme()+"://"+request.getServername()+":"+request.getServerport( " - // w3c // dtd html 4.01 transitional // en"> <html> <head> <base href = "<%= basepath%>" rel = "letional nofollow"> <title> my jsp 'login.jsp' start page </title> <meta http-equiv = "content" http-equiv = "cache-control" content = "no-cache"> <meta http-equiv = "content =" 0 "> <meta http-equiv =" keyword1、keyword3 "keyword3"> <meta http-equiv = "content =" type = "text/css" href = "styles.css" rel = "external nofollow"> - > <script type = "text/javascript"> function _change(){/ *1。IMG要素を取得します。 imgele.src = "<%= basepath%> servlet/verifycodeservlet?a =" + new date()。gettime();} </script> </head> <body> <% - このページもログインフォームを提供し、エラーメッセージを表示します-%> <h1> login </h1> <%空の場合、 ""空でない場合、cookie */string uname = ""; cookie [] cs = request.getCookies(); //リクエストですべてのクッキーを取得します(cs!= null){//(cookie cs:cs){// loopが(us)if(us)for(cookie cs){us)for(cookie cs)がある場合(// {// uname uname = c.getValue(); //このCookieの値を取得し、変数unameに}}%> <%string message = ""; string msg =(string)request.getAttribute( "msg"); //要求フィールドでmsgという名前の属性を取得するif(msg!= null){message = msg; }%> <font color = "red"> <b> <%= message%> </b> </font> <form action = "servlet/loginservlet" method = "post"> <% - ユーザー名テキストボックスにクッキーのユーザー名を表示 - %>ユーザー名>ユーザー名:<入力タイプ= "テキスト" name = "username" <%= "<%=" name = "password"/> <br/>検証コード:<入力タイプ= "text" name = "verifycode" size = "3"/> <img id = "img" src = "<%= basepath%> servlet/verifycodeServlet"/> <a href = "javascript:_change() value = "login"/> </form> </body> </html>loginsuccess:
<body> <h1> caud1 </h1> <%string username =(string)session.getattribute( "username"); if(username == null){/ * 1。要求ドメインにエラーメッセージを保存し、login.jsp */request.setattribute( "msg"、 request.getRequestDispatcher( "/login.jsp")。 return;}%>ようこそ、ウォームウェルカム、ようこそ<%=username %>リーダーが仕事を導く!
</body> </html>
構成ファイル:
<Servlet> <Servlet-Name> loginServlet </servlet-name> <servlet-class> com.lhy.web.servlet.loginservlet </servlet-class> </servlet-mapping> <servlet-mapping> <servet-name> loginservlet </servlet-name> <urlperthern>/loginernservet </servlet-mapping> <servlet> <servlet-name> verifyCodeServlet </servlet-name> <servlet-class> com.lhy.web.servlet.verifycodeServlet </servlet-class> </servlet> <サーブレットマッピング> <サーブレット - name> verifycodeservlet </servlet-name> <url-pattern>/servlet/verifyCodeServlet </url-pattern> </servlet-mapping>
提案:キャッシュなしで検証コードを生成するサーブレットを設定することをお勧めします。そうすることで、ページが検証コード画像を要求したときにタイムスタンプを追加する必要はありません。タイムスタンプを追加することは、ブラウザをだまして、ブラウザがキャッシュ内の検証コード画像を読み取らないようにすることであり、クリックして変更した後に応答はありません。これは良いことではありません。クリックして別の画像を変更するたびに、ブラウザは新しく入手した写真をローカルでキャッシュします。サーブレットにキャッシュされていない場合、局所的にキャッシュしません。
要約します
上記は、編集者が紹介したJava検証コードツールの例です。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!