1. Introdução ao bufferImage
A geração de imagens de código de verificação usa principalmente uma classe bufferimage, como segue:
Crie um servlet de drawimage para gerar imagens de código de verificação
pacote gacl.Response.Study; importar java.awt.color; importar java.awt.font; importar java.awt.graphics; importar java.awt.graphics2d; importação de importação.ut.awt.image.BufferEdImage; importar java.io.ioException; javax.servlet.servletexception; importar javax.servlet.http.httpServlet; importar javax.servlet.http.httpServletReQuest; importação javax.servlet.http.httpsletLeTroPonsens; estático final serialversionuid = 3038623696184546092l; public static final int width = 120; // largura da imagem gerada public static final int altura = 30; // altura da imagem gerada pública void doget (httpServletRequest solicitação, httpServletResponse resposta) lança servletexception, ioexception {this.DoPost (, resposta); } public void DoPost (solicitação httpServletRequest, resposta httpServletResponse) lança servletexception, ioexception {string createTypeflag = request.getParameter ("createTyPeflag"); // recebe o createTeflag id aprovado pelo cliente // 1. Crie uma imagem em Memory BufferEdImage BI = new BufferImage (largura, altura, bufferImage.type_int_rgb); // 2. Obtenha os gráficos da imagem g = bi.getGraphics (); // 3. Defina a cor traseira do contratempo de imagem (G); // 4. Defina a borda da imagem Setborder (G); // 5. Desenhe a linha de interferência na figura drawrandomline (g); // 6. Escreva o número aleatório na imagem // string aleatória = drawrandomnum ((graphics2d) g, "ch"); // gerar código de verificação chinês imagem // string aleatória = drawrandomnum ((graphics2d) g, "nl"); // gerar código de verificação para combinações de números e letters // string "Random = dradrandomnum"; imagem // string aleatória = drawrandomnum ((graphics2d) g, "l"); // gerar código de verificação de letra pura string aleatória = drawrandomnum ((graphics2d) g, createTypeflag); // gera imagem do código de verificação com base no createTypeflag passado pelo cliente // 7. Armazene números aleatórios na sessão request.getSession (). SetAttribute ("CheckCode", Random); // 8. Defina o cabeçalho da resposta para notificar o navegador para abrir a resposta.SetContentType ("Image/jpeg"); // // 9. Defina o cabeçalho da resposta para controlar o navegador para não cache Response.SetDateHeader ("Expries", -1); Response.setheader ("Cache-Control", "No-Cache"); Response.setheader ("Pragma", "sem cache"); // 10. Escreva a imagem no navegador imageio.write (bi, "jpg", resposta.getOutputStream ()); } / *** Defina a cor de fundo da imagem* @param g* / private void sessionground (gráficos g) {// Defina a cor G.SetColor (color.white); // preencha a área G.FillRect (0, 0, largura, altura); } / *** Defina a borda da imagem* @param g* / private void Setborder (gráficos g) {// Defina a cor da borda G.setColor (color.blue); // Área da fronteira G.DrawRect (1, 1, largura - 2, altura - 2); } / *** Desenhe linhas aleatórias na imagem* @param g* / private void drawrandomline (gráficos g) {// Definir cores g.setColor (color.green); // Defina o número de linhas e desenhe linhas para (int i = 0; i <5; i ++) {int x1 = new Random (). NextInt (largura); int y1 = new Random (). NextInt (altura); int x2 = new Random (). NextInt (largura); int y2 = new Random (). NextInt (altura); G.Drawline (X1, Y1, X2, Y2); }} /** * Desenhe caracteres aleatórios * @param g * @param createTypeflag * @return * string ... CreateTypeflag é um parâmetro variável, * Java 1.5 Adicionou novos recursos: Parâmetros variáveis: Adequado para situações em que o número de parâmetros é incerto e o tipo é determinado. Java trata os parâmetros variáveis como uma matriz. NOTA: Os parâmetros variáveis devem estar no último item*/ String privada drawrandomnum (Graphics2d g, string ... createTypeflag) {// Definir color g.setColor (color.red); // Definir Fonte G.SetFont (New Font ("宋体", Font.Bold, 20)); // comumente usado caracteres chineses String 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/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/u6e 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 /5B5B57/ 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/u5444a/u754c/u62c9/u540d/uuu 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/U5C1/U62 3F/U6781/U5357/U67AA/U8BFB/U6C99/U5C81/U7EBF/U91CE/U575A/U7A7A/U6536/U7B97/U81F3/U653F/UU653F/ 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/u888c5/u9876 /u6025/u6797/u505c/u606f/u53e5/u533a/u8863/u822c/u62a5/u53f6/u538b/u6162/u53d4/u80cc/u7ec6 "; // combinação de números e letras string basenumletter = "0123456789abcdefghjklmnopqrstuvwxyz"; // string numérica pura Basenum = "0123456789"; // string de letra pura basheletter = "abcdefghjklmnopqrstuvwxyz"; // createTyPeflag [0] == null significa que nenhum parâmetro é passado se (createTypeflag.length> 0 && null! = createTypeflag [0]) {if (createTypeflag [0] .equals ("ch")) {// intercept aos caracteres chineses retornam (g, basechineschar; } else if (createTyPeflag [0] .equals ("nl")) {// intercepte a combinação de números e letras retorna o CreaterAndomChar (G, Basenumletter); } else if (createTyPeflag [0] .equals ("n")) {// intercepte o número de retorno de CreaterAndomChar (G, Basenum); } else if (createTyPeflag [0] .equals ("l")) {// intercepte a letra retornar o createrAndomChar (g, basheletter); }} else {// intercepta padrão Uma combinação de números e letras retorna o CreaterAndomChar (G, Basenumletter); } retornar ""; } / *** Crie caracteres aleatórios* @param g* @param basechar* @return caracteres aleatórios* / private string createrAndomchar (graphics2d g, string basechar) {stringbuffer sb = new stringBuffer (); int x = 5; String ch = ""; // Controle a contagem de palavras para (int i = 0; i <4; i ++) {// Defina o ângulo de rotação da fonte int graus = new Random (). NextInt () % 30; CH = BasChar.Charat (novo aleatório (). NextInt (Basechar.Length ())) + ""; sb.append (CH); // ângulo para a frente g.rotate (grau * math.pi / 180, x, 20); G.DrawString (CH, X, 20); // ângulo reverso g.rotate (-Degree * math.pi / 180, x, 20); x += 30; } return sb.toString (); }}Os resultados da operação são os seguintes:
2. Use imagens de código de verificação em formulários
<%@ página de página = "java" import = "java.util.*" PageEncoding = "utf-8"%> <! função alteração de alteração () {document.getElementById ("validateCodeImg"). src = "$ {pageContext.request.contextpath}/servlet/drawimage?"+math.random (); } </script> </ad Head> <body> <formulário de formulário = "$ {PageContext.request.ContextPath}/servlet/checkServlet" Method = "post"> Código de verificação: <input type = "text" name = "validatecode"/> <img src = "$ {pageConText.QueT.Quest.Cerest.Cerent.Taltecode"/> <iMG SXTC = "$ {pageConTect" id = "validateCodeImg" onclick = "changeImg ()"> <a href = "javascript: void (0)" onclick = "changeiMg ()"> Não consigo ver claramente, altere outro </a> <br/> <input type = "subit" value = "submit"> </form> </body> </htrod/ht)Resultados em execução:
Além das imagens de código de verificação da combinação de letras e números que podem ser gerados, o servlet Drawimage também pode gerar imagens de código de verificação de caracteres chineses, números puros e letras puras. Você só precisa passar os parâmetros de identificador de geração acordados para o servlet de drawimage, como mostrado abaixo:
<%@ página de página = "java" import = "java.util.*" PageEncoding = "utf-8"%> <! função alteração (obj, createTypeflag) {document.getElementById (obj.id) .src = "$ {PageContext.Request.ContextPath}/servlet/drawImage? createTetyPeflag ="+createTypeflag+"&"+math.random (); } </script> </ad Head> <body> <formulário de formulário = "$ {PageContext.Request.ContextPath}/servlet/checkServlet" Method = "post"> Código de verificação misto de letra digital: <sput Type = "Text" Nome = "Validatecode"/> <img src = "$ {PAGE". id = "validateCodeImg1" onclick = "alteração (this, 'nl')"> <br/> Código de verificação chinês: <input type = "text" name = "validateCode"/> <img src = "$ {pageContext.request.ContextPath}/servlet/drawimage? OnClick = "ChangeImg (this, 'ch')"> <br/> Código de verificação em inglês: <input type = "text" name = "validateCode"/> <img src = "$ {PageContext.reQuest.Contectpath}/servlet/drawImage? CreateTyPefLag = l" ids = "válido <br/> Código de verificação digital: <input type = "text" name = "validateCode"/> <img src = "$ {PagEContext.Request.ContextPath}/servlet/drawImage? CreateTyPeflag = n" id = "validecodeImg4" onClick = "alteração (this," " value = "submeter"> </morm> </body> </html>Os resultados da operação são os seguintes:
3. Processamento dos códigos de verificação enviados pelo formulário no lado do servidor
package 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;import javax.servlet.http.httpServletResponse;/*** @Author GACL* Processando após receber o código de verificação no lado do servidor*/classe pública CheckServlet estende httpServlet {public Void Doget (HttPSerTreQuest Solicution, htttTeCensonsonsonsonete) Throws) Throws (HttPServleTreQuest Solicution, hTTTSEctReSoStensOnsion) Throws) Throws (HttPServleTeQuest Solicution, hTTTSEctReSoSoSSONSTENSTOSSOSTENSOSTENSTENSTEN) request.getParameter ("validateCode"); // Receba o código de verificação enviado pelo navegador do cliente String serverCheckCode = (String) request.getSession (). getAttribute ("CheckCode"); // Recuperar o código de verificação do servidor Session se (CustomCode.Equals "); Se for igual, significa que a verificação passou por sistema.out.println ("A verificação do código de verificação passa!"); } else {System.out.println ("Verificação da verificação de verificação falhou!"); }} public void DoPost (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {doget (solicitação, resposta); }}O exposto acima é tudo sobre este artigo, espero que seja útil para o aprendizado de todos.