1. กระบวนการพื้นฐาน:
สร้างหน้ารหัสการตรวจสอบ (เล็กมาก) →ฝังลงในแบบฟอร์ม→คลิกเพื่อรีเฟรชหน้า→ตรวจสอบเมื่อส่งแบบฟอร์ม
2. วิธี:
1. กำหนดวิธีทดสอบและใช้วิธีการวาดภาพ
แพ็คเกจ com.zhuguang.action; นำเข้า Java.awt.Color; นำเข้า Java.awt.Font; นำเข้า java.awt.graphics; นำเข้า java.awt.image.bufferedimage; นำเข้า java.util.map; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า org.apache.struts2.interceptor.servletResponseAware; นำเข้า org.apache.struts2.interceptor.sessionaware; นำเข้า com.opensymphony.xwork2.actionsupport; นำเข้า com.sun.image.codec.jpeg.jpegcodec; นำเข้า com.sun.image.codec.jpeg.jpegimageencoder; การทดสอบระดับสาธารณะขยายการกระทำที่ใช้การใช้งาน SessionAware, ServletResponseAware {แผนที่ส่วนตัว <String, Object> เซสชัน; การตอบสนอง HTTPSERVLETRESSESSIVE ส่วนตัว; ส่วนตัวคงที่สุดท้าย Long SerialVersionUid = 1L; สตริงส่วนตัว chknumber; @Override String สาธารณะ Execute () พ่นข้อยกเว้น {Response.Setheader ("Cache-Control", "No-cache"); ความกว้าง int = 50; // ความกว้างของภาพความสูง int = 20; // ความสูงของภาพความสูง bufferedImage image = bufferedImage ใหม่ (ความกว้าง, ความสูง, bufferedImage.type_int_rgb); กราฟิกกราฟิก = image.createGraphics (); graphics.setColor (this.getColor ()); // กราฟิกสีพื้นหลัง fillrect (0, 0, ความกว้าง, ความสูง); graphics.setFont (ตัวอักษรใหม่ ("Arial", Font.Bold, 18)); graphics.setColor (this.getColor ()); // สีของหมายเลขสตริงคำ = string.valueof (System.currentTimeMillis ()%9000+1000); // สร้างเซสชันตัวเลขสุ่มสี่บิต session.put ("randomCode", ตัวเลข); // เขียนลงใน session graphics.DrawString (จำนวน, (int) (ความกว้าง*0.1), (int) (ความสูง*0.8)); graphics.dispose (); jpeGimageEncoder encoder = jpegCodec.createJPegenCoder (response.getOutputStream ()); encoder.encode (รูปภาพ); Response.getOutputStream (). Flush (); // รีเฟรชไปที่หน้าเพื่อสร้างการตอบสนองของรูปภาพ getOutputStream (). ปิด (); // close writer return null; } สีส่วนตัว getColor () {int red = (int) (math.random ()*1000%256); int green = (int) (math.random ()*1000%256); int blue = (int) (math.random ()*1000%256); คืนสีใหม่ (สีแดง, เขียว, สีน้ำเงิน); } สตริงสาธารณะ getChknumber () {return chknumber; } โมฆะสาธารณะ setChknumber (สตริง chknumber) {this.chknumber = chknumber; } @Override โมฆะสาธารณะ setSession (แผนที่ <String, Object> เซสชัน) {// วิธีการที่สร้างขึ้นอัตโนมัติ todo stub this.session = เซสชัน; } @Override โมฆะสาธารณะ setSession (แผนที่ <String, Object> เซสชัน) {// วิธีการที่สร้างขึ้นอัตโนมัติ todo stub this.session = เซสชัน; } @Override โมฆะสาธารณะ setServletResponse (การตอบสนอง httpservletResponse) {// วิธีการที่สร้างขึ้นอัตโนมัติ todo stub this.response = การตอบสนอง; -ให้ความสนใจกับการใช้เซสชันและการตอบสนอง
2. ลงทะเบียนในไฟล์ struts.xml:
<action name = "RandomCode"> </action>
ไม่มีการส่งคืนข้อมูลเพื่อไม่ให้มีการเปลี่ยนเส้นทางหน้า
3. การเขียนหน้า JSSP
<%@ page language = "java" contentType = "ข้อความ/html; charset = utf-8" pageencoding = "utf-8"%> <%@ taglib uri = "/struts-tags" prefix = "s"%> String basepath = request.getScheme ()+": //"+request.getServerName ()+":"+request.getServerport ()+path+"/"; %> <! doctype html สาธารณะ "-// w3c // dtd html 4.01 transitional // en" "http://www.w3.org/tr/html4/loose.dtd"> <html> charset = utf-8 "> <script type =" text/javascript "> <!-ฟังก์ชัน reloadCode (obj, base) {var rand = new date (). getTime (); // เวลาปัจจุบันถูกใช้เป็นพารามิเตอร์ไปยัง URL เพื่อเปลี่ยน URL เพื่อให้รหัสการตรวจสอบจะถูกโหลดแบบไดนามิก // มันเป็นเพียงเอฟเฟกต์สัญญาณรบกวนมันไม่มีความหมาย แต่มันฉลาดมาก ฮ่าฮ่า obj.src = base+"anwerCode.Action? ABC ="+RAND; // ในความเป็นจริงไม่มีฟิลด์ ABC ในฝั่งเซิร์ฟเวอร์ } //-> </script> <title> หน้าทดสอบ </title> </head> <body> <form action = "testlogin" method = "post"> ชื่อผู้ใช้ <อินพุต type = "text" ชื่อ = "ชื่อ"> <br> รหัสผ่าน src = "<%= basepath%> anwerCode.Action" id = "safeCode" onClick = "reloadCode (นี่, '<%= basepath%>')"/> <br> <อินพุต type = "subment" value = "loginin"> </form>4. การตรวจสอบ
(1) เพิ่มวิธีการตรวจสอบในการดำเนินการ
String Public String testLogin () {if (session.get ("randomCode"). เท่ากับ (chknumber)) {คืนความสำเร็จ; } else {return error; -(2) ลงทะเบียนใน struts.xml
<action name = "testLogin" method = "testLogin"> <ชื่อผลลัพธ์ = "ความสำเร็จ"> success.jsp </result> <name result = "error"> error.jsp </result> </action>
ข้างต้นคือการใช้งาน struts2 ที่ตัวแก้ไขแนะนำให้คุณสร้างรหัสการตรวจสอบแบบไดนามิกและตรวจสอบรหัสตัวอย่าง ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน!