1. บทนำ Interceptor
ฟังก์ชั่นของ interceptor นั้นคล้ายกับตัวกรองในไฟล์ web.xml สามารถสกัดกั้นการร้องขอของผู้ใช้และควบคุมหน้าโดยสกัดคำขอผู้ใช้ ตัวดักถูกกำหนดค่าใน struts-core-2.2.3.jar Interceptor ดั้งเดิมได้รับการกำหนดค่าใน struts-default.xml ซึ่งปิดผนึกวิธีการใช้งานพื้นฐานของ interceptor
ฟังก์ชัน interceptor struts2 นั้นคล้ายกับตัวกรอง servlet ก่อนที่การกระทำจะดำเนินการวิธีการดำเนินการ struts2 จะดำเนินการสกัดกั้นที่อ้างอิงใน struts.xml ก่อน หากมีตัวดักหลายตัวมันจะถูกดำเนินการตามลำดับขึ้นและลง หลังจากดำเนินการวิธีการสกัดกั้นของตัวดักทั้งหมดวิธีการดำเนินการของการดำเนินการจะถูกดำเนินการ
struts2 interceptor ต้องใช้อินเทอร์เฟซนี้จาก com.opensymphoy.xwork2.interceptor.interceptor ต้องใช้สามวิธีต่อไปนี้ในตัวดักจับที่กำหนดไว้:
เป็นโมฆะทำลาย (); เป็นโมฆะ init (); String Intercept (actionInvocation Invocation) โยนข้อยกเว้น;
ตัวดักจับแบบกำหนดเองจำเป็นต้องแทนที่สามวิธีข้างต้น นอกจากนี้ไฟล์ configuration interceptor struts.xml ของ struts2 สืบทอดไฟล์ struts-default.xml ไฟล์ต้นฉบับเพื่อให้ข้อมูลการกำหนดค่าทั้งหมดใน struts-default.xml จะเป็นเจ้าของโดยอัตโนมัติใน <package> ที่สอดคล้องกัน รหัสเฉพาะมีดังนี้:
<package name = "Demo" Exted = "struts-default"> ... </package>
2. เพิ่ม interceptor
ในการใช้ interceptor คุณต้องกำหนดค่า Struts2 ใช้วิธีการแมปดังนั้นหากคุณต้องการใช้ฟังก์ชั่นบางอย่างคุณต้องกำหนดค่าในไฟล์การกำหนดค่าและตัวดักจับก็ไม่มีข้อยกเว้น ดังนั้นองค์ประกอบ interceptor ที่สอดคล้องกันจะต้องเพิ่มในแพ็คเกจและตัวดักจับจะต้องเชื่อมโยงกับไฟล์คลาสที่เกี่ยวข้องเพื่อให้การสกัดกั้นที่สอดคล้องกันจะถูกดำเนินการก่อนที่จะดำเนินการ วิธีการใช้งานเฉพาะมีดังนี้
(1) เพิ่มไฟล์ configuration struts.xml และเพิ่ม interceptor ลงในไฟล์
<package name = "testlogin" namespace = "/" ขยาย = "struts-default"> <!-interceptor-> <interceptor name = "myInterceptor"> </interceptor> name = "checkerror">/checksession.jsp </result> <interceptor-ref name = "myInterceptor"> </interceptor-ref> <interceptor-ref name = "defaultStack"> </interceptor-ref> </action>
ในแพ็คเกจด้านบนจะมีการเพิ่ม myInterceptor และคลาส Java ได้รับการลงทะเบียนสำหรับ interceptor ซึ่งชื่อ MyInterceptor และถูกบล็อกในแพ็คเกจ com.interceptor นอกจากนี้ยังมีการเพิ่มการกระทำที่สอดคล้องกันในแพ็คเกจ ก่อนที่จะดำเนินการการกระทำ MyInterceptor Interceptor จะถูกดำเนินการก่อน
(2) เขียน myinterceptor คลาส interceptor ที่ลงทะเบียน คลาสนี้จะต้องใช้ com.opensymphoy.xwork2.interceptor.interceptor อินเตอร์เฟสและแทนที่วิธีการที่เกี่ยวข้อง
แพ็คเกจ com.interceptor; นำเข้า java.util.map; นำเข้า com.entity.user; นำเข้า com.opensymphony.xwork2.actionContext; นำเข้า com.opensymphony.xwork2.ActionInvocation; นำเข้า com.opensymphony.xwork2.interceptor.interceptor; คลาสสาธารณะ MyInterceptor ใช้ Interceptor {ผู้ใช้ส่วนตัวผู้ใช้; ผู้ใช้สาธารณะ getUser () {return user; } โมฆะสาธารณะ setUser (ผู้ใช้ผู้ใช้) {this.user = ผู้ใช้; } @Override โมฆะสาธารณะทำลาย () {// TODO วิธีการที่สร้างขึ้นอัตโนมัติระบบ Stub System.out.println ("---- ทำลาย () ----"); } @Override โมฆะสาธารณะ init () {// todo วิธีการที่สร้างอัตโนมัติระบบ Stub System.out.println ("------ init () -------"); } @Override การสกัดกั้นสตริงสาธารณะ (actionInvocation Invocation) พ่นข้อยกเว้น {// todo วิธีการที่สร้างอัตโนมัติระบบสตับระบบ out.out.println ("-----------"); แผนที่ <string, Object> session = invocation.getInvocationContext (). getSession (); if (session.get ("ชื่อผู้ใช้")! = null) {system.out.println ("เข้าสู่ระบบสำเร็จ!"); //session.put ("ชื่อผู้ใช้", user.getUserName ()); return rachation.invoke (); } else {system.out.println ("เข้าสู่ระบบล้มเหลว!"); ส่งคืน "checkerror"; -(3) หลังจากสองขั้นตอนแรกตัวดักจับได้รับการกำหนดค่า ส่วนสุดท้ายคือการใช้ interceptor เพิ่มแท็กที่เกี่ยวข้องในหน้าจอแสดงผลและระบุการกระทำที่ชื่อตัวอย่างที่สร้างขึ้นด้านบนสำหรับแท็ก จากนั้นเรียกใช้หน้าเพื่อพิมพ์เนื้อหา interceptor ที่เกี่ยวข้องในคอนโซล
<%@ page language = "java" contentType = "ข้อความ/html; charset = utf-8" pageencoding = "utf-8"%> <! doctype html สาธารณะ "-// w3c // dtd html 4.01 transitional // en" <html> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"> <title> แทรกชื่อเรื่องที่นี่ </title> </head> <body> <form action = "demo"> ชื่อผู้ใช้ " type = "ส่ง" name = "ตกลง" value = "ส่ง"> </form> </body> </html>
เนื้อหาพิมพ์:
วิเคราะห์ผลลัพธ์ผลลัพธ์ ในขั้นตอนการรวบรวมโปรแกรมไฟล์การกำหนดค่า struts.xml จะอ่านไฟล์ configuration file struts.xml ก่อนและในการดำเนินการไฟล์การกำหนดค่าให้ค้นหาว่ามีการเพิ่ม interceptor หรือไม่ หากมีการเพิ่ม interceptor ให้ค้นหาว่าตัวดักจับหรือสแต็ก interceptor ถูกกำหนดใน <interceptors> ตามชื่อ interceptor หากพบว่าตัวดักจับถูกกำหนดให้ค้นหาคลาสที่ลงทะเบียนที่เกี่ยวข้องตามตัวดักจับและในที่สุดก็ค้นหาคลาสที่ลงทะเบียนในแพ็คเกจและดำเนินการวิธีการ init () ที่สอดคล้องกัน กระบวนการทั่วไปของขั้นตอนการทำงานของโปรแกรมนั้นคล้ายกับขั้นตอนการรวบรวม หลังจากผู้ใช้ส่งคำขอในเบื้องหน้าเขาจะมองหาการกระทำที่สอดคล้องกันใน struts.xml หากพบพบตัวดักจับจะพบ หากไม่พบข้อผิดพลาดที่เกี่ยวข้องจะถูกโยนลงไป ในที่สุดวิธีการสกัดกั้นของคลาสการลงทะเบียน Interceptor จะถูกดำเนินการ
3. สแต็ค Interceptor
Interceptors ยังมีแนวคิดของสแต็ค พวกเขากำหนดตัวดักจับที่ใช้ไปยังสถานะที่ใช้ร่วมกันเพื่อให้บรรลุการจัดการแบบครบวงจรเพื่อให้สามารถใช้การดักจับในแพ็คเกจได้อย่างมากช่วยอำนวยความสะดวกในการใช้ตัวดักจับอย่างมาก interceptors ซ้ำมักจะใช้ในแพ็คเกจ หากคุณเพิ่ม Interceptor-Ref ให้กับการกระทำทุกครั้งมันจะลำบากมาก จากนั้นสแต็ก Interceptor จะถูกสร้างขึ้นเพื่อแก้ปัญหานี้ การกำหนดค่าเฉพาะมีดังนี้:
<package name = "testlogin" namespace = "/" ขยาย = "struts-default"> <!-interceptor-> <interceptor name = "myInterceptor"> </palceptor> <! ในแท็กการกระทำเฉพาะห่วงโซ่ interceptor จะต้องอ้างอิง-> <interceptor-stack name = "defaulttstack1"> <interceptor-ref name = "myInterceptor"> </interceptor-ref> <interceptor-ref name = "defaultStack"> </interceptor-ref> type = "redirect">/orler.jsp </result> <name result = "success">/success.jsp </result> <name result = "checkerror">/checksession.jsp </result> <interceptor-ref name = "defaultStack1"> </interceptor-ref>
ในตัวอย่างการสกัดกั้นสแต็กจะใช้เพื่อกำหนดสแต็คสกัดกั้นชื่อ defaulttstack1 ตัวดักจับที่จะดำเนินการจะถูกเพิ่มเข้าไปในสแต็กตัวดักถูกห่อหุ้มและสแต็ก interceptor นั้นเรียกโดยตรงในการกระทำโดยตระหนักถึงการแบ่งปันสแต็กสกัดกั้น
4. สแต็กสแต็คเริ่มต้น
นอกจากนี้ยังสามารถกำหนดสแต็ก Interceptor เริ่มต้นได้นั่นคือหากไม่มีการสกัดกั้นในการกระทำมันจะดำเนินการสกัดกั้นสาธารณะโดยค่าเริ่มต้น มันอยู่ในระดับเดียวกับแท็ก interceptors และถูกกำหนดโดยใช้ค่าเริ่มต้น interceptor-ref
<package name = "testlogin" namespace = "/" ขยาย = "struts-default"> <!-interceptor-> <interceptor name = "myInterceptor"> </palceptor> <! ในแท็กการกระทำเฉพาะห่วงโซ่ interceptor จะต้องอ้างอิง-> <interceptor-stack name = "defaultInter"> <interceptor-ref name = "myInterceptor"> </interceptor-ref> <interceptor-ref name = "defaultStack"> </interceptor-ref> <default-interceptor-ref name = "defaultInter"> </default-interceptor-ref> <action name = "demo"> <name result = "error" type = "redirect">/error.jsp </result> <result name = "Success">/success.jsp </result>
สแต็ก Interceptor เริ่มต้นที่กำหนดจะดำเนินการเฉพาะสแต็ก Interceptor เริ่มต้นที่กำหนดเองหากการกระทำไม่ได้ระบุตัวดักจับ หาก Interceptor ถูกนิยามใหม่ในการดำเนินการมันจะแทนที่สแต็ก Interceptor เริ่มต้นที่กำหนดเอง
5. ไม่มีการดำเนินการ interceptor
มีอีกสถานการณ์ที่แพ็คเกจกำหนดตัวดักจับเริ่มต้น แต่ไม่จำเป็นต้องดำเนินการ interceptor ในการกระทำที่เขียน จากนั้นคุณสามารถเพิ่ม interceptor ชื่อ DefaultStack ลงในการกระทำที่เกี่ยวข้อง มันเป็นตัวดักจับเริ่มต้นของระบบและจะไม่มีการดำเนินการ
<package name = "testlogin" namespace = "/" ขยาย = "struts-default"> <!-interceptor-> <interceptor name = "myInterceptor"> </palceptor> <! ในแท็กการกระทำเฉพาะห่วงโซ่ interceptor จะต้องอ้างอิง-> <interceptor-stack name = "defaultInter"> <interceptor-ref name = "myInterceptor"> </interceptor-ref> <interceptor-ref name = "defaultStack"> </interceptor-ref> <default-interceptor-ref name = "defaultInter"> </default-interceptor-ref> <action name = "demo"> <name result = "error" type = "redirect">/error.jsp </result> <result name = "Success">/success.jsp </result> < <interceptor-ref name = "defaultStack"> </interceptor-ref> </action> </packagple>
6. วิธีการสกัดกั้น
6.1 การใช้งาน
Interceptor ข้างต้นใช้การดำเนินการสกัดกั้นการสกัดกั้นเท่านั้น ในความเป็นจริงตัวดักจับมีฟังก์ชั่นที่ทรงพลังมากและยังสามารถสกัดกั้นวิธีการกระทำที่สอดคล้องกันได้ ความแตกต่างระหว่างการสกัดกั้นคือถ้าคุณต้องการสกัดกั้นวิธีการคุณต้องสืบทอด MethodFilterInterceptor คลาส คลาสนี้อยู่ใน Xwork-core.jar ซึ่งพิสูจน์ได้อีกครั้งว่าการทำงานบนเว็บเป็นหลักของ struts2 นอกจากนี้ยังจำเป็นต้องเพิ่มแอตทริบิวต์ที่สอดคล้องกันในไฟล์การกำหนดค่าเพื่อกำหนดวิธีการสกัดกั้นและวิธีการไม่รุกราน วิธีการกำหนดค่าเฉพาะมีดังนี้:
<package name = "testlogin" namespace = "/" ขยาย = "struts-default"> <!-interceptor-> <interceptor name = "myInterceptor"> </palceptor> <! ในแท็กการกระทำเฉพาะห่วงโซ่ interceptor จะต้องอ้างอิง-> <interceptor-stack name = "defaultInter"> <interceptor-ref name = "myInterceptor"> </interceptor-ref> <interceptor-ref name = "defaultStack"> </interceptor-ref> type = "redirect">/orler.jsp </result> <name result = "success">/success.jsp </result> <name result = "checkerror">/checksession.jsp </result> <name result = "checkerror">/checksession.jsp </result> <! ถูกสกัดกั้นใน excludemethods-> <interceptor-ref name = "defaultStack"> <param name = "incluleMethods"> เพิ่มชื่อวิธีการที่จะถูกดักจับ </param> <!-วิธีการสกัดกั้น-> <param name = "excludemethods"
รหัสในคลาสที่สืบทอดวิธีการสกัดกั้นที่สอดคล้องกันของคลาส MethodFilterInterceptor:
แพ็คเกจ com.interceptor; นำเข้า java.util.map; นำเข้า com.opensymphony.xwork2.actionContext; นำเข้า com.opensymphony.xwork2.ActionInvocation; นำเข้า com.opensymphony.xwork2.interceptor.methodfilterinterceptor; คลาสสาธารณะอินเตอร์ขยาย MethodFilterInterceptor {@Override สตริงสาธารณะ dointercept (actionInvocation Invocation) โยนข้อยกเว้น {system.out.println ("-intercept ()-"); // รับแผนที่เซสชันที่สอดคล้องกัน <สตริง, วัตถุ> เซสชัน = ravecocation.getInvocationContext (). getSession (); คำขอแผนที่ = (แผนที่) ActionContext.getContext (). รับ ("คำขอ"); string username = (string) request.get ("user.username"); if (session.get ("ชื่อผู้ใช้")! = null) {string result = invocation.invoke (); System.out.println ("-สิ้นสุด ()-"); ผลการกลับมา; - 6.2 การสาธิต
ลองดูตัวอย่างของวิธีการสกัดกั้นและวิเคราะห์ผลลัพธ์ ตัวอย่างต่อไปนี้แสดงผลลัพธ์ผลลัพธ์ของวิธีการสกัดกั้น ในอินสแตนซ์คลาสการเข้าสู่ระบบจะถูกสร้างแยกต่างหากเพื่อเพิ่มวิธีการที่จะดำเนินการโดยการกระทำ คลาสอินเตอร์ถูกแทนที่ในวิธีการสกัดกั้นและส่งออกว่าจะสกัดกั้นวิธีการบางอย่างในคอนโซลหรือไม่ ไฟล์ login.jsp ถูกเพิ่มเพื่อแสดงให้เห็นถึงการดำเนินการของทั้งสามวิธีตามลำดับ
(1) คำจำกัดความของวิธีการสกัดกั้นใน struts.xml กำหนดตัวดักจับชื่ออินเตอร์ในแพ็คเกจและระบุพารามิเตอร์ในตัวดัก รวมถึงวิธีการใช้เพื่อสกัดกั้นวิธีการ 1 Method2 ใน ExcludeMethods หมายความว่าวิธีการ Methods2 ไม่ได้ถูกดักจับ การกำหนดค่าเฉพาะมีดังนี้:
<! doctype struts สาธารณะ "-// Apache ซอฟต์แวร์ Foundation // dtd struts การกำหนดค่า 2.0 // en" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <interceptor name = "inter"> <param name = "include ethods"> method1 </param> <!-วิธีการสกัดกั้น 1-> <param name = "excludemethods"> method2 </param> </interceptor> <interceptor-stack = name = "defaultStack"> </interceptor-ref> </interceptor-stack> </interceptor-stack> </interceptors> <action name = "loginAction"> <ชื่อผลลัพธ์ = "ความสำเร็จ"> success.jsp </result> <ชื่อผลลัพธ์ = "ข้อผิดพลาด"> type = "redirectaction"> ยินดีต้อนรับ </result> <interceptor-ref name = "inter"> </interceptor-ref> <interceptor-ref name = "defaultStack"> </interceptor-ref> </action>
(2) คลาสการเข้าสู่ระบบกำหนดค่าการกระทำใน login.jsp และเพิ่มสามวิธีวิธีการ 1-method3 ไปยังคลาสนี้ตามลำดับวิธีการที่ 1 ถูกสกัดกั้นวิธีการ 2 และ method3 ไม่ได้ถูกดักจับและในที่สุดเราก็ตรวจสอบผลลัพธ์เอาต์พุต
แพ็คเกจ com.action; นำเข้า com.opensymphony.xwork2.actionsupport; การเข้าสู่ระบบระดับสาธารณะขยายการกระทำ actionsUpport {@Override สตริงสาธารณะ execute () โยนข้อยกเว้น {ถ้า (this.username.equals ("admin") && this.password.equals ("admin")) {return "ความสำเร็จ"; } อื่นถ้า (this.username.equals ("ยกเลิก") && this.password.equals ("ยกเลิก")) {return "ยกเลิก"; } else {return "ข้อผิดพลาด"; }} โมฆะสาธารณะวิธีการ 1 () {system.out.println ("วิธีการดำเนินการ: วิธีการ 1"); } โมฆะสาธารณะวิธีการ 2 () {system.out.println ("วิธีการดำเนินการ: method2"); } โมฆะสาธารณะวิธีการ 3 () {system.out.println ("วิธีการดำเนินการ: method3"); } ชื่อผู้ใช้สตริงส่วนตัว; รหัสผ่านสตริงส่วนตัว สตริงสาธารณะ getUserName () {return this.username; } โมฆะสาธารณะ setUserName (ชื่อผู้ใช้สตริง) {this.userName = ชื่อผู้ใช้; } สตริงสาธารณะ getPassword () {return this.password; } โมฆะสาธารณะ setPassword (รหัสผ่านสตริง) {this.password = รหัสผ่าน; -(3) คลาสระหว่างการสืบทอดคลาส MethodFilterInterceptor และใช้เพื่อใช้วิธีการสกัดกั้น เขียนวิธี dointercept ใหม่และเพิ่มข้อมูลที่เกี่ยวข้องสำหรับการสกัดกั้นไปยังวิธีการ
แพ็คเกจ com.interceptor; นำเข้า java.util.date; นำเข้า java.util.map; นำเข้า com.action.loginaction; นำเข้า com.opensymphony.xwork2.actionContext; นำเข้า com.opensymphony.xwork2.ActionInvocation; นำเข้า com.opensymphony.xwork2.interceptor.methodfilterinterceptor; คลาสสาธารณะอินเตอร์ขยาย MethodFilterInterceptor {@Override String Protected Dointercept (actionInvocation Invocation) โยนข้อยกเว้น {// toDo วิธีการที่สร้างขึ้นอัตโนมัติระบบ Stub System.out.println ("Interceptor Intercepts ก่อนการดำเนินการดำเนินการ"+วันที่ใหม่ ()); String result = rachation.invoke (); // ดำเนินการวิธีการดำเนินการ System.out.println ("Interceptor Intercepts หลังจากดำเนินการดำเนินการ"+วันที่ใหม่ ()); ผลการกลับมา; -(4) login.jsp เพิ่มสามปุ่มในหน้า JSP แสดงสามวิธีตามลำดับและตัดสินการสกัดกั้นของการสกัดกั้นของวิธีการ การกระทำที่โพสต์กลับโดยปุ่มสามปุ่มหลังจากคลิกจะถูกเพิ่มใน JavaScript แบบไดนามิก สิ่งนี้บรรลุวิธีการดำเนินการที่แตกต่างกันในรูปแบบ แน่นอนว่ามีวิธีการอื่น ๆ ซึ่งจะกล่าวถึงในบทความถัดไป
<%@ page language = "java" contentType = "ข้อความ/html; charset = utf-8" pageencoding = "utf-8"%> <! doctype html สาธารณะ "-// w3c // dtd html 4.01 transitional // en" <html> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"> <title> แทรกชื่อเรื่องที่นี่ </title> <script type = "text/javascript"> // วิธีการ 1 Form.action = "LoginAction! Method1"; Form.submit (); } // วิธีที่ 2, เพิ่มวิธีการที่ไม่ได้สกัดกั้นสำหรับปุ่ม 2 ฟังก์ชั่นวิธีการ 2 () {var form = document.forms [0]; Form.action = "LoginAction! Method2"; Form.submit (); } // วิธีที่ 3, เพิ่มวิธีการที่ไม่ได้สกัดกั้นสำหรับปุ่ม 3 ฟังก์ชั่นวิธีการ 3 () {var form = document.forms [0]; Form.action = "LoginAction! Method3"; Form.submit (); } </script> </head> <body> <body> <form> ชื่อผู้ใช้: <อินพุต type = "text" name = "ชื่อผู้ใช้"> <br> รหัสผ่าน: <อินพุต type = "text" name = "รหัสผ่าน"> <br> <input type = "ส่ง" name = "ok" value = "button1 type = "ส่ง" name = "ok2" value = "button3" onclick = "method3 ()"> </form> </body> </html> มุมมองหน้าหลังจากการรันเสร็จสมบูรณ์:
(5) วิเคราะห์ผลลัพธ์การทำงานปุ่มคลิก 1, 2 และ 3 ตามลำดับและส่งออกผลลัพธ์ในคอนโซล ปุ่ม 1 คือวิธีที่ถูกผูกไว้ 1 วิธีนี้สกัดกั้นใน struts.xml หากผลลัพธ์ถูกต้องผลลัพธ์จะถูกแสดง ปุ่มที่สอดคล้องกัน 2 และ 3 จะส่งออกผลการทำงานเท่านั้นเนื่องจากไม่ได้ถูกดักจับ จากนั้นดูแผนภาพผลลัพธ์ด้านล่าง:
แผนภาพผลลัพธ์เป็นผลมาจากการวิเคราะห์ของเรา ปุ่ม 1 ถูกสกัดกั้นและวิธีการ dointercept ในคลาสระหว่างคลาสถูกดำเนินการ ปุ่มที่สอดคล้องกัน 2 และ 3 ของทั้งสองไม่ได้ถูกดักจับ กล่าวอีกนัยหนึ่งวิธีการที่ 1 จะถูกวางไว้ใน whitelist ของ method interceptor และวิธีการจะต้องสกัดกั้นเมื่อดำเนินการ; Method2 ถูกวางไว้ในบัญชีดำของ Interceptor และไม่จำเป็นต้องสกัดกั้นวิธีการ; Method3 ไม่ได้ทำอะไรเลย
7. บทสรุป
เนื้อหาของ interceptor สรุปไว้ที่นี่ Interceptor มีฟังก์ชั่นที่ทรงพลังมากช่วยให้นักพัฒนาสามารถควบคุมผลลัพธ์ผลลัพธ์ที่รันไทม์เพิ่มความยืดหยุ่นในการเขียนโปรแกรม นอกจากนี้อย่าพยายามจดจำสิ่งทฤษฎีใด ๆ คุณต้องวิเคราะห์พวกเขาอย่างมีเหตุผลฝึกฝนมากขึ้นและทำตัวอย่างเล็ก ๆ น้อย ๆ เพื่อให้เข้าใจผลการวิเคราะห์ที่ลึกซึ้งยิ่งขึ้น
PS: คำอธิบายการทำงานของตัวดักจับที่จัดทำโดย struts2 (xwork)
ตัวดักจับ | ชื่อ | อธิบาย |
ตัวสำรองนามแฝง | นามแฝง | พารามิเตอร์คำขอจะถูกแปลงเป็นไฟล์ชื่อที่แตกต่างกันระหว่างคำขอที่แตกต่างกันและเนื้อหาคำขอยังคงไม่เปลี่ยนแปลง |
การดักจับ | โซ่ | ปล่อยให้คุณสมบัติของการกระทำก่อนหน้านี้เข้าถึงได้โดยการกระทำถัดไปและตอนนี้ใช้ร่วมกับผลลัพธ์ของประเภทโซ่ (<result type = "chain">) |
Interceptor ช่องทำเครื่องหมาย | ช่องทำเครื่องหมาย | เพิ่มรหัสการประมวลผลแบบอัตโนมัติการตั้งค่าเนื้อหาของ UncheckBox เป็น FALSE ในขณะที่ HTML ไม่ได้ส่ง UncheckBox ตามค่าเริ่มต้น |
สกัดกั้นคุกกี้ | คุกกี้ | ใช้ชื่อและค่าที่กำหนดค่าเพื่ออ้างถึงคุกกี้ |
Interceptor ข้อผิดพลาดการแปลง | conversionError | เพิ่มข้อผิดพลาดจาก ActionContext ไปยังฟิลด์คุณสมบัติของการกระทำ |
สร้างเซสชัน interceptor | การสร้าง | สร้าง httpsession โดยอัตโนมัติเพื่อใช้สำหรับบริการ interceptor ที่ต้องการ httpsession |
การดีบัก | การดีบัก | ให้หน้าการดีบักที่แตกต่างกันเพื่อแสดงสถานะข้อมูลภายใน |
ดำเนินการและรอการสกัดกั้น | execandwait | ดำเนินการดำเนินการในพื้นหลังในขณะที่พาผู้ใช้ไปยังหน้ารอกลาง |
Interceptor ข้อยกเว้น | ข้อยกเว้น | วางตำแหน่งข้อยกเว้นไปยังหน้าจอ |
ไฟล์ interceptor อัปโหลดไฟล์ | fileupload | ระบุฟังก์ชั่นการอัปโหลดไฟล์ |
I18N interceptor | i18n | บันทึกสถานที่ที่ผู้ใช้เลือก |
เครื่องดักจับเครื่องบันทึก | คนตัดไม้ | ชื่อการกระทำของเอาท์พุท |
Interceptor | เก็บ | จัดเก็บหรือเข้าถึงข้อความข้อผิดพลาดข้อผิดพลาดของฟิลด์ ฯลฯ ที่ปรากฏในคลาสแอ็คชั่นที่ใช้อินเตอร์เฟส ValidationAware |
ตัวดักจับแบบจำลอง | โมเดล | หากคลาสใช้ ModelDriven ให้วางผลลัพธ์ที่ได้จาก GetModel ในสแต็กค่า |
โมเดลที่มีการกำหนดขอบเขตขับเคลื่อน | เป็นโมเดล | หากการดำเนินการดำเนินการ ScopedModelDriven ตัวดักจับจะนำโมเดลออกจากขอบเขตที่สอดคล้องกันและเรียกวิธีการ SetModel ของแอ็คชั่นและนำไปใช้ในการกระทำ |
พารามิเตอร์ interceptor | พารามิเตอร์ | ตั้งค่าพารามิเตอร์ในการร้องขอไปยังการดำเนินการ |
เตรียมสกัดกั้น | เตรียมเตรียม | หาก Acton ใช้งานได้ดีผู้ใช้จะเรียกใช้วิธีการเตรียมของคลาสแอ็คชั่น |
สกัดกั้นขอบเขต | ขอบเขต | วิธีง่ายๆในการบันทึกสถานะการกระทำลงในเซสชันและแอปพลิเคชัน |
servlet config interceptor | ServletConfig | จัดเตรียมวิธีการเข้าถึง HttpservletRequest และ HttpservletResponse โดยเข้าถึงในรูปแบบของแผนที่ |
พารามิเตอร์สกัดกั้น | พาราพารา | ตั้งค่าเนื้อหาใน <param> ใน <การกระทำ> ลงในการกระทำที่สอดคล้องกันจากไฟล์ struts.xml |
บทบาทการสกัดกั้น | บทบาท | กำหนดว่าผู้ใช้มีบทบาทที่ระบุ JAAS หรือไม่มิฉะนั้นจะไม่ถูกดำเนินการ |
ตัวดักจับตัวจับเวลา | ตัวจับเวลา | เวลาดำเนินการตามการดำเนินการ |
ตัวดักโทเค็น | โทเค็น | หลีกเลี่ยงการดับเบิลคลิกผ่านโทเค็น |
โทเค็นเซสชันสกัดกั้น | ความเชื่อมั่น | อย่างไรก็ตามเช่นเดียวกับ Token Interceptor เมื่อดับเบิลคลิกข้อมูลที่ร้องขอจะถูกเก็บไว้ในเซสชัน |
การตรวจสอบความถูกต้อง | การตรวจสอบความถูกต้อง | ตรวจสอบข้อมูลที่ส่งโดยใช้เนื้อหาที่กำหนดไว้ในไฟล์ action-validation.xml |
ตัวดักเวิร์กโฟลว์ | เวิร์กโฟลว์ | วิธีการตรวจสอบความถูกต้องของการโทรและเมื่อมีข้อผิดพลาดมันจะถูกย้ายไปยังหน้าจออินพุต |
สกัดกั้นตัวกรองพารามิเตอร์ | N/A | ลบพารามิเตอร์ที่ไม่จำเป็นออกจากรายการพารามิเตอร์ |
ตัวดักจับโปรไฟล์ | การทำโปรไฟล์ | เปิดใช้งานโปรไฟล์ผ่านพารามิเตอร์ |