1. BufferedImage 소개
검증 코드 이미지 생성은 주로 다음과 같이 BufferedImage 클래스를 사용합니다.
검증 코드 이미지를 생성하기 위해 DrawImage Servlet을 만듭니다
패키지 gacl.response.study; import java.awt.color; import java.awt.font; import java.awt.graphics; import java.awt.graphics2d; import java.awt.image.bufferedimage; import java.io.io exception; import java.random; javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse;/*** public clates world ht ht extperver ht extperver ht extpervert ht extperce 정적 최종 Long SerialVersionUID = 3038623696184546092L; 공개 정적 최종 int 너비 = 120; // 생성 된 이미지의 너비 공개 정적 최종 int 높이 = 30; // 생성 된 이미지의 높이 공개 void doget (httpservletrequest 요청, httpservletreponse 응답) servletexception, ioxception {this.dopost (요청, 응답); } public void dopost (httpservletrequest request, httpservletreponse response) servletexception, ioexception {string createTypeFlag = request.getParameter ( "CreateTypeFlag"); // 클라이언트가 전달한 CreateTypeFlag ID를받습니다. 메모리 bufferedimage에서 이미지 생성 bi = 새로운 bufferedImage (너비, 높이, bufferedImage.type_int_rgb); // 2. 이미지 그래픽을 가져옵니다. g = bi.getGraphics (); // 3. 그림 셋백 (g)의 뒷면을 설정합니다. // 4. 그림 세트 보더 (G)의 경계를 설정합니다. // 5. 그림 DrawRandomline (g)에 간섭선을 그립니다. // 6. 그림 // string random = drawrandomnum ((Graphics2d) g, "ch"); // 중국어 검증 코드 생성 // string random = drawrandomnum ((Graphics2d) g, "nl"); // 숫자와 문자의 조합에 대한 검증 코드 사진 생성 // strend randomnum (prandomnum (traphics2d) g, n "g, n, n, n, n, n, n, n") 그림 // string random = drawrandomnum ((Graphics2d) g, "l"); // 순수한 문자 검증 코드 생성 사진 rendrand = drawrandomnum ((Graphics2d) g, createTypeFlag); // 클라이언트가 통과 한 CreateTypeFlag ID를 기반으로 확인 코드 이미지 생성 // 7. 세션 request.getSession (). setAttribute ( "checkcode", random)에 임의 숫자를 저장합니다. // 8. 응답 헤더를 Open response.setContentType ( "image/jpeg")로 알리도록 응답 헤더를 설정합니다. // 응답에 해당합니다 .SetHeader ( "Content-Type", "image/jpeg"); // 9. 응답 헤더를 설정하여 브라우저를 제어하여 응답을하지 않습니다. Response.SetHeader ( "Cache-Control", "No-Cache"); Response.SetHeader ( "Pragma", "No-Cache"); // 10. 이미지를 브라우저 imageio.write (bi, "jpg", response.getOutputStream ())에 작성합니다. } / *** 이미지의 배경색을 설정* @param g* / private void setbackgroun // 영역을 채우십시오 g.fillRect (0, 0, 너비, 높이); } / *** 이미지의 경계를 설정* @param g* / private void setborder (그래픽 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 (높이); int x2 = new random (). nextInt (너비); int y2 = new random (). NextInt (높이); G.DrawLine (X1, Y1, X2, Y2); }} /** * 랜덤 문자 그리기 * @param g * @param createTypeflag * @return * String ... CreateTypeFlag는 변수 매개 변수입니다. * Java 1.5는 새로운 기능을 추가했습니다. 변수 매개 변수 : 매개 변수 수가 불확실하고 유형이 결정되는 상황에 적합합니다. Java는 변수 매개 변수를 배열로 취급합니다. 참고 : 변수 매개 변수는 마지막 항목에 있어야합니다*/ private String drawRandomnum (Graphics2d G, String ... CreateTypeFlag) {// color g.setColor (color.red); // font g.setfont 세트 (new font ( "宋体", font.bold, 20)); // 일반적으로 사용되는 중국어 문자열 basechinesechar = ? /u4e2a/u5730/u5230/u5927/u91cc/u8bf4/u5c31/u53bb/u5b50/u5f97/u4e5f/u548c/u90a3/u8981/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/ 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/ U519B/U5427/U6587/U8FD0/U518D/U679C/U600E/U5B9A/U8BB8/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/ 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/ 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 /u623f/u6781/u5357/u67aa/u8bfb/u6c99/u5c81/u7ebf/u91ce/u575a/u7a7a/u6536/u7b97/u81f3/u653f/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"; // 순수한 문자 문자열 planetter = "abcdefghjklmnopqrstuvwxyz"; // createTypeFlag [0] == null은 if (createTypeFlag.length> 0 && null! = createTypeFlag [0]) {if (createTypeFlag [0] .Equals ( "ch")) {// 중국어 문자가 CreaterAndomchar (G, BaseChinesechar); } else if (createTypeFlag [0] .Equals ( "nl")) {// 숫자와 문자의 조합을 가로 채기 return createrandomchar (g, basenumletter); } else if (createTypeFlag [0] .Equals ( "n")) {// 숫자 return createrandomchar (g, basenum); } else if (createTypeFlag [0] .Equals ( "l")) {// 편지를 가로 채기 크리터와 크리터와 (g, baseletter); }} else {// 기본값은 숫자와 문자의 조합을 Createrandomchar (G, Basenumletter)의 조합을 수락합니다. } 반품 ""; } / *** 임의의 문자 생성* @param g* @param basechar* @return random char int x = 5; 문자열 ch = ""; // (int i = 0; i <4; i ++)에 대한 단어 수를 제어합니다. {// 글꼴 회전 각도 int decture = new random (). nextInt () % 30; CH = BASECHAR.charat (new random (). NextInt (BaseChar.length ()) + ""; sb.append (ch); // 전방 각도 G.Rotate (Degreat * Math.pi / 180, x, 20); G.DrawString (ch, x, 20); // 리버스 각도 G.Rotate (-Degree * Math.pi / 180, x, 20); x += 30; } return sb.toString (); }}작업 결과는 다음과 같습니다.
2. 형태 형식의 검증 코드 사진을 사용하십시오
<%@ page language = "java"import = "java.util.*"pageencoding = "utf-8"%> <! doctype html public "-// w3c // dtd html 4.01 Transitional // en"> <html> <head> <title> <html> <head> <title> 형식 형식의 검증 코드를 사용합니다. changeImg () {document.getElementById ( "validateCodeImg"). src = "$ {pagecontext.request.contextPath}/servlet/drawImage?"+math.random (); }. id = "validaTeCodeImg"onclick = "changeimg ()"> <a href = "javaScript : void (0)"onclick = "changeImg ()"> 다른 것을 명확하게 볼 수 없습니다. </a> <br/> <입력 유형 = "제출"값 = "제출"> </body> </html>실행 결과 :
생성 할 수있는 문자와 숫자의 조합의 검증 코드 사진 외에도 DrawImage Servlet은 중국어, 순수한 숫자 및 순수한 문자의 검증 코드 사진을 생성 할 수 있습니다. 다음과 같이 합의 된 생성 식별자 매개 변수를 DrawImage Servlet에만 전달하면됩니다.
<%@ page language = "java"import = "java.util.*"pageencoding = "utf-8"%> <! doctype html public "-// w3c // dtd html 4.01 Transitional // en"> <html> <head> <title> <html> <head> <title> 형식 형식의 검증 코드를 사용합니다. 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 = "post"> 디지털 문자 혼합 검증 코드 : <input type = "text"name = "validaTecode"/> <img src = "$}/serquest.context.context.context} id = "validaTecodeimg1"onclick = "changeimg (this, 'nl')" "> <br/> 중국 확인 코드 : <입력 유형 ="텍스트 "이름 ="validatecode "/> <img src ="$ {pagecontext.request.contextpath}/servlet/drawimage? createTypeFlag = createTypeFlag = "validaMeimg2" onclick = "changeimg (this, 'ch')"> <br/> 영어 검증 코드 : <input type = "text"name = "validatecode"/> <img src = "$ {pagecontext.request.contextpath}/servlet/drawImage? createTypeFlag ="id = "validaTeCodeImg3" "thisimg (thismg)" " <br/> 디지털 확인 코드 : <입력 유형 = "text"name = "validatecode"/> <img src = "$ {pagecontext.request.contextpath}/servlet/drawimage? createTypeflag = n"id = "validatecodeimg4"onclick = "changeimg (this, 'n')"<input = "" ""<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.servlet.httpp.httpp.httpp.http.httppectpppppervletrequest Javax.servlet.http.http.httpervletresponse;/*** @author gaCl* 서버 측에서 확인 코드를 수신 한 후*/public class checkservlet가 httpservlet {public void doget (httpservletrequest 요청, httpservleceChonse 응답)을 확장 한 후 처리. request.getParameter ( "ValidAteCode"); // 클라이언트 브라우저 문자열 ServerCheckCode = (string) request (). getAttribute ( "checkCode"); // (ClientCheckCode.equals (ServerCheckCode)에서 서버-체크 코드 (ServerCheckCode)에서 검색 코드를 검색하여 클라이언트 브라우저 문자열 ServerCheckCode = (string) requessions에서 제출 한 확인 코드를 수신합니다. 동일하다면, 확인이 System.out.println을 통과했음을 의미합니다 ( "확인 코드 확인이 전달됩니다!"); } else {system.out.println ( "확인 코드 확인 실패!"); }} public void dopost (httpservletrequest 요청, httpservletreponse 응답) servletexception, ioexception {doget (요청, 응답); }}위의 내용은이 기사에 관한 모든 것입니다. 모든 사람의 학습에 도움이되기를 바랍니다.