@requestparam คุณต้องเห็นมัน; @PathVariable คุณต้องรู้จักมัน @QueryParam ทำไมคุณไม่รู้ล่ะ? - และเขาคุ้นเคยกับคุณ (@cookievalue)! เธอ (@ModelandView)! มัน (@modelattribute)! ถูกต้องเพียงแค่ใส่คำอธิบายประกอบสิ่งนี้สปริง MVC เปิดโลกที่มีสีสันสำหรับคุณ มาเลยอย่าตื่นเต้น (mi) และ (หู) นั่งลงมาคุยกันดีเกี่ยวกับพี่น้องหมายเหตุเหล่านี้ ~~~ (เดี๋ยวก่อนคุณไม่เคยได้ยินเลยใช่มั้ยโอเคมาเลยคุณนั่งแถวหน้าคุณจะอยู่ที่นั่น!)
1. วิธีการจับคู่เส้นทางคำขอใน Spring MVC - "เส้นทางคำขอใดดีกว่าการร้องขอการทำแผนที่เป็นที่รู้จักกันดี"
@RequestMapping ใช้เพื่อทำแผนที่คำขอเช่น GET Requests, Post Requests หรือ Rest Styles และรูปแบบที่ไม่ใช่การพักอาศัย คำอธิบายประกอบนี้สามารถใช้ในชั้นเรียนหรือในวิธีการหากใช้ในชั้นเรียนแสดงเส้นทางพาเรนต์ของวิธีการทั้งหมดในชั้นเรียน
ตัวอย่างเช่น (คลาสทดสอบที่ใช้ที่นี่เช่น SpringMvctest และบางหน้าได้รับการแนะนำในบทความแรก "การเรียนรู้ SpringMVC - เริ่มต้นจาก HelloWorld"):
เพิ่มวิธีการทดสอบลงใน SpringMvctest.java:
@RequestMapping ("/testRequestMapping") สตริงสาธารณะ testrequestmapping () {system.out.println ("testrequestmapping"); กลับมาประสบความสำเร็จ}โปรดทราบว่าคำอธิบายประกอบ @requestmapping ("/testrequestmapping") จะถูกเพิ่มลงในระดับวิธีซึ่งหมายความว่าวิธีนี้สามารถอยู่ได้ผ่านเส้นทางสัมพัทธ์ของ "/testrequestmapping" ในเวลาเดียวกันเรายังใส่คำอธิบายประกอบการร้องขอระดับชั้นเรียนในคลาส SpringMvctest:
@requestmapping ("/springmvc")@controllerpublic คลาส SpringMvctest {โปรดทราบว่านอกจากนี้ยังมีคำอธิบายประกอบของ @Controller คำอธิบายประกอบนี้มีหน้าที่รับผิดชอบในการดำเนินการตามคำขอที่แจกจ่ายโดย DispatchERServlet ใน SpringMVC มันห่อหุ้มข้อมูลที่ผู้ใช้ร้องขอผ่านเลเยอร์การประมวลผลบริการจากนั้นส่งคืนโมเดลไปยังมุมมองที่สอดคล้องกันสำหรับการแสดงผล ณ จุดนี้เรามีเส้นทางเช่น "SpringMVC/TestRequestMapping" จากนั้นเราสามารถค้นหาวิธีการทดสอบ TESTRequestMapping จากนั้นดำเนินการกับวิธีการภายในวิธีการ
ในการเพิ่มอีกสิ่งหนึ่งการร้องขอสามารถใช้เส้นทางการจับคู่ฟัซซี่เช่น:
- : จับคู่ตัวละคร
*: จับคู่อักขระใด ๆ
**: จับคู่เส้นทางหลายชั้น
/springmvc/**/lasttest สามารถจับคู่เส้นทางเช่น/springmvc/firsttest/secondtest/lastest
2. วิธีการรับพารามิเตอร์ที่ร้องขอของ Spring MVC - "Eight Immortals ข้ามทะเลแต่ละอันแสดงพลังเวทย์มนตร์ของพวกเขา"
1. @PathVariable
คำอธิบายประกอบนี้ใช้เพื่อทำแผนที่ตัวยึดตำแหน่งใน URL คำขอ ผ่าน @PathVariable คุณสามารถผูกพารามิเตอร์ของตัวยึดตำแหน่งใน URL กับพารามิเตอร์ของวิธีการประมวลผลคอนโทรลเลอร์ คุณไม่เข้าใจ? ดูตัวอย่าง:
@RequestMapping ("/testPathVariable/{id}") สตริงสาธารณะ testPathVariable (@PathVariable (value = "id") ID จำนวนเต็ม) {system.out.println ("testpathVariable:" id); กลับมาประสบความสำเร็จ}ใน index.jsp เราเพิ่มการเชื่อมต่อเพื่อทริกเกอร์คำขอ:
<a href = "springmvc/testpathVariable/1"> testpathVariable </a> <br/> <br/>
เราจะเห็นว่ามีการเชื่อมโยงหลายมิติที่นี่ หลังจากคลิกเราจะป้อนวิธีการประมวลผลคอนโทรลเลอร์ที่สอดคล้องกับ SpringMVC/TestPathVariable/1 ตอนนี้เราต้องการได้รับ "1" ในพารามิเตอร์การร้องขอนี้ดังนั้นเพิ่ม "/testpathVariable/id" ไปยังวิธี testpathVariable เกี่ยวกับ id "และการติดต่อเฉพาะของ {id} ในพารามิเตอร์ของวิธีนี้ @PathVariable (value =" id ")
2. @requestparam
คำอธิบายประกอบนี้ยังใช้เพื่อรับพารามิเตอร์คำขอ ดังนั้นคำอธิบายประกอบนี้แตกต่างจาก @PathVariable อย่างไร? มาดูตัวอย่าง:
การเพิ่มวิธีการใน SpringMvctest
@RequestMapping (value = "/testRequestParam") สตริงสาธารณะ TestRequestParam (@RequestParam (value = "ชื่อผู้ใช้") ชื่อผู้ใช้สตริง, @RequestParam (value = "อายุ", จำเป็น = false, defaultValue = "0") อายุ int) กลับมาประสบความสำเร็จ}
เพิ่มแท็กไฮเปอร์ลิงก์ใน index.jsp
<a href = "springmvc/testrequestparam? ชื่อผู้ใช้ = Jackie & Age = 12"> TestrequestParam </a> <br/> <br/>
การคลิกที่การเชื่อมโยงหลายมิติบนหน้าจะตรงกับเส้นทางของการร้องขอการทำแผนที่บนเมธอด TestRequestParam ในคอนโทรลเลอร์ โปรดทราบว่าในวิธีนี้เราประกาศตัวแปรสองตัวผ่านคำอธิบายประกอบ @requestparam เพื่อรับค่าพารามิเตอร์ที่นำโดยการสืบค้นในคำขอหนึ่งคือค่าหลังจากชื่อผู้ใช้และอีกชื่อหนึ่งคือค่าหลังอายุ
หลังจากเห็นสิ่งนี้คุณอาจเข้าใจความแตกต่างระหว่าง @PathVariable และ @requestparam สำหรับคำขอเช่น "SpringMVC/TestPathVariable/1" เราใช้ @PathVariable เพื่อผูกพารามิเตอร์ที่ร้องขอ ในขณะที่พารามิเตอร์การร้องขอเช่น "SpringMvc/TestRequestParam? ชื่อผู้ใช้ = Jackie & Age = 12" ปรากฏเป็นคู่คีย์-ค่า เราใช้ @requestparam เพื่อรับค่าคำขอเฉพาะหลังจากชื่อผู้ใช้หรืออายุ
QueryParam ยังคล้ายกับ RequestParam เพราะมันไม่ใช่คำอธิบายประกอบภายในกรอบ MVC ฤดูใบไม้ผลิดังนั้นจึงไม่ได้อธิบายรายละเอียดที่นี่
สำหรับประเภทคำขอและวิธีการร้องขอที่แตกต่างกัน Spring MVC มีชุดของโซลูชันเป้าหมาย มาดูกันว่าคำขอสไตล์ REST ยอดนิยมเป็นอย่างไรในตอนนี้ - ใช้สไตล์ REST เพื่อให้ได้การเพิ่มการลบการปรับเปลี่ยนและการค้นหา
การใช้งานจากล่างขึ้นบนของอินเทอร์เฟซสำหรับการตรวจสอบ (รับ), การเพิ่ม (โพสต์), การลบ (ลบ) และการแก้ไข (ใส่) ถูกนำไปใช้ในคลาส SpringMvctest จากล่างขึ้นบน
@RequestMapping (value = "/testRest/{id}", method = requestMethod.put) สตริงสาธารณะ testRestput (@PathVariable (value = "id") ID จำนวนเต็ม) {System.out.println ("ทดสอบ:" + id); return success;} @RequestMapping (value = "/testRest/{id}", method = requestMethod.delete) สตริงสาธารณะ testRestDelete (@PathVariable (value = "id") จำนวนเต็ม) {system.out.println ( คืนความสำเร็จ;} @requestmapping (value = "/testRest", method = requestMethod.post) สตริงสาธารณะ testRest () {system.out.println ("โพสต์ทดสอบ"); return success;} @RequestMapping (value = "/testRest/{id}", method = requestMethod.get) สตริงสาธารณะ testRest (@PathVariable (value = "id") ID จำนวนเต็ม) {System.out.println ("ทดสอบ:" + id); กลับมาประสบความสำเร็จ}ดังนั้นจะใช้อินเทอร์เฟซแผนกต้อนรับได้อย่างไร? คำสั่งที่เกี่ยวข้องคือ
<form action = "springmvc/testrest/1" method = "post"> <อินพุต type = "hidden" name = "_ method" value = "ใส่"/> <อินพุต type = "ส่ง" value = "testRestput"/> </form> <br/> type = "subment" value = "testrest delete"/> </form> <br> <br> <form action = "SpringMvc/testRest" วิธี = "post"> <อินพุต type = "subment" value = "testRestPost"
นอกจากนี้เรายังต้องเพิ่มคำสั่งในไฟล์กำหนดค่า web.xml ที่รองรับการแปลงโพสต์เพื่อลบและวางคำขอ
<!-กำหนดค่า hiddenhttpmethodfilter: คุณสามารถแปลงคำขอโพสต์เพื่อลบหรือโพสต์คำขอ-> <filter> <filter-name> hiddenhttpmethodfilter </filter-name> <Tilter-Name> HIDVERHTTPMETHODFILTER </filter-Name> <URL-PATTERN>/*</url-pattern> </filter-mapping>
อย่างที่คุณเห็นการดัดแปลงและการลบที่นี่จะถูกส่งผ่านโพสต์เนื่องจากไม่ได้รับการสนับสนุนและลบที่นี่เพื่อใช้การลบและการแก้ไขโดยตรง แต่โดยใช้วิธีการโพสต์และนำแท็กอินพุตประเภทที่ซ่อนไว้อย่างเงียบ ๆ เพื่อบอกพื้นหลังว่าสิ่งที่ฉันส่งในแผนกต้อนรับเป็นคำขอการลบและการดัดแปลง
ดังนั้นกระบวนการนี้จะดำเนินการอย่างไรทำไมต้องเพิ่ม
<อินพุต type = "hidden" name = "_ method" value = "DELETE"/>>
โทเค็นนี้จะถูกซื้อโดยผู้อื่นในพื้นหลัง จากนั้นมาดูกันว่าเราซื้อมันในภายหลัง
ในการวิเคราะห์ขั้นสุดท้ายมันเกิดจากการเพิ่มคลาส Hiddenhttpmethodfilter ใน web.xml มีวิธีการ dofilterinternal ในชั้นเรียนนี้ ผ่านการดีบักเราสามารถค้นหาเบาะแสเริ่ม Tomcat (ไม่ใช่ Tomcat8) คลิกแท็กอินพุตที่สอดคล้องกันของการดำเนินการลบและป้อนอินเทอร์เฟซดีบัก เราสามารถเห็น:
หลุมขนาดเล็ก: ที่นี่โปรดทราบว่าการเริ่มต้นไม่สามารถเป็น Tomcat8 ได้ แต่สามารถเป็นรุ่นเล็กกว่า 8 เช่น 7 หรือ 6 ฯลฯ รูปต่อไปนี้แสดงข้อความแสดงข้อผิดพลาดโดยใช้ Tomcat และการตอบกลับที่ประสบความสำเร็จโดยใช้ 7:
เพื่อสรุปวิธีส่งคำขอใส่และลบ:
1. กำหนดค่า hiddenhttpmethodfilter ใน web.xml
2. ส่งคำขอโพสต์
3. มีโดเมนที่ซ่อนอยู่ในคำขอชื่อคือ "_mothod" ค่าจะถูกวางหรือลบ
สุดท้ายเรามาพูดถึงคำอธิบายประกอบ @Cookievalue
3. @cookievalue
คำอธิบายประกอบนี้เป็นกิจวัตรที่คล้ายกันและยังเป็นการทำแผนที่ซึ่งแมปค่าคุกกี้
เมื่อเราส่งคำขอเราจะเห็นว่าคำขอนั้นมีค่าคุกกี้อยู่บ้าง
ตัวอย่างเช่น JSessionId หรือเส้นทางที่นี่ ตอนนี้เราจะเขียนวิธีการรับค่าคุกกี้
เพิ่มใน SpringMvctest
@RequestMapping (value = "/testCookieVive") สตริงสาธารณะ testCookieVieVEALUE (@CookieVEALUE ("JSESSIONID") String CookieVEALUE) {System.out.println ("testcookievivea:" + cookievealue); กลับมาประสบความสำเร็จ}เพิ่มลิงก์ไปยังอินเตอร์เฟส index.jsp
<a href = "springmvc/testcookieviveue"> testcookieviveue </a> <br/> <br/>
ด้วยวิธีนี้เราจะได้ผลลัพธ์เช่น "TestCookieViAdue: 1410F05C9ADD84E8659C2AC79E8CC666"
จนถึงตอนนี้เราได้แนะนำ
1. การใช้ @requestmapping
2. รับการใช้งาน @PathVariable และ @requestParam ของพารามิเตอร์คำขอ
3. แนะนำวิธีการใช้คำขอสไตล์ REST และวิเคราะห์วิธีการแปลงโพสต์เป็นลบและวางคำขอ
4. บทนำสู่การใช้ @cookievalue
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น