ในส่วนก่อนหน้าเราเสร็จสิ้นการดำเนินการพื้นฐานของตะกร้าสินค้า แต่มีปัญหา: เมื่อผู้ใช้คลิกเพื่อชำระเราควรทำการตัดสินลงชื่อเข้าใช้เพื่อพิจารณาว่าผู้ใช้เข้าสู่ระบบหรือไม่หากเขาไม่ได้ลงชื่อเข้าใช้เขาต้องปล่อยให้ผู้ใช้เข้าสู่ระบบก่อนสิ่งนี้จะใช้เทคโนโลยีของตัวกรอง ตัวกรองสกัดกั้นการร้องขอหน้าโดยเฉพาะ มันคล้ายกับหลักการของการสกัดกั้น ตัวดักจับการร้องขอการกระทำโดยเฉพาะดังนั้นแต่ละคนจึงมีการใช้งานของตัวเอง หากเป็นหน้ากระโดดโดยตรงโดยไม่ต้องผ่านการกระทำเราเพียงแค่ต้องเขียน interceptor หากเราจำเป็นต้องข้ามไปยังการดำเนินการสำหรับการประมวลผลเราต้องเขียน interceptor
1. หลักการของการเข้าสู่ระบบกระโดด <br /> ให้ฉันพูดคุยเกี่ยวกับหลักการการใช้งานก่อน: เขียนตัวกรองและกำหนดค่า URL ที่ต้องสกัดกั้นใน web.xml ด้วยวิธีนี้เมื่อ URL คำขอของผู้ใช้ตรงกับการกำหนดค่าตัวกรองที่เราเขียนจะถูกดำเนินการ ในตัวกรองก่อนอื่นเราตรวจสอบว่ามีผู้ใช้เข้าสู่ระบบในเซสชันหรือไม่ หากไม่มีข้อบ่งชี้ว่าไม่มีการเข้าสู่ระบบให้รับ URL หน้าและพารามิเตอร์ที่ผู้ใช้ต้องการเข้าถึงให้ติดตั้งใหม่ลงใน URL และใส่ไว้ในเซสชันแล้วเปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบล็อกอินและข้ามไปยังการประมวลผลแอ็คชั่นและหลังจากการประมวลผล สิ่งนี้จะเสร็จสิ้นการเข้าสู่ระบบกระโดด
2. การใช้งานการกระโดดเข้าสู่ระบบ
เมื่อใช้หน้าตะกร้าสินค้าจริงเราคลิกที่เช็คเอาต์และจะข้ามไปยังหน้าการยืนยันคำสั่งซื้อโดยอัตโนมัติดังนี้:
อย่างไรก็ตามหากผู้ใช้ไม่ได้ลงชื่อเข้าใช้ในเวลานี้เราจะไม่ข้ามไปยังหน้าการยืนยันคำสั่งซื้อโดยตรงดังนั้นเราต้องใช้ตัวกรองเพื่อบล็อกและตัดสิน มาเขียนตัวกรองด้านล่าง:
2.1 การใช้งานตัวกรอง
การใช้งานตัวกรองจำเป็นต้องใช้อินเทอร์เฟซตัวกรองและเขียนทับสามวิธี ในความเป็นจริงเราจำเป็นต้องเขียนทับหนึ่งในนั้น ดังนี้:
Public Class UserFilter ใช้ตัวกรอง {@Override โมฆะสาธารณะทำลาย () {// วิธีการที่สร้างขึ้นอัตโนมัติ toDo} @Override โมฆะสาธารณะ dofilter (คำขอ ServletRequest, การตอบสนอง servletResponse, req-req = HTTPSEVESTID httpservletResponse res = (httpservletResponse) การตอบสนอง; // ตรวจสอบว่าเซสชันปัจจุบันมีข้อมูลผู้ใช้หรือไม่ (req.getSession (). getAttribute ("ผู้ใช้") == null) {// บันทึกที่อยู่ URL ที่ลูกค้าปัจจุบันต้องการไปที่สตริง gourl = req.getServletPath (); // รับที่อยู่ที่ผู้ใช้ต้องการ // รับพารามิเตอร์ที่ดำเนินการในที่อยู่ถ้า (param! = null) {gourl = gourl + "?" + param; // re-sstitch ที่อยู่คำขอ + พารามิเตอร์} // บันทึกที่อยู่ที่ลูกค้าปัจจุบันต้องการเข้าถึงในเซสชัน req.getSession () SetAttribute ("Gourl", Gourl); // คำขอที่ผิดกฎหมายข้ามไปที่หน้าเข้าสู่ระบบ req.getSession (). setAttribute ("ข้อผิดพลาด", "คำขอที่ผิดกฎหมายโปรดเข้าสู่ระบบ!"); Res.sendredirect (req.getContextPath () + "/ulogin.jsp"); } else {// หากมีตัวกรองถัดไปกระโดดมิฉะนั้นไปที่ห่วงโซ่หน้าเป้าหมายโดยตรง dofilter (คำขอการตอบกลับ); }} @Override โมฆะสาธารณะ init (filterConfig config) พ่น servletexception {// วิธีการที่สร้างอัตโนมัติแบบอัตโนมัติ stub}}} การตัดสินจากรหัสการใช้งานวิธี Dofilter ส่วนใหญ่เป็นโรคท้องร่วง ในวิธีการก่อนกำหนดว่ามีข้อมูลผู้ใช้ในเซสชันปัจจุบันหรือไม่ ถ้าไม่หมายความว่าไม่มีการเข้าสู่ระบบ จากนั้นคุณต้องบันทึกที่อยู่ URL และพารามิเตอร์ในที่อยู่ที่ผู้ใช้ต้องการไปสะกดมันลงใน URL ใหม่และบันทึกไว้ในเซสชันจากนั้นเปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบเพื่อให้ผู้ใช้เข้าสู่ระบบหากมีข้อมูลผู้ใช้ในเซสชัน
หลังจากเขียนตัวกรองอย่าลืมกำหนดค่า URL เพื่อกรองใน web.xml ดังนี้:
ดังนั้น $ {shop} /user/confirm.jsp ข้างต้นจะถูกกรอง ถัดไปลองดูที่หน้าเข้าสู่ระบบ จริงๆแล้วมันมีสองกล่องชื่อผู้ใช้และรหัสผ่านซึ่งส่วนใหญ่ขึ้นอยู่กับการกระทำที่มันข้ามไป:
เราเห็นว่ามันข้ามไปยังวิธีการเข้าสู่ระบบในการทำปฏิกิริยาเพื่อดำเนินการลอจิก ที่นี่เราใช้ useraction:
2.2 การดำเนินการดำเนินการ
ใน userAction เราทำการตัดสินลงชื่อเข้าสู่ระบบก่อนนั่นคือมองหาผู้ใช้ที่มีชื่อผู้ใช้และรหัสผ่านในฐานข้อมูล หากประสบความสำเร็จให้บันทึกผู้ใช้ในเซสชันแล้วส่งคืนผลลัพธ์และส่งมอบให้กับ Struts2 สำหรับการประมวลผล รหัสมีดังนี้:
@Controller ("useraction") @Scope ("Prototype") ระดับสาธารณะการเรียนรู้การขยาย Baseaction <ผู้ใช้> {Public String Login () {// การตัดสินของ Login Model = UserserVice.login (รุ่น); if (model == null) {session.put ("ข้อผิดพลาด", "เข้าสู่ระบบล้มเหลว"); กลับ "เข้าสู่ระบบ"; } else {// เข้าสู่ระบบสำเร็จอันดับแรกจัดเก็บผู้ใช้ในเซสชันเซสชัน ("ผู้ใช้" รุ่น); // ปกป้องการกระโดดของหน้าโดยขึ้นอยู่กับว่า gourl ในเซสชันมีค่าถ้า (session.get ("gourl") == null) {return "index"; // ข้ามไปยังหน้าแรก} else {return "gourl"; -มาดูการกำหนดค่าใน struts.xml:
เนื่องจากเรามี gourl ในเซสชัน แต่ใน struts.xml เราไม่สามารถรับเซสชันและจากนั้นพารามิเตอร์ในรหัส Java แต่เราสามารถนำมันมาจากสแต็กค่า ข้างต้นเป็นวิธีการรับข้อมูลจากสแต็กค่า
2.3 คำพิพากษาเข้าสู่ระบบของเลเยอร์บริการ
ชั้นบริการส่วนใหญ่เป็นวิธีการเข้าสู่ระบบที่ใช้ในการดำเนินการข้างต้นและการใช้งานค่อนข้างง่ายดังนี้:
// Userservice อินเตอร์เฟสสาธารณะส่วนต่อประสานผู้ใช้งานขยาย Baseservice <user> {// ผู้ใช้เข้าสู่ระบบและส่งคืนการเข้าสู่ระบบผู้ใช้สาธารณะผู้ใช้ (ผู้ใช้ผู้ใช้); } // userserviceimpl emplementations @Service ("userservice") คลาสสาธารณะ UserserViceImpl ขยาย BaseserViceImpl <ผู้ใช้> ใช้ UserserVice {@Override ผู้ใช้สาธารณะเข้าสู่ระบบ (ผู้ใช้ผู้ใช้) {String HQL = "จากผู้ใช้ U return (user) getSession (). createquery (hql) // .setstring ("เข้าสู่ระบบ", user.getlogin ()) // .setstring ("pass", user.getPass ()) // .uniqueresult (); -ตกลงดังนั้นเราจึงใช้ตัวกรองเพื่อตระหนักถึงการตัดสินและกระโดดเข้าสู่ระบบผู้ใช้ หลังจากเข้าสู่ระบบเราสามารถข้ามไปยังหน้าการยืนยันคำสั่งซื้อ เอฟเฟกต์มีดังนี้:
การทดสอบกระบวนการทั้งหมดเสร็จสมบูรณ์และฟังก์ชั่นเป็นเรื่องปกติ ในความเป็นจริงเราสามารถปรับปรุงได้อีกเล็กน้อย เราควรตัดสินเข้าสู่ระบบก่อนที่จะเพิ่มลงในตะกร้าสินค้า กล่าวคือหน้าตะกร้าช้อปปิ้งอยู่ในสถานะเข้าสู่ระบบแล้วและนี่คือหน้าการยืนยันคำสั่งซื้อเพื่อพิจารณาการเข้าสู่ระบบ อย่างไรก็ตามหากเราตัดสินก่อนหน้ารถเข็นช็อปปิ้งมันจะเป็นเรื่องยากสำหรับเราที่จะใช้ตัวกรอง เราต้องใช้ interceptor เนื่องจากการร้องขอการดำเนินการไม่ใช่หน้าธรรมดาเมื่อกระโดดไปที่หน้าตะกร้าสินค้า เมื่อร้องขอการดำเนินการเราต้องใช้ตัวดักจับเพื่อสกัดกั้น มาปรับปรุงสิ่งนี้ในภายหลัง ตอนนี้เราจะใช้ฟังก์ชั่นที่นี่โดยทั่วไป โอเคการตัดสินลงชื่อเข้าใช้และการกระโดดเสร็จสิ้น
ที่อยู่ดั้งเดิม: http://blog.csdn.net/eson_15/article/details/51425010
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น