1. Introducción a BufferedImage
Generación de imágenes del código de verificación utiliza principalmente una clase de BufferedImage, de la siguiente manera:
Cree un servlet de Drawimage para generar imágenes de código de verificación
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 javax.imageio.ImageIO;import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpServletResponse;/*** Generar imágenes aleatorias para ser utilizadas como código de verificación*/public sorthimage ExtENDEST. Long Long SerialVersionUid = 3038623696184546092l; Public static final int width = 120; // ancho de imagen generada estatic estatic inttight = 30; // Altura de la imagen generada Void doget (httpServletRequest Solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {this.dopost (solicitud, respuesta); } public void dopost (httpservletRequest solicitud, httpservletResponse respuesta) arroja servletException, ioexception {string createTetypeFlag = request.getParameter ("CreateTypeFlag"); // Recibe la identificación de CreatetypeFlag aprobada por el cliente // 1. Cree una imagen en la memoria BufferedImage BI = New BufferedImage (ancho, altura, bufferedimage.type_int_rgb); // 2. Obtenga los gráficos de imagen g = bi.getgraphics (); // 3. Establezca el color posterior del campo de seguridad de la imagen (g); // 4. Establezca el borde de la imagen SetBorder (G); // 5. Dibuje la línea de interferencia en la línea de dibujo (g); // 6. Escriba el número aleatorio en la imagen // string random = drawRandomNum ((Graphics2d) g, "ch"); // Generar el código de verificación chino imagen // string random = drawRandomNum ((Graphics2d) g, "nl"); // Imagen del código de verificación para la imagen de los números de los números y las letras de la cadena // String Random = DrawRandomNum Imagen // String Random = DocoRandomNum ((Graphics2d) G, "L"); // Generar código de verificación de letra pura Cadena de imagen Random = DrawRandomNum ((Graphics2d) G, CreateTypeFlag); // Generar la imagen del código de verificación basada en el ID de createTypeFlag aprobado por el cliente // 7. Almacene números aleatorios en la sesión de la sesión.getSession (). SetAttribute ("Checkcode", Random); // 8. Establezca el encabezado de respuesta para notificar al navegador que abra la respuesta.setContentType ("Image/jpeg"); // equivalente a respuesta.setheader ("Content-type", "Image/jpeg"); // 9. Establezca el encabezado de respuesta para controlar el navegador para no cachear respuesta.setDateHeader ("expries", -1); Respuesta.setheader ("Cache-Control", "No-Cache"); respuesta.setheader ("Pragma", "No-Cache"); // 10. Escriba la imagen en el navegador ImageIO.Write (BI, "JPG", Response.getOutputStream ()); } / *** Establezca el color de fondo de la imagen* @param g* / private void setbackground (gráficos g) {// establece el color g.setColor (color.white); // llenar el área G.FillRect (0, 0, ancho, altura); } / *** Establezca el borde de la imagen* @param g* / private void setBorder (gráficos g) {// Establezca el color del borde G.SetColor (color.blue); // Área fronteriza G.Drawrect (1, 1, ancho - 2, altura - 2); } / *** Dibuja líneas aleatorias en la imagen* @param g* / private void drawrandomline (gráficos g) {// establecer color g.setColor (color.green); // Establecer el número de líneas y dibujar líneas para (int i = 0; i <5; i ++) {int x1 = new Random (). NextInt (Width); int y1 = new Random (). NextInt (altura); int x2 = new Random (). NextInt (ancho); int y2 = new Random (). NextInt (altura); G.Drawline (x1, y1, x2, y2); }} /** * Dibuja caracteres aleatorios * @param g * @param createTypeflag * @return * string ... createTypeFlag es un parámetro variable, * Java 1.5 ha agregado nuevas características: parámetros variables: adecuados para situaciones donde el número de parámetros no está seguro y el tipo está determinado. Java trata los parámetros variables como una matriz. Nota: Los parámetros variables deben estar en el último elemento*/ private String DrawrandomNum (Graphics2d G, String ... CreateTypeFlag) {// establecer color g.setColor (color.red); // establecer Font G.SetFont (nueva fuente ("宋体", font.bold, 20)); // caracteres chinos comúnmente utilizados cadena basecineseChar = "/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/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/U62 3F/U6781/U5357/U67AA/U8BFB/U6C99/U5C81/U7EBF/U91CE/U575A/U7A7A/U6536/U7B97/U81F3/U653F/UU653F/U 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 "; // Combinación de números y letras cadena Basenumletter = "0123456789ABCDefghjklmnopqrstuvwxyz"; // cadena numérica pura basenum = "0123456789"; // String de letra pura baseletter = "abcdefghjklmnopqrstuvwxyz"; // CreateTypeFlag [0] == NULL significa que no se pasa ningún parámetro if (createTypeFlag.Length> 0 && null! = CreateTypeFlag [0]) {if (CreateTypeFlag [0] .Equals ("Ch")) {// Interceptación de caracteres chinos Devuelve CreaterandomChar (G, BASECHINECHAR); } else if (createTypeFlag [0] .equals ("nl")) {// intercepta la combinación de números y letras return createrandomchar (g, basenumletter); } else if (createTypeFlag [0] .equals ("n")) {// intercepta el número return createrandomchar (g, basenum); } else if (createTypeFlag [0] .equals ("l")) {// Intercepe la letra return Createrandomchar (g, baseletter); }} else {// Interceptación predeterminada Una combinación de números y letras return createrandomchar (g, basenumletter); } devolver ""; } / *** Crear caracteres al azar* @param g* @param basecar* @return caracteres aleatorios* / private string crereaterandomchar (gráfico2d g, string basecar) {stringbuffer sb = new StringBuffer (); int x = 5; Cadena ch = ""; // Controle el recuento de palabras para (int i = 0; i <4; i ++) {// Establezca el ángulo de rotación de fuente int grado = new Random (). NextInt () % 30; ch = basecar.charat (new Random (). NextInt (basecar.length ())) + ""; sb.append (CH); // ángulo hacia adelante g.rotate (grado * math.pi / 180, x, 20); G.Drawstring (CH, X, 20); // ángulo inverso g.rotate (-degree * math.pi / 180, x, 20); x += 30; } return sb.ToString (); }}Los resultados de la operación son los siguientes:
2. Use imágenes de código de verificación en forma de formularios
<%@ page lenguaje = "java" import = "java.util.*" pageEncoding = "utf-8"%> <! DocType html público "-// w3c // dtd html 4.01 transición // en"> <html> <fead> <title> Código de verificación de verificación en formulario de formulario </title> <script Type = "/jawrcript" changeImg () {document.getElementById ("ValidAteCodeImg"). Src = "$ {PageContext.Request.ContextPath}/Servlet/Drawimage?"+Math.random (); } </script> </head> <body> <form de acción = "$ {pageContext.request.contextPath}/servlet/checkservlet" método = "post"> código de verificación: <input type = "text" name = "ValidateCode"/> <img src = "$ {pageContext.Request.contextpath}/Servlet/DraweS id = "ValidAteCodeImg" onClick = "ChangeImg ()"> <a href = "javascript: void (0)" onClick = "ChangeImg ()"> No puedo ver claramente, cambie otro </a> <br/> <input type = "s," value = "enviar"> </form> </foding> </html>Resultados de ejecución:
Además de las imágenes del código de verificación de la combinación de letras y números que se pueden generar, el servlet Drawimage también puede generar imágenes de código de verificación de caracteres chinos, números puros y letras puras. Solo necesita aprobar los parámetros de identificador de generación acordados al servlet Drawimage, como se muestra a continuación:
<%@ page lenguaje = "java" import = "java.util.*" pageEncoding = "utf-8"%> <! DocType html público "-// w3c // dtd html 4.01 transición // en"> <html> <fead> <title> Código de verificación de verificación en formulario de formulario </title> <script Type = "/jawrcript" ChangeImg (obj, createTypeFlag) {document.getElementById (obj.id) .src = "$ {pageContext.request.contextPath}/servlet/drawimage? CreateTypeFlag ="+CreateTypeflag+"&"+Math.Random ();; } </script> </head> <body> <form de acción = "$ {pageContext.request.contextPath}/servlet/checkServlet" método = "post"> Código de verificación mixto de letra digital: <input type = "text" name = "validateCode"/> <img src = "$ {pageContext.Request.conteNteTontextpath}/Drawimage/Drawimage/Drawimage/" id = "ValidAteCodeImg1" onClick = "ChangeImg (this, 'nl')"> <br/> código de verificación chino: <input type = "text" name = "validateCode"/> <img src = "$ {pageContext.request.contextPath}/servlet/drawimage? CreateTypeflag = ch" Id = "Id =" ValcheCeDeCodeMg22 " onClick = "ChangeImg (this, 'Ch')"> <br/> Código de verificación en inglés: <input type = "text" name = "validateCode"/> <img src = "$ {pageContext.request.contextPath}/servlet/drawimage? createtypeflag = l" id = "validateiDeMg3" onClick = "Cambio)", ","). <br/> Código de verificación digital: <input type = "text" name = "ValidateCode"/> <img src = "$ {pageContext.request.contextpath}/servlet/drawimage? CreateTypeFlag = n" id = "ValidAteCodeImg4" ONCLICK = "Cambio (esto, 'n')"> <BR/> <> <input type " </form> </body> </html>Los resultados de la operación son los siguientes:
3. Procesamiento de códigos de verificación enviados por el formulario del formulario en el lado del servidor
paquete gacl.response.study; import java.io.ioException; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletRequest; importar; javax.servlet.http.httpServletResponse;/*** @author gaCl* Processing Después de recibir el código de verificación en el lado del servidor*/public class checkServlet extiende httpservlet {public void doget (httpservletRequest solicitud, httpServletRePonse Respuesta) lanza ServletException, iOExcepteption {String ClientChest, = = request.getParameter ("ValidAteCode"); // Recibe el código de verificación enviado por el navegador Cliente String ServerCheckCode = (String) Sold.getSession (). GetAttribute ("CheckCode"); // Recuperar el código de verificación del código del Servidor if (ClientCheckcode.equals (ServerCheckcode) {// Compensar el código de verificación del cliente con la verificación del cliente con el servidor. Si es igual, significa que la verificación ha pasado System.out.println ("¡Pasa de verificación del código de verificación!"); } else {System.out.println ("¡Falló de verificación del código de verificación!"); }} public void dopost (httpservletRequest solicitud, respuesta httpservletResponse) arroja servletException, ioexception {doget (solicitud, respuesta); }}Lo anterior se trata de este artículo, espero que sea útil para el aprendizaje de todos.