บทความนี้แนะนำตัวอย่างของการเปลี่ยนเส้นทางและการสกัดกั้นใน SpringMVC มีการแบ่งปันกับคุณดังนี้:
พารามิเตอร์ตัวแปรเมื่อออกแบบวิธีการใช้数据类型... เพื่อประกาศประเภทพารามิเตอร์ตัวอย่างเช่น: public static void function(int... numbers)
เมื่อใช้งาน Method Body พารามิเตอร์ตัวแปรจะถูกประมวลผลเป็นอาร์เรย์
การทดสอบระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {system.out.println (test.sum (1,2,3)); System.out.println (test.sum (1,2,3,4,54)); } ผลรวม int คงที่สาธารณะ (int ... ตัวเลข) {int sum = 0; สำหรับ (int i = 0; i <number.length; i ++) {sum+= numbers [i]; } return sum; -หมายเหตุ: ในแต่ละวิธีอนุญาตให้มีพารามิเตอร์ตัวแปรเพียง 1 ตัวเท่านั้นและหากมีพารามิเตอร์ตัวแปรจะต้องเป็นพารามิเตอร์สุดท้าย
การส่งต่อและเปลี่ยนเส้นทาง
ในวิธีการจัดการคำขอภายในคอนโทรลเลอร์วิธีเริ่มต้นของการส่งคืนสตริงคือการส่งต่อ ค่าที่ส่งต่อคือชื่อของส่วนประกอบมุมมองเช่นการส่งคืน "เข้าสู่ระบบ" ซึ่งจะได้รับหน้าเว็บที่แสดงในที่สุดตามตัวแก้ไขมุมมอง (ViewResolver) ไวยากรณ์ของการเปลี่ยนเส้นทางการส่งคืน: เส้นทางแสดงถึงการเปลี่ยนเส้นทาง เนื้อหาทางด้านขวาของการเปลี่ยนเส้นทาง: เป็นเส้นทาง เส้นทางนี้มักจะใช้เส้นทางสัมพัทธ์และอ้างอิงตามเส้นทางในแถบที่อยู่ของไคลเอนต์ปัจจุบันเป็นมาตรฐาน ตัวอย่างเช่นที่อยู่ปัจจุบันคือ: http: // localhost: 8080/project/user/reg.do จากนั้นกลับ "เปลี่ยนเส้นทาง: login.do" จากนั้นเปลี่ยนเส้นทางไปที่ http: // localhost: 8080/project/user/login.do http: // localhost: 8080/โครงการ/main/index.do
ซึ่งไปข้างหน้า:
วิธีเริ่มต้น แต่คุณสามารถใช้ return "forward: login"
มุมมองที่ส่งคืนจะต้องเป็นมุมมองซึ่งจะถูกส่งต่อไปยังมุมมองที่ระบุหลังจากผ่านตัวแยกวิเคราะห์มุมมอง
เปลี่ยนเส้นทาง:
เปลี่ยนเส้นทาง: return "Redirect: login.do"
ส่งคืนเส้นทางไปยังวิธีคอนโทรลเลอร์ไม่ใช่มุมมอง สิ่งนี้จะไม่ผ่านตัวแยกวิเคราะห์มุมมอง แต่จะกระโดดโดยตรง
ตัวอย่าง
@RequestMapping (value = "/handle_reg.do", method = requestmethod.post) สตริงสาธารณะ handlereg (ผู้ใช้ผู้ใช้แผนที่ ModelMap) {ลอง {userservice.reg (ผู้ใช้); System.out.println ("ลงทะเบียนสำเร็จ!"); กลับ "เปลี่ยนเส้นทาง: login.do"; // เปลี่ยนเส้นทางไปยังวิธีการควบคุมของ login.do, login.do สอดคล้องกับการส่งต่อไปยัง login.jsp} catch (userNameconflictexception e) {system.out.println (e.getMessage ()); map.put ("errorMessage", e.getMessage ()); ส่งคืน "ข้อผิดพลาด"; }} @RequestMapping (value = "login.do") สตริงสาธารณะ handlelogin () {return "เข้าสู่ระบบ"; -ตัวดักจับ
แนวคิดพื้นฐาน
ใช้ interceptor
คลาส Interceptor ที่กำหนดเอง
สร้างคลาส Intercept (Demointerceptor) เพื่อใช้อินเตอร์เฟส HandlerInterceptor
DemointerceptorImplements HandlerInterceptor { /*** เรียกว่าก่อนที่โปรเซสเซอร์จะดำเนินการ* @param Request HttpservletRequest Object ซึ่งสามารถรับพารามิเตอร์การร้องขอ ฯลฯ* @param Response HttpservletResponse* @param หากถูกส่งคืนจริงตัวดักจับและโปรเซสเซอร์ที่ตามมาจะถูกดำเนินการ */ บูลีน prehandle สาธารณะ (คำขอ httpservletrequest, การตอบสนอง httpservletResponse, ตัวจัดการวัตถุ) โยนข้อยกเว้น {system.out.println ("การดำเนินการ prehandler ของ demointerceptor"); กลับมาจริง; } / *** เรียกว่าหลังจากโปรเซสเซอร์ถูกเรียกใช้งานและโทรก่อนที่จะข้ามไปยังมุมมองที่ระบุ* @param Request HttpservletRequest Object* @param Response HttpservletResponse วัตถุ* @param Response HttpservletResponse วัตถุ* @param Postthandle (คำขอ httpservletrequest, การตอบสนอง httpservletResponse, ตัวจัดการวัตถุ, modelandview modelandview) โยนข้อยกเว้น { /*** 1. คุณสามารถออกแบบตรรกะของคุณเองได้เช่นในบางกรณี System.out.println ("Handler:"+Handler); System.out.println ("Posthandler Execution of Demointerceptor"); // ตั้งชื่อมุมมองจากนั้นหลังจากการดำเนินการเสร็จสมบูรณ์แล้วจะข้ามไปที่หน้า index.jsp // modelandview.setViewName ("ดัชนี"); } /** * การโทร * หลังจากการประมวลผลคำขอเสร็จสิ้นโมฆะสาธารณะหลังการใช้งาน (คำขอ httpservletrequest, การตอบสนอง httpservletResponse, ตัวจัดการวัตถุ, ข้อยกเว้น Ex) โยนข้อยกเว้น {system.out.println ( -กำหนดค่าในไฟล์กำหนดค่า SpringMvc
การกำหนดค่า
ต้องกำหนดค่าตามลำดับข้างต้นมิฉะนั้นจะมีการรายงานข้อผิดพลาด
<!-กำหนดค่า interceptor โดยที่ตัวดักจับหลายตัวสามารถกำหนดค่า-> <mvc: interceptors> <mvc: interceptor> <!-กำหนดค่าพา ธ interceptor และสกัดกั้นเมธอดวิธีโปรเซสเซอร์ทั้งหมดภายใต้/ผู้ใช้ตัวอย่าง: http: // localhost: 8080/springmvc/login <MVC: MappingPath = "/user/*"/> <!-กำหนดค่าวิธีการควบคุมที่ไม่ได้ถูกดักจับโดย interceptor นี่คือการกำหนดค่าเสริมเช่น http: // localhost: 8080/springmvc/user/index.do <MVC: exclude-mappingPath = "/user/login.do"/> <!-กำหนดค่าถั่วของ interceptor ระบุชื่อคลาสเต็ม-> <beanclass = "cn.tedu.spring.interceptor.demointerceptor"> </epean>
วิธีการดำเนินการ
Public Boolean Prehandle (คำขอ httpservletrequest, การตอบสนอง httpservletResponse, ตัวจัดการวัตถุ)
Public Void Postthandle (คำขอ httpservletrequest, การตอบสนอง httpservletResponse, ตัวจัดการวัตถุ, modelandview modelandview)
โมฆะสาธารณะ fterncompletion (คำขอ httpservletrequest, การตอบสนอง httpservletResponse, ตัวจัดการวัตถุ, Exception Ex)
การตรวจสอบการเข้าสู่ระบบสาธิต
Custom Interceptor (LoginInterceptor)
กระบวนการเฉพาะถูกเขียนอย่างชัดเจนในวิธี prehandler
คลาสสาธารณะ LoginInterceptOrimplements handlerInterceptor { / * * เรียกก่อนที่โปรเซสเซอร์จะถูกเรียกใช้งาน (ไม่ใช่ javadoc) * 1 รับเซสชัน * 2. อ่านค่า UID ในเซสชัน * ถ้าเป็นโมฆะหมายความว่าไม่มีการเข้าสู่ระบบ ไม่จำเป็นต้องดำเนินการตามกระบวนการที่ตามมา* หากไม่ใช่ NULL หมายความว่ามันได้รับการลงชื่อเข้าใช้แล้วกลับมาจริงโดยตรงและดำเนินการต่อเพื่อดำเนินการสกัดกั้นที่ตามมาหรือโปรเซสเซอร์*/ บูลีนสาธารณะ prehandle (httpservletrequest การร้องขอการตอบสนอง httpServleSponse // รับวัตถุเซสชัน uid = session.getAttribute ("uid"); // อ่านวัตถุในเซสชัน // ถ้า UID มีอยู่คุณสามารถเข้าสู่ระบบและกรอกข้อมูลได้หาก (uid! = null) {return true; // return true หากการเข้าสู่ระบบสำเร็จคุณจะต้องดำเนินการตามกระบวนการ} response.sendredirect (request.getContextPath ()+"/user/login.do"); // เปลี่ยนเส้นทางไปยังอินเตอร์เฟสเข้าสู่ระบบส่งคืนเท็จ; // return false กระบวนการที่ตามมาไม่จำเป็นต้องดำเนินการและมันถูกขัดจังหวะโดยตรง} โมฆะสาธารณะ postthandle (คำขอ httpservletrequest, httpservletresponse การตอบสนอง, handler object, modelandview request, handsvertion -กำหนดค่า interceptor ใน SpringMVC
ตั้งแต่ที่นี่มันแค่ข้ามไปยังศูนย์ผู้ใช้และจำเป็นต้องตรวจสอบการเข้าสู่ระบบมันจะตรงกับ user_center.do
<!-กำหนดค่า interceptors ที่สามารถกำหนดค่าตัวดักหลายตัว-> <mvc: interceptors> <mvc: interceptor> <mvc: mappingpath = "/user/user_center.do"/> <beanclass = "cn.tedu.spring.interceptor.logininterceptor"
ลำดับการดำเนินการของตัวดักหลายตัว
ดำเนินการตามคำสั่งที่กำหนดค่าในไฟล์การกำหนดค่า SpringMVC นั่นคือลำดับของ interceptors ที่กำหนดค่าภายใต้ <MVC: interceptors> หากการสกัดกั้นถูกดำเนินการบนเส้นทางเดียวกัน
ความแตกต่างระหว่าง interceptor และตัวกรอง (ความแตกต่างหลัก)
สรุป
ตัวดักสามารถใช้งานได้เมื่อมีการร้องขอหลายครั้งต้องใช้งานเดียวกันหรือคล้ายกันมาก
พัฒนา Interceptor ให้ดีจากนั้นคุณต้องกำหนดค่าไว้ในไฟล์กำหนดค่าของ SpringMVC
ใน <MVC: interceptors> หากมีการกำหนดค่า <MVC: interceptors> หลายตัวสกัดกั้นหลายตัวจะเป็นห่วงโซ่การดักจับ หากมีการกำหนดค่าตัวดักหลายตัวพวกเขาจะสกัดกั้นเส้นทางเดียวกันจากนั้นพวกเขาจะถูกดำเนินการตามลำดับของโหนดที่กำหนดค่า
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น