นอกจาก struts แล้วกำลังหลักของเฟรมเวิร์ก MVC หลักของ Web MVC เป็นอันดับสองถึง Spring MVC ดังนั้นนี่จึงเป็นกรอบหลักที่โปรแกรมเมอร์ต้องการที่จะเชี่ยวชาญ ด้วยเฟรมเวิร์กมากขึ้นจึงมีวิธีแก้ปัญหาที่จะนำไปใช้กับการเปลี่ยนแปลงความต้องการและธุรกิจที่เปลี่ยนแปลงไปตามธรรมชาติ อย่างไรก็ตามหากคุณต้องการใช้ Spring MVC อย่างยืดหยุ่นเพื่อจัดการกับการพัฒนาเว็บส่วนใหญ่คุณต้องเชี่ยวชาญการกำหนดค่าและหลักการ
1. สปริง MVC สิ่งแวดล้อมการก่อสร้าง: (ฤดูใบไม้ผลิ 2.5.6 + ไฮเบอร์เนต 3.2.0)
1. การแนะนำแพ็คเกจ JAR
ฤดูใบไม้ผลิ 2.5.6: Spring.jar, Spring-Webmvc.jar, Commons-logging.jar, cglib-nodep-2.1_3.jar
Hibernate 3.6.8: Hibernate3.Jar, Hibernate-JPA-2.0-API-1.0.1.FINCAL.JAR, Antlr-2.7.6.JAR, Commons-Collections-3.1 SLF4J-NOP-1.6.4.JAR แพ็คเกจขวดไดรเวอร์สำหรับฐานข้อมูลที่สอดคล้องกัน
SpringMVC เป็นเฟรมเวิร์ก MVC ตาม Dispatcherservlet สิ่งแรกที่แต่ละคำขอเข้าถึงคือ dispatcherservlet Dispatcherservlet รับผิดชอบในการส่งคำขอแต่ละคำขอไปยังตัวจัดการที่เกี่ยวข้อง หลังจากตัวจัดการประมวลผลมันจะส่งคืนมุมมองที่สอดคล้องกัน (มุมมอง) และรุ่น (รุ่น) ไม่สามารถระบุมุมมองและโมเดลที่ส่งคืนได้นั่นคือคุณสามารถส่งคืนโมเดลหรือส่งคืนมุมมองเท่านั้นหรือไม่
Dispatcherservlet สืบทอดมาจาก httpservlet เนื่องจาก SpringMVC ขึ้นอยู่กับ DispatchERServlet ก่อนอื่นมากำหนดค่า DispatchERServlet เพื่อให้สามารถจัดการเนื้อหาที่เราต้องการให้จัดการได้ httpservlet ถูกประกาศในไฟล์ web.xml
<!-การกำหนดค่า MVC ฤดูใบไม้ผลิ-> <!-==================================================-> <servlet> <servlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <!-คุณสามารถปรับแต่งตำแหน่งและชื่อของไฟล์การกำหนดค่า servlet.xml ค่าเริ่มต้นอยู่ในไดเรกทอรี web-inf และชื่อคือ [<servlet-name>]-servlet.xml เช่น spring-servlet.xml <init-param> <param-name> contextconfiglocation </param-name> <param-value> <load-on-startup> 1 </load-on-startup> </servlet> <servlet-mapping> <servlet-name> ฤดูใบไม้ผลิ </servlet-name> <url-pattern>*. ทำ </url-pattern> </servlet-mapping> <! -> <Listener> <SarenterClass> org.springFramework.web.context.contextloaderListener </listener-class> </listener> <!-ระบุไดเรกทอรีที่ไฟล์การกำหนดค่าของ Spring Bean ตั้งอยู่ การกำหนดค่าเริ่มต้นอยู่ในไดเรกทอรี web-inf-> <context-param> <param-name> contextConfigLocation </param-name> <param-value> classpath: confic/applicationcontext.xml </param-value> </context-param>
การกำหนดค่า spring-servlet.xml
ชื่อ Spring-Servlet เป็นเพราะค่าที่ตรงกับแท็ก <servlet-name> ใน web.xml ด้านบนคือสปริง (<servlet-name> สปริง </servlet-name>) และชื่อไฟล์ของ Spring-Servlet หากมีการเปลี่ยนเป็น SpringMVC ชื่อไฟล์ที่สอดคล้องกันคือ SpringMvc-Servlet.xml
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org/2001/xml xmlns: p = "http://www.springframework.org/schema/p" xmlns: บริบท = "http://www.springframework.org/schema/contex http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://ww.springframework http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://ww.springframework.org/schema/schema/tx http://www.springframework.org/schema/context <a href = "http://www.springframework.org/schema/context/spring-context-3.0.xsd"> http://www.springframework.org/schema/context/spring-context-3 <บริบท: Annotation-config /> <!-ตั้งค่าแพ็คเกจ JAR ที่คลาสที่ใช้คำอธิบายประกอบอยู่-> <บริบท: Component-Scan base-package = "Controller"> < /บริบท: Component-Scan> <! คำนำหน้า: คำนำหน้า, คำต่อท้าย: คำต่อท้าย -> <bean p: prefix = "/jsp/" p: คำต่อท้าย = ". jsp"/> </epe
Dispatcherservlet จะใช้ถั่วพิเศษบางตัวเพื่อจัดการคำขอคำขอและสร้างการส่งคืนมุมมองที่สอดคล้องกัน
เกี่ยวกับการกลับมาของมุมมองคอนโทรลเลอร์มีหน้าที่รับผิดชอบในการส่งกลับค่าเท่านั้นและจากนั้นมุมมองที่ถูกส่งคืน มันถูกควบคุมโดยตัวแยกวิเคราะห์มุมมอง ตัวแยกวิเคราะห์มุมมองที่ใช้กันทั่วไปใน JSP คือ InternalResourceViewResovler ซึ่งจะต้องใช้คำนำหน้าและคำต่อท้าย
ในตัวแยกวิเคราะห์มุมมองด้านบนหากคอนโทรลเลอร์ส่งคืนบล็อก/ดัชนีจากนั้นมุมมองจะแยกวิเคราะห์ผ่านตัวแยกวิเคราะห์มุมมองคือ /jsp/blog/index.jsp
ส่วนใหญ่พูดถึงคอนโทรลเลอร์
คลาสที่ใช้ @Controller สำหรับการทำเครื่องหมายคือคอนโทรลเลอร์
Package Controller; Import Javax.servlet.http.httpservletrequest นำเข้า org.springframework.stereotype.controller; นำเข้า org.springframework.web.bind.annotation.Requestmapping; entity.user; @controller // actionpublic คลาส testController คล้ายกับการทำแผนที่แอ็คชั่นของ struts {@requestmapping ("test/login.do") // การทำแผนที่ที่อยู่ URL ที่อยู่คล้ายกับ struts struts struts การทดสอบสตริง public @RequestParam หมายถึงพารามิเตอร์ที่ต้องมีอยู่ในแผนที่ที่อยู่ URL คำขอ (เว้นแต่คุณลักษณะที่จำเป็น = false) // @requestparam สามารถย่อได้เป็น: @requestparam ("ชื่อผู้ใช้") ถ้า (! "ผู้ดูแลระบบ" .equals (ชื่อผู้ใช้) ||! // ข้ามพา ธ หน้า (การส่งต่อค่าเริ่มต้น) ซึ่งไม่จำเป็นต้องมีคำนำหน้าและคำต่อท้ายที่กำหนดค่าในไฟล์การกำหนดค่า Spring-Servlet} return "LoginSuccess"; } @RequestMapping ("/test/login2.do") public modelandView testlogin2 (ชื่อผู้ใช้สตริง, รหัสผ่านสตริง, อายุ int) {// คำขอและการตอบสนองไม่จำเป็นต้องปรากฏในวิธีการ หากคุณไม่สามารถใช้งานได้คุณสามารถลบ // ชื่อของพารามิเตอร์ตรงกับชื่อของการควบคุมหน้าและประเภทพารามิเตอร์จะถูกแปลงโดยอัตโนมัติถ้า (! "ผู้ดูแลระบบ" .Equals (ชื่อผู้ใช้) ||! // อินสแตนซ์แบบจำลองด้วยตนเองและวิวทิวทัศน์เพื่อให้เสร็จสมบูรณ์ (ไปข้างหน้า) เอฟเฟกต์จะเทียบเท่ากับวิธีการข้างต้นเพื่อส่งคืนสตริง} ส่งคืนโมเดลใหม่และวิวทิวทัศน์ใหม่ (ใหม่ RedirectView ("../ index.jsp")); // หน้าเปลี่ยนเส้นทางโดยการเปลี่ยนเส้นทาง // นอกจากนี้ยังมีวิธีง่ายๆในการเขียนการเปลี่ยนเส้นทาง // ส่งคืน ModelandView ใหม่ ("เปลี่ยนเส้นทาง: ../ index.jsp"); } @RequestMapping ("/test/login3.do") public modelandView testlogin3 (ผู้ใช้ผู้ใช้) {// พารามิเตอร์ได้รับการสนับสนุนเป็นวัตถุแบบฟอร์มคล้ายกับ actionform ของ struts ผู้ใช้ไม่ต้องการการกำหนดค่าใด ๆ เพียงแค่เขียนชื่อผู้ใช้สตริง = user.getUserName (); สตริงรหัสผ่าน = user.getPassword (); อายุ int = user.getage (); if (! "admin" .Equals (ชื่อผู้ใช้) ||! } ส่งคืน ModelandView ใหม่ ("LoginSuccess"); } @Resource (name = "loginService") // รับ ID ของถั่วใน ApplicationContext.xml ที่เป็น LoginService และฉีดเข้าสู่ระบบส่วนตัวเข้าสู่ระบบ // เทียบเท่ากับวิธีการฉีดสปริงแบบดั้งเดิมเพื่อเขียนและตั้งค่าวิธีการ ผลประโยชน์นี้มีความกระชับและเรียบร้อยกำจัดรหัสที่ไม่จำเป็น @requestmapping ("/ทดสอบ/login4.do") สตริงสาธารณะ testlogin4 (ผู้ใช้ผู้ใช้) {ถ้า (loginService.login (ผู้ใช้) == เท็จ) {return "loginerror"; } return "loginsuccess"; -ตัวอย่างสี่วิธีข้างต้นคือคอนโทรลเลอร์ที่มี URL คำขอที่แตกต่างกัน คุณยังสามารถใช้การเข้าถึง URL เพื่อแยกความแตกต่างของวิธีการเข้าถึงที่แตกต่างกันผ่านพารามิเตอร์ URL รหัสมีดังนี้:
Package Controller; นำเข้า org.springframework.stereotype.controller; นำเข้า org.springframework.web.bind.annotation.requestmapping; นำเข้า org.springframework.web.bind.annotation.requestmethod; controllerpublic คลาส testController2 {@requestmapping สตริงสาธารณะ testlogin (สตริงชื่อผู้ใช้รหัสผ่านสตริงอายุ int) {// ถ้าไม่มีการเพิ่มพารามิเตอร์วิธีการจะถูกดำเนินการโดยค่าเริ่มต้นเมื่อขอ /test2/login.do ถ้า (! } return "loginsuccess"; } @RequestMapping (params = "method = 1", method = requestMethod.post) สตริงสาธารณะ testlogin2 (ชื่อผู้ใช้สตริง, รหัสผ่านสตริง) {// วิธีการโทรที่แตกต่างกันนั้นแตกต่างจากค่าพารามิเตอร์พารามิเตอร์) "LoginError"; } return "loginsuccess"; } @RequestMapping (params = "method = 2") สตริงสาธารณะ testlogin3 (ชื่อผู้ใช้สตริง, รหัสผ่านสตริง, อายุ int) {ถ้า (! "admin" .Equals (ชื่อผู้ใช้) ||! } return "loginsuccess"; -ในความเป็นจริงการร้องขอการทำแผนที่ถือได้ว่าเป็น URL คำขอของผู้ปกครองในชั้นเรียนในขณะที่การร้องขอการทำแผนที่สามารถถือได้ว่าเป็น URL คำขอของเด็กในวิธีการ URL คำขอของผู้ปกครองและเด็กในที่สุดจะถูกเชื่อมต่อเข้าด้วยกันเพื่อให้ตรงกับ URL ขอหน้า ดังนั้นการร้องขอสามารถเขียนได้เช่นนี้:
Package Controller; นำเข้า org.springframework.stereotype.controller; นำเข้า org.springframework.web.bind.annotation.Requestmapping;@controller@requestmapping ("/test3/*") // คำขอ /test3/login.do String Public String testlogin (ชื่อผู้ใช้สตริง, รหัสผ่านสตริง, อายุ int) {ถ้า (! "admin" .Equals (ชื่อผู้ใช้) ||! } return "loginsuccess"; -คำอธิบายประกอบทั่วไปใน SpringMVC รวมถึง @PathVariable, @RequestParam, @PathVariable Tagged บนพารามิเตอร์ของวิธีการ พารามิเตอร์ที่ทำเครื่องหมายโดยใช้มันสามารถส่งผ่านได้โดยใช้เส้นทางคำขอ ดูตัวอย่างต่อไปนี้
@RequestMapping (value = "/comment/{blogid}", method = requestMethod.post) ความคิดเห็นสาธารณะ (ความคิดเห็นแสดงความคิดเห็น,@pathVariable int blogid, เซสชัน httpsession, httpservletResponse) โยน ioexception {}}ในตัวอย่างนี้ Blogid ถูกทำเครื่องหมายเป็นตัวแปรเส้นทางคำขอโดย @PathVariable หากคำขอคือ/blog/comment/1.do หมายความว่าค่าของ blogid คือ 1 ในทำนองเดียวกัน @requestparam ยังใช้เพื่อส่งผ่านค่าไปยังพารามิเตอร์ แต่ต้องใช้ค่าจากพารามิเตอร์ของคำขอตั้งแต่ต้น
ในเมธอดคอนโทรลเลอร์หากองค์ประกอบของเว็บ httpservletRequest, httpservletResponse และ httpsession เป็นสิ่งจำเป็นคุณจะต้องให้วิธีการพารามิเตอร์ที่สอดคล้องกันแล้ว SpringMVC จะส่งผ่านค่าโดยอัตโนมัติในระหว่างการเข้าถึง อย่างไรก็ตามควรสังเกตว่าหากเซสชันถูกเรียกเมื่อครั้งแรกที่คุณเข้าถึงระบบจะมีการรายงานข้อผิดพลาดเนื่องจากเซสชันไม่ได้ถูกสร้างขึ้นในเวลานี้
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น