1. Proceso básico:
Genere una página de código de verificación (muy pequeña) → Incruta en el formulario → Haga clic para actualizar la página → Verifique cuándo se envía el formulario.
2. Método:
1. Definir testacción e implementar métodos de dibujo
paquete com.zhuguang.action; import java.awt.color; import java.awt.font; import java.awt.graphics; import java.awt.image.bufferedImage; import java.util.map; import javax.servlet.http.httpservletResponse; importar org.apache.struts2.interceptor.servletResponseAware; importar org.apache.struts2.interceptor.sessionAware; import com.opensymphony.xwork2.ActionSupport; import com.sun.image.codec.jpeg.jpegcodec; import com.sun.image.codec.jpeg.jpegimageEncoder; Public Class TestAction extiende ActionSupport Implementa SessionAware, ServletResponseAware {Map privado <String, Object> Session; Respuesta privada httpservletResponse; Private static final Long SerialVersionUid = 1L; cadena privada Chknumber; @Override public String Execute () lanza la excepción {Response.Setheader ("Cache-Control", "No-Cache"); int ancho = 50; // Ancho de imagen int altura = 20; // imagen de altura de imagen BufferedImage = new BufferedImage (ancho, altura, bufferedimage.type_int_rgb); Gráficos gráficos = image.createGraphics (); Graphics.SetColor (this.getColor ()); // Graphics de color de fondo. Fillrect (0, 0, ancho, altura); Graphics.setFont (nueva fuente ("Arial", Font.Bold, 18)); Graphics.SetColor (this.getColor ()); // El color del número de cadena de palabras = String.ValueOf (System.CurrentTimemillis ()%9000+1000); // Generar números aleatorios de cuatro bits sesses.put ("RandomCode", número); // Escriba a la sesión Graphics.DrawString (número, (int) (ancho*0.1), (int) (altura*0.8)); Graphics.Dispose (); JpegimageEncoder coder = jpegcodec.createjpegencoder (respuesta.getOutputStream ()); encoder.encode (imagen); Response.getOutputStream (). Flush (); // Actualizar en la página para generar respuesta de imagen.getOutputStream (). Close (); // Cerrar el escritor de regreso nulo; } color privado getColor () {int rojo = (int) (math.random ()*1000%256); int verde = (int) (math.random ()*1000%256); int blue = (int) (math.random ()*1000%256); devolver nuevo color (rojo, 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 generado automático stub this.session = session; } @Override public void setSession (map <string, object> session) {// TODO Método generado automático stub this.session = session; } @Override public void setServletResponse (respuesta httpservletResponse) {// TODO Método generado automático stub this.Response = respuesta; }}Presta atención al uso de la sesión y la respuesta
2. Regístrese en el archivo Struts.xml:
<Action name = "RandomCode"> </olcion>
No se devuelve información, de modo que la página no se redirle
3. Escritura de página JSSP
<%@ page lenguaje = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <%@ taglib uri = "/struts-tags" prefix = "s"%> <%string path = request.getContextPath (); String basepath = request.getScheme ()+": //"+request.getServerName ()+":"+request.getServerPort ()+ruta+"/"; %> <! DocType html public "-// w3c // dtd html 4.01 transitional // en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <Head> <meta http-oquiv = "content-type" contenido = "text/htm; <script type = "text/javaScript"> <!- function reloadCode (obj, base) {var rand = new Date (). GetTime (); // La hora actual se usa como parámetro a la URL para cambiar la URL, de modo que el código de verificación se cargará dinámicamente. // es solo un efecto de interferencia, no tiene sentido, pero es muy inteligente. Jaja obj.src = base+"randomcode.action? Abc ="+rand; // De hecho, no hay un campo ABC en el lado del servidor. } //-> </script> <title> Test Page </title> </head> <body> <Form Action = "testLogin" Method = "Post"> UserName <input type = "text" name = "name"> <br> contraseña <input type = "text" name = "contraseña"> <br> código de verificación: <input type = "text" name = "chnumber" id = "chknumber" maxlifer "longitud de verificación 4" "4" "4" "4" "4" "4" "4" ". src = "<%= basepath%> randomcode.action" id = "safeCode" onClick = "reloadCode (this, '<%= basepath%>')"/> <br> <input type = "subt" value = "loginin"> </form> </body> </html>4. Verificación
(1) Agregue un método de verificación en acción
public String testLogin () {if (session.get ("randomcode"). Equals (chknumber)) {return éxito; } else {error de retorno; }}(2) Regístrese en Struts.xml
<Action name = "testLogin" Method = "testLogin"> <resultado name = "éxito"> Success.jsp </resultado> <resultado name = "Error"> Error.jsp </resultado> </Action>
Lo anterior es la implementación Struts2 que el editor le presentó para generar códigos de verificación dinámicos y verificar el código de ejemplo. ¡Espero que sea útil para todos!