1. Processo básico:
Gere uma página de código de verificação (muito pequena) → Incorporado ao formulário → Clique para atualizar a página → Verifique se o formulário é enviado.
2. Método:
1. Defina testes e implemente métodos de desenho
pacote com.zhuguang.action; importar java.awt.color; importar java.awt.font; importar java.awt.graphics; importar java.awt.image.bufferiMage; importar java.util.map; importar javax.servlet.http.httpServletResponse; importar org.apache.struts2.intercept.ServletResponseAware; importar org.apache.struts2.intercept.SessionAware; importação com.opensymphony.xwork2.actionsupport; import com.sun.image.codec.jpeg.jpegcodec; import com.sun.image.codec.jpeg.jpegImageEncoder; A classe pública TestAction estende o ACTIONSupport implementa sessionAWare, servletResponseAware {private map <string, object> session; Resposta privada de HttpServletResponse; private estático final serialversionUid = 1L; String privada chkNumber; @Override public String Execute () lança exceção {Response.Setheader ("Cache-Control", "No-Cache"); int width = 50; // largura da imagem int altura = 20; // imagem de altura da imagem imagem bufferImage = new bufferImage (largura, altura, bufferImage.type_int_rgb); Graphics Graphics = Image.CreateGraphics (); Graphics.setColor (this.getColor ()); // gráficos coloridos em segundo plano.FillRect (0, 0, largura, altura); Graphics.setFont (New Font ("Arial", Font.Bold, 18)); Graphics.setColor (this.getColor ()); // a cor do número da string da palavra = string.valueof (system.currenttimemillis ()%9000+1000); // gerar números aleatórios de quatro bits session.put ("RandomCode", número); // Escreva para a sessão Graphics.DrawString (número, (int) (largura*0.1), (int) (altura*0,8)); Graphics.dispose (); JpegImageEncoder coder = jpegCodec.createjpegencoder (Response.getOutputStream ()); coder.Encode (imagem); resposta.getOutputStream (). Flush (); // Atualize na página para gerar a resposta da imagem.getOutputStream (). Close (); // Retorno do Retorno do Retorno próximo; } color privado getColor () {int vermelho = (int) (math.random ()*1000%256); int verde = (int) (math.random ()*1000%256); int azul = (int) (math.random ()*1000%256); devolver nova cor (vermelha, verde, azul); } public string getchKnumber () {return chknumber; } public void setChknumber (string chknumber) {this.chknumber = chkNumber; } @Override Public void SetSession (map <string, object> session) {// TODO Método Geralizado Auto-Goldado this.Session = Session; } @Override Public void SetSession (map <string, object> session) {// TODO Método Geralizado Auto-Goldado this.Session = Session; } @Override public void SetServletResponse (resposta httpServLetResponse) {// TODO Método Auto-Gerado Stub this.Response = Response; }}Preste atenção ao uso da sessão e resposta
2. Registre -se no arquivo struts.xml:
<ação name = "RandomCode"> </ction>
Nenhuma informação é retornada, para que a página não seja redirecionada
3. Escrita de página JSSP
<%@ página de página = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <%@ taglib uri = "/struts-tags" prefix = "s"%> <%string path = request.getCextPath (); String basalepath = request.getScheme ()+": //"+request.getServername ()+":"+request.getServerport ()+path+"/"; %> <! Doctype html public "-// w3c // dtd html 4.01 transitória // pt" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv = contents = " <script type = "text/javascript"> <!- function ReloadCode (obj, base) {var rand = new Date (). gettime (); // O horário atual é usado como um parâmetro para o URL para alterar o URL, para que o código de verificação seja carregado dinamicamente. // É apenas um efeito de interferência, não tem significado, mas é muito inteligente. Haha obj.src = base+"randomcode.action? Abc ="+rand; // De fato, não há campo ABC no lado do servidor. } //-> </script> <title> Página de teste </ititle> </head> <body> <formulário action = "testLogin" method = "post"> nome de usuário <input type = "text" name = "name"> <br> senha <but type = "text" name = "senha"> <br> Código de identificação: <bpT tipo = "Text =" Nome = "name" " <img src = "<%= bashepath%> randomcode.action" id = "safecode" onclick = "ReloadCode (this, '<%= bashepath%>')"/> <br> <input type = "submit" value = "loginin"> </forma </body> </html>4. Verificação
(1) Adicione um método de verificação em ação
public String testLogin () {if (session.get ("RandomCode"). Equals (chknumber)) {retornar sucesso; } else {return error; }}(2) Registre -se em struts.xml
<ação name = "testlogin" method = "testlogin"> <resultado name = "succcess"> success.jsp </resultado> <resultado name = "error"> error.jsp </resultado> </action>
O exposto acima é a implementação do STRUTS2 que o editor apresentou para gerar códigos de verificação dinâmica e verificar o código de exemplo. Espero que seja útil para todos!