1. Einführung in BufferedImage
Das Generieren von Verifizierungscode -Bildern verwendet hauptsächlich eine BufferedImage -Klasse wie folgt:
Erstellen Sie ein Drawimage -Servlet, um Verifizierungscodebilder zu generieren
Paket gacl.response.study; import Java.awt.color; import Java.awt.font; import Java.awt.graphics; Import Java.awt.graphics2d; Import Java.awt.image.Bufferedimage; javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpServletRequest; import Javax.Servlet.http.httpervletRequest; Finale lange Serialversionuid = 3038623696184546092L; öffentliche statische endgültige int width = 120; // Breite des generierten Bildes öffentliche statische endgültige inthage = 30; // Höhe des generierten Bildes öffentliches Leerraum (httpServletRequest Request, httpServletResponse -Antwort) löscht ServletException, IoException {thopost (Anfrage, Reaktion); } public void dopost (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException aus, ioException {String createTypeFlag = Request.GetParameter ("createTeTypflag"); // Empfangen Sie die von der Client // 1 übergebene CreateTypeFlag -ID // 1. Erstellen Sie ein Bild in Speicher BufferedImage bi = new bufferedImage (Breite, Höhe, bufferedimage.type_int_rgb); // 2. Holen Sie sich die Bildgrafik g = bi.getGraphics (); // 3. Stellen Sie die hintere Farbe des Bildrückbackgrounds (G) ein; // 4. Setzen Sie den Rand des Bildsetborders (G); // 5. Zeichnen Sie die Interferenzlinie auf dem Bild Drawrandomline (G); // 6. Write the random number on the picture//String random = drawRandomNum((Graphics2D) g,"ch");//Generate Chinese verification code picture//String random = drawRandomNum((Graphics2D) g,"nl");//Generate verification code picture for combinations of numbers and letters//String random = drawRandomNum((Graphics2D) g,"n");//Generate pure numbers verification code Bild // String Random = Drawrandomnum ((Graphics2d) g, "l"); // Erzeugen Sie reine Buchstabenverifizierungscode Bild String Random = Drawrandomnum ((Graphics2d) g, createTeTypeFlag); // Überprüfungscode -Bild basierend auf der CreateTypeFlag -ID generieren // 7. Speichern Sie zufällige Nummern in Sitzungsanforderung .GetSession (). SetAttribute ("checkcode", random); // 8. Setzen Sie den Antwortheader so, dass der Browser die Antwort öffnet.SetContentType ("Image/JPEG"); // Äquivalent zu response.setheader ("Content-Typ", "Image/JPEG"); // 9. Stellen Sie den Antwortheader so ein, dass der Browser nicht auf cache response.setdatheader ("Expries", -1) gesteuert wird. response.setheader ("cache-control", "no-cache"); response.setheader ("pragma", "no-cache"); // 10. Schreiben Sie das Bild in den Browser imageio.write (bi, "jpg", response.getOutputStream ()); } / *** Legen Sie die Hintergrundfarbe des Bildes ein* @param g* / private void retbackground (Graphics g) {// Setzen Sie die Farbe G.SetColor (color.white); // Füllen Sie den Bereich G.FillRect (0, 0, Breite, Höhe); } / *** Setzen Sie den Rand des Bildes* @param g* / private void setBorder (Graphics g) {// Setzen Sie die Grenzfarbe G.SetColor (color.Blue); // Grenzfläche G.Drawrect (1, 1, Breite - 2, Höhe - 2); } / *** Zeichnen Sie zufällige Zeilen auf dem Bild* @param g* / private void Drawrandomline (Graphics g) {// Farbe G.SetColor (color.green) setzen; // Stellen Sie die Anzahl der Zeilen fest und zeichnen Sie Zeilen für (int i = 0; i <5; i ++) {int x1 = new random (). NextInt (width); int y1 = neu random (). NextInt (Höhe); int x2 = new random (). NextInt (Breite); int y2 = neu random (). NextInt (Höhe); g.drawline (x1, y1, x2, y2); }} /** * zufällige Zeichen zeichnen * @param g * @param createTypeFlag * @return * String ... createTypeFlag ist ein variabler Parameter, * Java 1.5 hat neue Funktionen hinzugefügt: variable Parameter: Geeignet für Situationen, in denen die Anzahl der Parameter nicht mehr und der Typ bestimmt wird. Java behandelt variable Parameter als Array. Hinweis: Die variablen Parameter müssen im letzten Element*/ private String drawrandomnum (Graphics2d G, String ... createTypeFlag) {// Color G.SetColor (color.red) sein; // Font G.SetFont (neue Schriftart ("宋体", font.bold, 20)) festlegen; // häufig verwendete chinesische Zeichen String basechineSCHAR = "/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/ 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/u6597/u9a6c/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/U62 3F/U6781/U5357/U67AA/U8BFB/U6C99/U5C81/U7EBF/U91CE/U575A/U7A7A/U6536/U7B97/U81F3/U653F/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 "; // Kombination aus Zahlen und Buchstaben String Basisumletter = "0123456789ABCDEFGHJKlMnOPQRSTUVWXYZ"; // Pure Numeric String Basenum = "0123456789"; // reine Buchstaben String BSELERTTER = "ABCDEFGHJKLMNOPQRSTUVWXYZ"; // createTypeFlag [0] == null bedeutet, dass kein Parameter übergeben wird if (createTypeFlag.length> 0 && null! } else if (createTeTypeFlag [0] .Equals ("nl")) {// Abfangen die Kombination von Zahlen und Buchstaben return CreateRandomchar (G, Bassenumletter); } else if (createTeTypeFlag [0] .Equals ("n")) {// Abfangen die Nummer return CreateRandomchar (g, Basisum); } else if (createTeTypeFlag [0] .Equals ("l")) {// Abfangen den Buchstaben return CreateRandomchar (G, Bündel); }} else {// standardmäßig fällt eine Kombination von Zahlen und Buchstaben zurück, die CreateRandomchar (G, Basenumletter) zurückgeben; } zurückkehren ""; } / *** erstellen zufällige Zeichen* @param g* @param basechar* @return zufällige Zeichen. int x = 5; String ch = ""; // Die Wortzahl für (int i = 0; i <4; i ++) {// den Schriftwinkel in int Grad = new random (). NextInt () % 30 festlegen; CH = Basechar.Charat (neu Random (). NextInt (Basechar.length ()) + ""; sb.Append (ch); // Vorwärtswinkel G.Rotate (Grad * math.pi / 180, x, 20); g.drawstring (ch, x, 20); // Reverse Angle G.Rotate (-Degree * math.pi / 180, x, 20); x += 30; } return sb.toString (); }}Die Betriebsergebnisse sind wie folgt:
2. Verwenden Sie Verifizierungscode -Bilder in Formularen in Formularen
<%@ page Language = "java" import = "java.util. ChangeImg () {document.getElementById ("validateCodeImg"). } </script> </head> <body> <form action="${pageContext.request.contextPath}/servlet/CheckServlet" method="post"> Verification code: <input type="text" name="validateCode"/> <img src="${pageContext.request.contextPath}/servlet/DrawImage" id = "validateCodeImg" onclick = "ayhalImg ()"> <a href = "javaScript: void (0)" onclick = "änderung ()"> Ich kann nicht klar sehen, dass eine andere </a> <br/> <Eingabe type = "value =" value "> </Form> </body> </html> </html> reichenAuslaufergebnisse:
Zusätzlich zu den Verifizierungscode -Bildern der Kombination aus Buchstaben und Zahlen, die generiert werden können, kann das Drawimage -Servlet auch Überprüfungscode -Bilder von chinesischen Zeichen, reinen Zahlen und reinen Buchstaben generieren. Sie müssen nur die Identifikatorparameter der vereinbarten Generation an das Drawimage -Servlet übergeben, wie unten gezeigt:
<%@ page Language = "java" import = "java.util. 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" methode = "post"> gemischter Verifizierungscode für digitale Buchstaben: <Eingabe type = "text" name = "validateCode"/> <img src = $ {pagecontexte.request.request.contexTex "/servlet/dacyconte.request. id = "validateCodeImg1" Onclick = "ChangeImg (this, 'nl')"> <br/> Chinesischer Verfindungscode: <Eingabe type = "text" name = "validateCode"/> <img src = "$ {pageContext.request.contextPath}/servlet/drateTeTeTeType -Creatype -Creatype -Creatype -Creatype -FLAGS -TRAGEFLAGE. Onclick = "ChangeImg (this, 'ch')"> <br/> englischer Verifizierungscode: <Eingabe type = "text" name = "validateCode"/> <img src = "$ {pageContext.request.ContextPath}/Servlet/Drawimage? <br/> digitaler Verifizierungscode: <Eingabe type = "text" name = "validateCode"/> <img src = "$ {pageContext.Request.ContextPath}/Servlet/Drawimage? CreateTypeFlag = n" id = "validateCodeImg4" Onclick = "upsImg (" ag. " </form> </body> </html>Die Betriebsergebnisse sind wie folgt:
3.. Verarbeitung von Verifizierungscodes, die vom Formularformular auf der Serverseite eingereicht wurden
Paket gacl.response.study; import Java.io.ioxception; import Javax.servlet.servletException; import Javax.servlet.http.httpServlet; importieren javax.servlet.http.httpletrequest; javax.servlet.http.HttpServletResponse;/** * @author gacl * Processing after receiving the verification code on the server side*/public class CheckServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String clientCheckcode = Request.GetParameter ("validateCode"); // den vom Client Browser String ServerCheckCode = (String) request.GetSession () gesenkten Bestätigungscode (). Wenn es gleich ist, bedeutet dies, dass die Überprüfung system.out.println bestanden hat ("Überprüfung des Verifizierungscodes passt!"); } else {System.out.println ("Überprüfung des Verifizierungscodes fehlgeschlagen!"); }} public void dopost (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException aus, IOException {dodget (request, response); }}Das Obige dreht sich alles um diesen Artikel, ich hoffe, es wird für das Lernen aller hilfreich sein.