1. คำนำ
1.1. การตรวจสอบอินพุตคืออะไร? ทำไมฉันต้องเข้าสู่การยืนยัน?
ในบทความก่อนหน้านี้เราได้เรียนรู้เกี่ยวกับการแปลงชนิดข้อมูล เราพูดถึงสองวิธีในการประมวลผลข้อมูลเลเยอร์การนำเสนอ นอกจากนี้เรายังกล่าวว่าข้อมูลอินพุตของผู้ใช้จะต้องมีการแปลงพิมพ์เพื่อรับข้อมูลที่เราต้องการ ดังนั้นเราจะพิจารณาได้อย่างไรว่าข้อมูลหลังการแปลงเป็นข้อมูลที่เราต้องการ มันค่อนข้างสำรวจที่นี่ คุณสามารถคิดได้เช่นนี้: ผู้ชายผู้ใหญ่อายุ 18 ปีและคุณต้องการรับข้อมูล 18 ตอนนี้ แต่ผู้ใช้ป้อน 32 และมันก็ถูกต้องที่จะแปลงผ่านประเภท แต่ข้อมูลไม่ใช่สิ่งที่คุณต้องการ เราควรทำอย่างไรในเวลานี้? ดังนั้นการตรวจสอบอินพุตจึงมีประโยชน์ที่นี่
ความสัมพันธ์ระหว่างการแปลงประเภทและการตรวจสอบอินพุตคือ: การแปลงประเภทเป็นสิ่งที่จำเป็นสำหรับการตรวจสอบอินพุต หากการแปลงทั้งสองประเภทไม่ถูกต้องแสดงว่าไม่จำเป็นต้องทำการตรวจสอบอินพุต แต่มักจะพิมพ์การแปลงและการตรวจสอบอินพุตจะทำในเวลาเดียวกัน
การตรวจสอบอินพุตมีสองประเภท:
1. การตรวจสอบลูกค้า;
2. การตรวจสอบฝั่งเซิร์ฟเวอร์ สิ่งที่เราอธิบายไว้ที่นี่เป็นหลักคือการตรวจสอบฝั่งเซิร์ฟเวอร์ (การเขียนใหม่ Validatexxx เมธอดและการตรวจสอบไฟล์การกำหนดค่า XML)
1.2. กระบวนการตรวจสอบของวิธีการ Validatexxx ใหม่
1. ตัวแปลงประเภทมีหน้าที่รับผิดชอบในการแปลงประเภทของพารามิเตอร์การร้องขอของสตริงและตั้งค่าเหล่านี้เป็นค่าคุณสมบัติของการกระทำ
2. ข้อยกเว้นอาจเกิดขึ้นระหว่างการดำเนินการแปลงประเภท หากมีข้อยกเว้นเกิดขึ้นข้อมูลข้อยกเว้นจะถูกบันทึกโดยอัตโนมัติไปยัง ActionContext Interceptor ConversionError มีหน้าที่ในการห่อหุ้มมันลงใน Fielderror
3. เมธอด Call Validatexxx () ผ่านการสะท้อนกลับโดยที่ XXX เป็นชื่อวิธีที่สอดคล้องกับตรรกะการประมวลผลที่จะประมวลผลคำขอของผู้ใช้
4. เรียกวิธีการตรวจสอบความถูกต้องของคลาสการกระทำ
5. หากขั้นตอนข้างต้นไม่แสดง fielderror วิธีการประมวลผลสำหรับการประมวลผลคำขอผู้ใช้ในการดำเนินการจะถูกเรียก หาก Fielderror ปรากฏขึ้นระบบจะถ่ายโอนไปยังมุมมองที่ระบุไว้ในมุมมองเชิงตรรกะอินพุต
2. การตรวจสอบอินพุต
2.1. มีสองวิธีในการตรวจสอบที่นี่:
1. เขียนวิธีการตรวจสอบใหม่หรือปรับแต่งวิธี Validatexxx (โดยที่ XXX คือชื่อที่คุณกำหนดวิธีการจะถูกดำเนินการก่อนและวิธีการตรวจสอบจะถูกดำเนินการ)
2. สร้าง XML ใหม่สำหรับการตรวจสอบ
2.2. เขียนวิธีการตรวจสอบใหม่
ในเฟรมเวิร์ก MVC จะมีส่วนการตรวจสอบข้อมูลมาตรฐาน Struts2 ให้วิธีการตรวจสอบที่นี่ เราสามารถเขียนวิธีการตรวจสอบใหม่เพื่อทำการตรวจสอบอินพุต อย่างไรก็ตามมีสองจุดที่ต้องรู้เกี่ยวกับการเขียนวิธีการตรวจสอบใหม่: 1. วิธีการตรวจสอบจะถูกดำเนินการก่อนที่วิธีการดำเนินการ; 2. วิธีการตรวจสอบจะดำเนินการกฎการตรวจสอบสำหรับการกระทำทั้งหมด เพื่อที่จะแยกแยะการกระทำบางอย่างเราสามารถใช้วิธี Validatexxx
หมายเหตุ: ตัวอย่างต่อไปนี้เป็นตัวอย่างของการแปลงประเภทท้องถิ่นและการตรวจสอบความถูกต้องของอินพุต
ตัวอย่างการตรวจสอบการลงทะเบียนอย่างง่าย:
สร้างผู้ใช้ระดับเอนทิตีใหม่:
ผู้ใช้
สร้างมุมมองใหม่: register.jsp
<%@ page language = "java" contentType = "ข้อความ/html; charset = utf-8" pageencoding = "utf-8"%> <%@ taglib uri = "/struts-tags" prefix = "s"%> <! "http://www.w3.org/tr/html4/loose.dtd"><html><head> <meta http-equiv =" content-ype "content =" text/html; charset = utf-8 " <form action = "register_test"> ผู้ใช้: <อินพุต type = "text" name = "user"> <br/> รหัสผ่าน: <อินพุตประเภท = "รหัสผ่าน" ชื่อ = "ผู้ใช้"> <br/> รหัสผ่าน: <อินพุตประเภท = "รหัสผ่าน" ชื่อ = "ผู้ใช้"> <br/>
สร้างคลาสการลงทะเบียนใหม่เพื่อสืบทอด Actionsupport
แพ็คเกจ com.validatexxx; นำเข้า com.opensymphony.xwork2.actionsupport; // rewrite ตรวจสอบความถูกต้อง () และวิธีการที่ระบุ Validatexxx สำหรับการตรวจสอบ/ * * ใน struts.xml วิธีการใช้วิธีการใช้งาน actriction ผู้ใช้สาธารณะ getUser () {return user; } โมฆะสาธารณะ setUser (ผู้ใช้ผู้ใช้) {this.user = ผู้ใช้; } // 2 @Override void public validate () {system.out.println ("วิธีการตรวจสอบความถูกต้องของการเขียนใหม่"); if (null == user.getPassword () || "" .equals (user.getPassword ()) || null == user.getRepassWord () || "" .equals (user.getRepassword ())) {this.addfielderror ("repassword" กลับ; } if (! user.getPassword (). เท่ากับ (user.getRepassword ())) {// เมื่อข้อมูลอยู่ใน Fielderror เซิร์ฟเวอร์จะข้ามไปยังมุมมองเชิงตรรกะของอินพุตนี้โดยอัตโนมัติ }} // 1 โมฆะสาธารณะ validateTest () {system.out.println ("วิธีการตรวจสอบที่กำหนดเอง: ValidateTest"); } // 3 การทดสอบสตริงสาธารณะ () {system.out.println ("ทดสอบ: วิธีการ"); กลับมาประสบความสำเร็จ -หมายเหตุ: คุณสมบัตินี่คือผู้ใช้ดังนั้นชื่อของพารามิเตอร์หน้า JSP ของคุณจะต้องเขียนเป็นชื่อของผู้ใช้อินสแตนซ์และจากนั้นคุณต้องสร้างตัวแปลงประเภทเพื่อส่งคืนคลาสที่เต็มไปด้วยข้อมูล
สร้าง struts.xml ใหม่และเก็บไว้ใน web-inf/classes/struts.xml
หมายเหตุ: วิธีการที่นี่จะต้องกำหนดโดยวิธีการ Valudatexxx () ของคุณ นี่คือการทดสอบ หากคุณใช้ *structs2 จะต้องกำหนดค่าวิธีการที่เข้มงวด-เมเทค = "false" ว่ากันว่าเนื่องจากเวอร์ชันสูงเกินไปความปลอดภัยของมันเพิ่มขึ้นและทั้งหมดจะต้องเพิ่มให้ใช้ *
สร้างคลาส usertypeconverter ใหม่เพื่อสืบทอด strutstypeconverter (สร้างตัวแปลงประเภท)
แพ็คเกจ com.validatexxx; นำเข้า java.util.map; นำเข้า org.apache.struts2.util.strutstypeconverter; // คลาสของประเภทการแปลงคลาสสาธารณะผู้ใช้ usertypeconverter ขยาย strutstypeconverter {@override วัตถุสาธารณะ convertfromstring System.out.println ("UserTypeconverter: พิมพ์การแปลง!"); ผู้ใช้ผู้ใช้ = ผู้ใช้ใหม่ (); user.setUserName (arg1 [0]); user.setPassword (arg1 [1]); user.setRepassword (arg1 [2]); ผู้ใช้ส่งคืน; } @Override สตริงสาธารณะ convertToString (แผนที่ Arg0, Object Arg1) {ผู้ใช้ U = (ผู้ใช้) Arg1; ส่งคืน U.GetUserName ()+"!"; -หมายเหตุ: หลังจากตัวแปลงประเภทนี้ถูกสร้างขึ้นคุณจะต้องสร้างการลงทะเบียนใหม่-คอนเวอร์ชั่นใหม่และวางไว้ในไดเรกทอรีเดียวกัน
เนื้อหาของไฟล์นี้คือ:
ที่แรกคือชื่อคุณสมบัติที่คุณอยู่ในการลงทะเบียนตามด้วยเส้นทางเฉพาะไปยังตัวแปลงประเภท
สร้างมุมมองความสำเร็จใหม่: success.jsp
success.jsp
สร้างมุมมองข้อผิดพลาดใหม่: input.jsp
input.jsp
ผลของการดำเนินการรหัสที่ประสบความสำเร็จมีดังนี้:
register.jsp หน้า
หน้าเว็บที่กระโดดได้สำเร็จคือ: success.jsp
ผลการทดสอบคอนโซลคือ:
ข้อมูลจะกระโดดไปยังผู้ใช้ usertypeconverter สำหรับการแปลงประเภทจากนั้นกระโดดไปที่ registeraction ดำเนินการวิธีการ ValidateTest () ตรวจสอบแล้วกลับมาประสบความสำเร็จจากนั้นเรียกใช้มุมมองผลลัพธ์
มาดูลำดับที่รหัสล้มเหลว:
register.jsp หน้า
หน้า input.jsp
เอฟเฟกต์การทดสอบคอนโซล:
ในวิธีการตรวจสอบรหัสของผู้เขียนคือ: this.addfielderror () ดังที่ได้กล่าวไว้ก่อนหน้านี้หากมีการเพิ่มข้อผิดพลาดเซิร์ฟเวอร์จะช่วยให้เราข้ามไปยังอินเทอร์เฟซที่ไม่ถูกต้องโดยอัตโนมัติ มันจะส่งคืนอินพุตและอินพุตถูกกำหนดค่าใน struts.xml และจะกลับไปที่อินเทอร์เฟซ input.jsp
2.3. สร้าง XML ใหม่สำหรับการตรวจสอบอินพุต
สร้างอินเทอร์เฟซมุมมองใหม่: test.jsp
<%@ page language = "java" contentType = "ข้อความ/html; charset = utf-8" pageencoding = "utf-8"%> <%@ taglib uri = "/struts-tags" prefix = "s"%> <! "http://www.w3.org/tr/html4/loose.dtd"><html> <head> <meta http-equiv =" content-ype "content =" text/html; charset = utf-8 " method = "post"> <s: textfield name = "name" label = "name" size = "20" /> <s: textfield name = "อายุ" label = "age" size = "20" /> <s: ส่งชื่อ = "ส่ง" label = "subment" align = "center" />
สร้างคลาสพนักงานใหม่เพื่อสืบทอดการกระทำ
คลาสนี้ใช้วิธีการตรวจสอบการแทนที่และการกำหนดค่า XML เราสามารถเลือกหนึ่งในนั้นสำหรับการตรวจสอบ
แพ็คเกจ com.validatexxx; นำเข้า com.opensymphony.xwork2.actionsupport; // ใช้วิธีการตรวจสอบ () เพื่อตรวจสอบนี่คือการตรวจสอบฝั่งเซิร์ฟเวอร์! พนักงานชั้นเรียนสาธารณะขยายการดำเนินการสนับสนุน {ชื่อสตริงส่วนตัว; อายุ int ส่วนตัว; สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } public int getage () {return Age; } การตั้งค่าโมฆะสาธารณะ (อายุ int) {this.age = อายุ; } // ขั้นตอนที่สองเรียกใช้วิธีนี้สตริงสาธารณะ execute () {system.out.println ("ดำเนินการ:"+this.age); กลับมาประสบความสำเร็จ }/* การตรวจสอบโดยใช้ฝั่งเซิร์ฟเวอร์: เขียนวิธีการตรวจสอบใหม่ (); // ขั้นตอนแรกคือการดำเนินการเมธอด // การเขียนวิธีการตรวจสอบใหม่มีข้อบกพร่อง: ทุกครั้งที่คุณใช้วิธีการตรวจสอบเพื่อตรวจสอบทำให้เกิดการสูญเสียทรัพยากรอย่างมาก Void Public Varidate () {System.out.println ("ตรวจสอบ"); if (name == null || name.trim (). Equals ("")) {// เมื่อเพิ่มข้อมูลลงในวิธีนี้เซิร์ฟเวอร์จะส่งคืนอินพุตแล้วข้ามไปที่หน้า input.jsp addFielderror ("ชื่อ", "ชื่อจำเป็น"); } ถ้า (อายุ <28 || อายุ> 65) {addFielderror ("อายุ", "อายุจะต้องอยู่ระหว่าง 28 และ 65"); -กำหนดค่าใน struts.xml:
success.jsp และ input.jsp ที่นี่ยังคงใช้ด้านบน
หลังจากนั้นเราจำเป็นต้องสร้างพนักงานใหม่-validation.xml และวางเส้นทางในไดเรกทอรีเดียวกับพนักงาน หมายเหตุ: -validation.xml ได้รับการแก้ไขและไม่เปลี่ยนแปลง
เนื้อหาคือ:
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! Doctype Validators สาธารณะ "-// apache struts // xwork validator 1.0.3 // en" "http://struts.apache.org/dtds/xwork-validator-1.0.3 type = "จำเป็น"> <stemple> จำเป็นต้องใช้ชื่อ </message> </field-validator> </field> <field name = "อายุ"> <field-validator type = "int"> <param name = "min"> 29 </param> <param name = "max"> 64 </param>
จุดสำคัญ: ขีด จำกัด DTD ของไฟล์นี้จะต้องเป็นมิฉะนั้นข้อผิดพลาดในการส่งคืน:
ข้อผิดพลาด DefaultDispatcherERRORHANDLER เกิดขึ้นระหว่างการร้องขอการประมวลผล: [การเชื่อมต่อหมดเวลา: เชื่อมต่อ - [ตำแหน่งที่ไม่รู้จัก], NULL]
ต่อไปเราใช้ http: // localhost: 8080/learstruts2/validatejsp/test.jsp สำหรับการเข้าถึง
ทดสอบสำเร็จ:
test.jsp อินเตอร์เฟส:
success.jsp
ตัวอย่างการทดสอบความล้มเหลว:
อินเทอร์เฟซ input.jsp:
ตัวอย่างภาพประกอบถูกต้อง
ในความเป็นจริงมีตัวตรวจสอบตัวตรวจสอบในตัวหลายตัวใน struts2: ตัวตรวจสอบความถูกต้องที่จำเป็น, ตัวตรวจสอบความถูกต้องของสตริงที่จำเป็น, ตัวตรวจสอบจำนวนเต็ม, ตัวตรวจสอบวันที่, ตัวตรวจสอบความถูกต้องของนิพจน์, ตัวตรวจสอบความยาวอักขระ, ตัวตรวจสอบการแสดงออกปกติ ฯลฯ หากจำเป็นผู้เขียนจะอธิบายทีละคน
ข้างต้นเป็นคำอธิบายโดยละเอียดของบทช่วยสอนการตรวจสอบข้อมูลการป้อนข้อมูล Struts2 ที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!