1 บทนำ
MVC Framework คืออะไร
ชื่อเต็มของ MVC คือ Model View Controller ซึ่งเป็นตัวย่อของตัวควบคุมแบบจำลองมุมมอง มันเป็นรูปแบบการออกแบบซอฟต์แวร์ มันจัดระเบียบรหัสโดยใช้วิธีการแยกของตรรกะทางธุรกิจข้อมูลและการแสดงผลอินเตอร์เฟสและรวบรวมตรรกะทางธุรกิจเป็นส่วนประกอบ ในขณะที่การปรับปรุงและปรับแต่งอินเทอร์เฟซและการโต้ตอบของผู้ใช้ไม่จำเป็นต้องเขียนตรรกะทางธุรกิจใหม่ MVC ได้รับการพัฒนาโดยเฉพาะเพื่อแมปฟังก์ชั่นการประมวลผลและเอาต์พุตแบบดั้งเดิมในโครงสร้างส่วนต่อประสานผู้ใช้กราฟิกแบบลอจิคัล
Model-View-Controller (MVC) เป็นรูปแบบการออกแบบที่รู้จักกันดีตามแอพพลิเคชั่นการออกแบบส่วนต่อประสาน ส่วนใหญ่จะแยกตรรกะทางธุรกิจออกจากอินเทอร์เฟซโดยแยกบทบาทของโมเดลมุมมองและตัวควบคุมในแอปพลิเคชัน โดยทั่วไปแล้วโมเดลจะรับผิดชอบในการห่อหุ้มข้อมูลแอปพลิเคชันในเลเยอร์มุมมอง มุมมองจะแสดงข้อมูลนี้เท่านั้นและไม่มีตรรกะทางธุรกิจใด ๆ คอนโทรลเลอร์มีหน้าที่รับผิดชอบในการรับคำขอจากผู้ใช้และบริการพื้นหลังการโทร (ผู้จัดการหรือ DAO) เพื่อจัดการตรรกะทางธุรกิจ หลังจากการประมวลผลเลเยอร์ธุรกิจพื้นหลังอาจส่งคืนข้อมูลบางอย่างเพื่อแสดงในเลเยอร์มุมมอง คอนโทรลเลอร์รวบรวมข้อมูลนี้และเตรียมโมเดลที่จะแสดงในเลเยอร์มุมมอง แนวคิดหลักของโมเดล MVC คือการแยกตรรกะทางธุรกิจออกจากอินเทอร์เฟซทำให้สามารถเปลี่ยนแปลงได้เป็นรายบุคคลโดยไม่ส่งผลกระทบต่อกันและกัน
ในแอพพลิเคชั่น SpringMVC โมเดลมักจะประกอบด้วยวัตถุ POJO ซึ่งถูกประมวลผลในชั้นธุรกิจและยังคงอยู่ในเลเยอร์การคงอยู่ มุมมองมักจะเป็นเทมเพลต JSP ที่เขียนใน JSP Standard Tag Library (JSTL) ส่วนคอนโทรลเลอร์ได้รับการจัดการโดย Dispatcherservlet และเราจะได้เรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้ในบทช่วยสอนนี้
นักพัฒนาบางคนเชื่อว่าชั้นธุรกิจชั้นธุรกิจและชั้น DAO เป็นส่วนหนึ่งของส่วนประกอบ MVC โมเดล ฉันมีความคิดเห็นที่แตกต่างกันเกี่ยวกับเรื่องนี้ ฉันไม่คิดว่าชั้นธุรกิจและชั้นเรียน DAO Layer เป็นส่วนหนึ่งของกรอบ MVC โดยปกติแล้วเว็บแอปพลิเคชันจะเป็นสถาปัตยกรรมสามชั้นคือการเป็นตัวแทนของบริการข้อมูล MVC เป็นส่วนหนึ่งของเลเยอร์การนำเสนอ
dispatcher servlet (คอนโทรลเลอร์สปริง)
ในแอปพลิเคชัน Spring MVC ที่ง่ายที่สุดคอนโทรลเลอร์เป็นเซิร์ฟเล็ตเดียวที่คุณต้องกำหนดค่าในไฟล์คำอธิบายการปรับใช้ Java Web (เช่นไฟล์ web.xml) Spring MVC Controller - ที่รู้จักกันทั่วไปว่าเป็น servlet dispatcher, ใช้รูปแบบการออกแบบคอนโทรลเลอร์ front -end และคำขอเว็บแต่ละครั้งจะต้องผ่านไปเพื่อให้สามารถจัดการวงจรการร้องขอทั้งหมดได้
เมื่อคำขอเว็บถูกส่งไปยังแอปพลิเคชันสปริง MVC Servlet Dispatcher จะได้รับคำขอก่อน จากนั้นจะจัดระเบียบส่วนประกอบที่กำหนดค่าไว้ในบริบทของแอปพลิเคชันเว็บฤดูใบไม้ผลิ (เช่นตัวควบคุมการประมวลผลคำขอจริงและการแก้ไขมุมมอง) หรือใช้การกำหนดค่าคำอธิบายประกอบซึ่งทั้งหมดนี้จำเป็นต้องดำเนินการตามคำขอ
กำหนดคลาสคอนโทรลเลอร์ใน Spring 3.0 ซึ่งจะต้องทำเครื่องหมายด้วยคำอธิบายประกอบ @Controller เมื่อคอนโทรลเลอร์ที่มีคำอธิบายประกอบ @Controller ได้รับการร้องขอมันจะมองหาวิธีการจัดการที่เหมาะสมในการจัดการคำขอ สิ่งนี้ต้องการให้คอนโทรลเลอร์ทำแผนที่แต่ละคำขอไปยังวิธีการจัดการผ่านการแมปตัวจัดการอย่างน้อยหนึ่งรายการ ในการทำเช่นนี้วิธีการของคลาสคอนโทรลเลอร์จะต้องได้รับการตกแต่งด้วยคำอธิบายประกอบ @requestmapping เพื่อให้วิธีการจัดการ
หลังจากวิธีการจัดการได้ประมวลผลคำขอแล้วจะได้รับมอบหมายการควบคุมไปยังมุมมองที่มีชื่อมุมมองเดียวกันกับค่าส่งคืนวิธีการของตัวจัดการ เพื่อให้วิธีการที่ยืดหยุ่นค่าส่งคืนของวิธีการจัดการไม่ได้แสดงถึงการใช้งานมุมมอง แต่มุมมองเชิงตรรกะเช่นไม่มีการขยายไฟล์ คุณสามารถแมปมุมมองเชิงตรรกะเหล่านี้กับการใช้งานที่ถูกต้องและเขียนการใช้งานเหล่านี้ไปยังไฟล์บริบทเพื่อให้คุณสามารถเปลี่ยนรหัสเลเยอร์มุมมองได้อย่างง่ายดายโดยไม่ต้องแก้ไขรหัสที่ร้องขอคลาส Handler
มันเป็นความรับผิดชอบของการแก้ไขมุมมองที่ตรงกับไฟล์ที่ถูกต้องสำหรับชื่อเชิงตรรกะ เมื่อคลาสคอนโทรลเลอร์ได้แยกวิเคราะห์ชื่อมุมมองไปยังการใช้งานมุมมอง มันแสดงผลวัตถุที่เกี่ยวข้องตามการออกแบบที่นำมาใช้โดยมุมมอง
2 นำเข้าแพ็คเกจ Jar
อย่างน้อยก็ควรมีสิ่งเหล่านี้
3 ไฟล์การกำหนดค่า
3.1 web.xml
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3 <play-name> springmvc_helloworld </display-name> <welcome-file-list> <welcome-file> index.html </welcome-file> <welcome-file> index.htm </welcome-file> <welcome-file> default.jsp </welcome-file> </welcome-file-list> <!-servlet สำหรับ Spring MVC-> <!-หลังจากการเริ่มต้น DispatchERServlet จะค้นหาไฟล์ SpringMvc-Servlet.xml โดยตรงภายใต้/web-inf/ คำจำกัดความของพารามิเตอร์ของแท็ก servlet-name ควรสอดคล้องกับไฟล์ XML-> <servlet> <servlet-name> springmvc </servlet-name> <servlet-lass> org.springframework.web.servlet.dispatcherservlet </servlet-class> <servlet-name> springmvc </servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <dexting-param> <param-name> contextconfiglocation </param-name> <Sistener-Class> org.springframework.web.context.contextloaderlistener </listener-class> </listener> </ebs-app>
3.2 SpringMvc-servlet.xml
ชื่อของไฟล์นี้ถูกกำหนดโดย <servlet-name> </servlet-name> ของ dispatcherservlet ที่กำหนดค่าใน web.xml พา ธ อยู่ในบริบท/web-inf/ซึ่งส่วนใหญ่กำหนดค่าความสัมพันธ์ที่สอดคล้องกันระหว่างชื่อมุมมองเชิงตรรกะและมุมมองทางกายภาพที่ส่งคืนโดยคอนโทรลเลอร์
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org/2001/xml xmlns: aop = "http://www.springframework.org/schema/aop" xmlns: tx = "http://www.springframework.org/schema/tx" xmlns: บริบท = "http:/ XSI: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd "> <! id = "viewResolver"> <property name = "viewClass" value = "org.springframework.web.servlet.view.jstlview" /> <!-คอนโทรลเลอร์ส่งคืนชื่อมุมมองเชิงตรรกะหลังจากการประมวลผล pre-suffix </ebean> </ebeans>
4 เขียนคลาสโดเมน
ใช้เพื่อห่อหุ้มข้อมูลการส่งบางส่วน
แพ็คเกจ com.lin.helloworld.domain; คลาสสาธารณะ helloWorld {ข้อมูลสตริงส่วนตัว; helloWorld สาธารณะ () {super ();} public helloWorld (ข้อมูลสตริง) {super (); this.data = data;} public String getData () {return data; "helloWorld [data =" + data + "]";}} 5 เขียนคอนโทรลเลอร์
นี่คือคอนโทรลเลอร์ใน MVC สิ่งที่แตกต่างจาก struts2 คือมันเป็นสกัดกั้นระดับวิธีและ struts2 เป็นสกัดกั้นระดับคลาส
แพ็คเกจ com.lin.helloworld.controller; นำเข้า org.springframework.stereotype.controller; นำเข้า org.springframework.web.bind.annotation.modelattribute; นำเข้า org.springframework.web.bind.annotation. org.springframework.web.servlet.modelandview; นำเข้า com.linhelloworld.domain.helloworld; @controllerpublic คลาส HelloWorldController {// ที่นี่/Hello นั้นเทียบเท่ากับการกระทำใน Struts2 // ตัวสร้าง ModelandView เทียบเท่ากับผลลัพธ์ใน struts2 namemodelandview modelandview = modelandview ใหม่ ("HelloWorld", "msg", "HelloWorld !!!"); Return ModelandView; วัตถุ // ความแตกต่างระหว่างที่นี่และ struts2: // struts2 จัดการการส่งแบบฟอร์ม: <ชื่ออินพุต = "obj.data" // ข้อมูลที่ส่งถูกห่อหุ้มในข้อมูลของ OBJ Object // SpringMvc คือ: <อินพุตชื่อ = "ข้อมูล" @requestmapping ("/helloobj") โมเดลสาธารณะและวิวทิวทัศน์ Sayshelloworld (@modelattribute ("obj") helloWorld obj) {system.out.println (obj.toString ()); modelandview modelandview = modelandview ใหม่6 วิว
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <%String Path = request.getContextPath (); String basepath = request.getScheme ()+": //"+"getServerName ()+": " "-// w3c // dtd html 4.01 transitional // en"> <html> <head> <base href = "<%= basepath%>" rel = "nofollow ภายนอก"> <title> jsp 'helloworld.jsp' http-equiv = "cache-control" content = "no-cache"> <meta http-equiv = "Expires" content = "0"> <meta http-equiv = "คำหลัก" content = "keyword1, คำหลัก 2, คำหลัก type = "text/css" href = "styles.css" rel = "nofollow ภายนอก"> -> </head> <body> helloWorld! นี่คือตัวอย่างกรอบ MVC Spring <br> $ {msg} <hr/> <form action = "helloobj" method = "post"> <!- การส่งแบบฟอร์มที่นี่แตกต่างจาก struts2 name = "data" จะสอดคล้องกับการยื่นของวัตถุโดยอัตโนมัติ -> <input type = "text" name = "data" size = "30"/> <br/> <input type = "ส่ง" value = "ส่ง"/> </form> <hr/> $ {obj.data} </body>7 โครงสร้างไดเรกทอรี
สรุป
ข้างต้นเป็นเรื่องเกี่ยวกับตัวอย่างรายการ SpringMVC ในบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงเว็บไซต์นี้ต่อไปได้:
การเขียนโปรแกรม Java ของตัวอย่างการเข้าสู่ระบบ SpringMVC Simple Login
การเขียนโปรแกรม SpringMVC ใช้อินเทอร์เฟซคอนโทรลเลอร์เพื่อใช้รหัสอินสแตนซ์คอนโทรลเลอร์
คำอธิบายโดยละเอียดว่า SpringMVC Interceptor ใช้เซสชันการตรวจสอบจะหมดอายุหรือไม่
หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้