1. Introduction à BufferedImage
La génération d'images de code de vérification utilise principalement une classe BufferedImage, comme suit:
Créer un servlet Drawimage pour générer des images de code de vérification
Package 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.ioexception; import java.util.random; import java.imageio.Imageio; import java.util.random; import java.imageio.imageio; import java.util.random; import java.imageio.Imageio; import java.util.random; import java.imageio.Imageio; Import Java.util. javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; Final long SerialVersionUID = 3038623696184546092L; public static final int largeth = 120; // largeur de l'image générée publique statique final int hauteur = 30; // hauteur de l'image générée publique void doget (httpsservletRequest request, httpservletResponse réponse) lève Servlexception, ioException {this.dopost (demande, réponse); } public void doPost (requête httpServletRequest, réponse httpservletResponse) lève ServletException, ioException {String CreateTypeFlag = request.getParamètre ("CreateTypeFlag"); // Recevoir l'ID CreateTypeFlag transmis par le client // 1. Créer une image dans la mémoire BufferedImage BI = new BufferedImage (largeur, hauteur, bufferedImage.type_int_rgb); // 2. Obtenez les graphiques d'image g = bi.getGraphics (); // 3. Réglez la couleur en arrière du terrain de revers d'image (G); // 4. Réglez la bordure de l'image Setborder (G); // 5. Tracez la ligne d'interférence sur l'image Drawrandomline (G); // 6. Écrivez le nombre aléatoire sur l'image // string random = drawrandomnum ((graphics2d) g, "ch"); // générer l'image du code de vérification chinois // String random = drawrandomnum ((graphics2d) g, "nl"); // générer une image de code de vérification pour les combinaisons de nombres et de lettres // // génération de nombres de drawrandomnum (graphics2d) g, "n"); image // string random = drawrandomnum ((graphics2d) g, "l"); // générer du code de vérification de lettre pure chaîne d'image random = drawrandomnum ((graphics2d) g, createTypeflag); // générer l'image de code de vérification basée sur l'ID CreateTypeflag adopté par le client // 7. Stockez les numéros aléatoires dans Session request.getSession (). SetAttribute ("CheckCode", aléatoire); // 8. Définissez l'en-tête de réponse pour informer le navigateur pour ouvrir Response.SetContentType ("Image / JPEG"); // équivalent à Response.sethEader ("Content-Type", "image / jpeg"); // 9. Définissez l'en-tête de réponse pour contrôler le navigateur pour ne pas cache Response.SetDateHeader ("expries", -1); Response.sethEader ("Cache-Control", "No-cache"); Response.sethEader ("Pragma", "No-Cache"); // 10. Écrivez l'image sur le navigateur ImageIo.Write (BI, "JPG", Response.getOutputStream ()); } / ** * Définissez la couleur d'arrière-plan de l'image * @param g * / private void SetBackground (graphics g) {// définir la couleur g.setColor (colore.white); // remplit la zone g.filrect (0, 0, largeur, hauteur); } / ** * Définissez la bordure de l'image * @param g * / private void setborder (graphics g) {// définir la couleur de la bordure g.setColor (color.blue); // zone frontalière g.Drawrect (1, 1, largeur - 2, hauteur - 2); } / ** * Dessinez des lignes aléatoires sur l'image * @param g * / private void drawrandomline (graphiques g) {// set colore g.setColor (colore.green); // Définissez le nombre de lignes et des lignes de dessin pour (int i = 0; i <5; i ++) {int x1 = new random (). NextInt (width); int y1 = new random (). nextInt (hauteur); int x2 = new random (). nextInt (largeur); int y2 = new random (). nextInt (hauteur); G.Drawline (x1, y1, x2, y2); }} / ** * Dessiner des caractères aléatoires * @param g * @param createTypeFlag * @return * string ... createTypeFlag est un paramètre variable, * Java 1.5 a ajouté de nouvelles fonctionnalités: Paramètres variables: Convient pour les situations où le nombre de paramètres est incertain et le type est déterminé. Java traite les paramètres variables comme un tableau. Remarque: les paramètres variables doivent être dans le dernier élément * / private String drawrandomnum (graphics2d g, string ... createTypeFlag) {// set colore g.setColor (colore.red); // Set Font g.setfont (new Font ("宋体", font.bold, 20)); // String de caractères chinois couramment utilisé 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 / u770b / u5929 / u65f6 / u8fc7 / u51fa / u5c0f / u4e48 / u8d77 / u4f60 / u90fd / u628a / u597d / u8fd8 / u591a / u6ca1 / u597d / u8fd8 / u591a / u6ca1 / u597d / u8fd8 / u591a / u6ca1 / u597d / u8fd8 / u591a / u6ca1 / u597d 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 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 / uu653f / u7B97 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 "; // combinaison de nombres et de lettres String Basenumletter = "0123456789abcdefghjklmnopqrstuvwxyz"; // Pure Numeric String Basenum = "0123456789"; // Pure Letter String Basetter = "ABCDEFGHJKLMNOPQRSTUVWXYZ"; // createTypeFlag [0] == null signifie qu'aucun paramètre n'est passé if (createTyPeflag.length> 0 && null! = createTypeFlag [0]) {if (createTypeFlag [0] .equals ("ch")) {// intercepter les caractères chinois de retour des caractères chinois (g, basechinesechar); } else if (createTypeFlag [0] .equals ("nl")) {// intercepter la combinaison de nombres et de lettres return CreaterAndomChar (g, basenumletter); } else if (createTyPeFlag [0] .equals ("n")) {// intercepter le nombre de retours createrandomchar (g, basenum); } else if (createTyPeFlag [0] .equals ("l")) {// intercepter la lettre return CreaterAndomChar (g, Basetter); }} else {// Interceptions par défaut Une combinaison de nombres et de lettres return CreaterAndomChar (G, Basenumletter); } retour ""; } / ** * Créer des caractères aléatoires * @param g * @param Basechar * @return Caractères aléatoires * / private String createRandomChar (graphics2d g, String BasEchar) {StringBuffer sb = new StringBuffer (); int x = 5; String ch = ""; // Contrôlez le nombre de mots pour (int i = 0; i <4; i ++) {// Définissez l'angle de rotation de police int degré = new Random (). NextInt ()% 30; ch = Basechar.Charat (new Random (). NextInt (BasEchar.Length ())) + ""; SB.APPEND (CH); // angle avant g.rotate (degré * math.pi / 180, x, 20); G.Drawstring (Ch, X, 20); // Angle inverse g.rotate (-degree * math.pi / 180, x, 20); x + = 30; } return sb.toString (); }}Les résultats de l'opération sont les suivants:
2. Utilisez des images de code de vérification dans les formulaires de formulaire
<% @ Page Language = "Java" Import = "Java.util. *" Pageencoding = "UTF-8"%> <! DocType Html public "- // w3c // dtd html 4.01 transitional // en"> <html> changeImg () {document.getElementById ("validateCodeImg"). src = "$ {pageContext.request.contextPath} / servlet / drawimage?" + math.random (); } </ script> </ head> <body> <form action = "$ {pageContex id = "validateCodeImg" onClick = "ChangeImg ()"> <a href = "javascript: void (0)" onClick = "ChangeImg ()"> Je ne vois pas clairement, modifiez un autre </a> <br/> <entrée type = "soumettre" value = "soumettre"> </ form> </dody> </html>Résultats en cours:
En plus des images de code de vérification de la combinaison de lettres et de nombres qui peuvent être générées, le servlet Drawimage peut également générer des images de code de vérification de caractères chinois, de nombres purs et de lettres pures. Il vous suffit de passer les paramètres d'identificateur de génération convenus au servlet DrawImage, comme indiqué ci-dessous:
<% @ Page Language = "Java" Import = "Java.util. *" Pageencoding = "UTF-8"%> <! DocType Html public "- // w3c // dtd html 4.01 transitional // en"> <html> ChangeImg (obj, createTypeFlag) {document.getElementById (obj.id) .src = "$ {pageContext.Request.ContextPath} / servlet / Drawimage? CreateTypeFlag =" + CreateTypeFlag + "&" + math.random (); } </ script> </ head> <body> <form action = "$ {pagecontex id = "validateCodeImg1" onclick = "changeImg (this, 'nl')"> <br/> code de vérification chinois: <input type = "text" name = "validatecode" /> <img src = "$ {pageContex onclick = "ChangeImg (this, 'ch')"> <br/> Code de vérification anglais: <input type = "text" name = "validatecode" /> <img src = "$ {pageContext.Request.ContextPath} / servlet / drawimage? CreateTyPeflag = l" id = "validateCodeImg3" OnClick = "li")> ") <br/> Code de vérification numérique: <input type = "text" name = "validatecode" /> <img src = "$ {pageContex </ form> </body> </html>Les résultats de l'opération sont les suivants:
3. Traitement des codes de vérification soumis par le formulaire du formulaire côté serveur
package gacl.response.study; import java.io.ioException; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; javax.servlet.http.httpservletResponse; / ** * @author gacl * Traitement après avoir reçu le code de vérification du côté serveur * / classe publique Checkservlet étend httpservlet {public void DOGTE request.getParameter ("validatecode"); // Recevoir le code de vérification soumis par le navigateur client String ServerCheckCode = (String) request.getSession (). getAttribute ("Checkcode"); // Récupérer le code de vérification de la session côté serveur if (clientcheckcode.equals (ServerCheckcode)) {// Comparez le Client Verrification Code de Verfication. S'il est égal, cela signifie que la vérification a passé System.out.println ("Vérification du code Vérification passe!"); } else {System.out.println ("Vérification du code Vérification a échoué!"); }} public void doPost (httpsservletRequest request, httpservletResponse réponse) lève ServletException, ioException {doGet (request, réponse); }}Ce qui précède concerne cet article, j'espère qu'il sera utile à l'apprentissage de tout le monde.