1. ภาพรวม
นี่คือบทช่วยสอน Spring MVCแบบง่ายที่แสดงวิธีตั้งค่าโครงการ Spring MVC ทั้งที่มีการกำหนดค่าที่ใช้ Java และการกำหนดค่า XML
การอ้างอิง Maven สำหรับโครงการ Spring MVC ได้อธิบายไว้อย่างละเอียดในบทความการอ้างอิง Spring MVC
2. Spring MVC คืออะไร?
เป็นชื่อที่แสดงให้เห็นว่ามันเป็นโมดูลของการซื้อขายกรอบฤดูใบไม้ผลิกับ Model-View-Controller หรือรูปแบบ มันรวมข้อดีทั้งหมดของรูปแบบ MVC เข้ากับความสะดวกสบายของ Spring
การดำเนินการในฤดูใบไม้ผลิ MVC กับรูปแบบการควบคุมด้านหน้าใช้ของDispatcherServlet
โดยสรุปDispatcherServletทำหน้าที่เป็นตัวควบคุมหลักในการกำหนดเส้นทางคำขอไปยังปลายทางที่ต้องการ โมเดลไม่ใช่อะไรนอกจากข้อมูลของแอปพลิเคชันของเราและมุมมองจะแสดงโดยเอ็นจิ้นเทมเพลตต่างๆ เราจะดู JSP ในตัวอย่างของเราสักครู่
3. Spring MVC โดยใช้การกำหนดค่า Java
ในการเปิดใช้งานการสนับสนุน Spring MVC ผ่านคลาสการกำหนดค่า Java สิ่งที่เราต้องทำคือเพิ่มคำอธิบายประกอบ@EnableWebMvc :
@EnableWebMvc @Configuration public class WebConfig { /// ... }
สิ่งนี้จะตั้งค่าการสนับสนุนพื้นฐานที่เราต้องการสำหรับโครงการ MVC เช่นการลงทะเบียนตัวควบคุมและการแมปตัวแปลงประเภทการสนับสนุนการตรวจสอบตัวแปลงข้อความและการจัดการข้อยกเว้น
หากเราต้องการปรับแต่งการกำหนดค่านี้เราจำเป็นต้องใช้อินเทอร์เฟซWebMvcConfigurer :
@EnableWebMvc @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("index"); } @Bean public ViewResolver viewResolver() { InternalResourceViewResolver bean = new InternalResourceViewResolver(); bean.setViewClass(JstlView.class); bean.setPrefix("/WEB-INF/view/"); bean.setSuffix(".jsp"); return bean; } }
ในตัวอย่างนี้เราได้ลงทะเบียนViewResolver bean ซึ่งจะส่งคืนมุมมอง. jspจากไดเร็กทอรี/ WEB-INF / view
สิ่งสำคัญมากที่นี่คือเราสามารถลงทะเบียนตัวควบคุมมุมมองที่สร้างการแมปโดยตรงระหว่าง URL และชื่อมุมมองโดยใช้ViewControllerRegistry ด้วยวิธีนี้ไม่จำเป็นต้องมี Controller ใด ๆ ระหว่างทั้งสอง
หากเราต้องการกำหนดและสแกนคลาสคอนโทรลเลอร์ด้วยเราสามารถเพิ่มคำอธิบายประกอบ@ComponentScanด้วยแพ็คเกจที่มีคอนโทรลเลอร์:
@EnableWebMvc @Configuration @ComponentScan(basePackages = { "com.baeldung.web.controller" }) public class WebConfig implements WebMvcConfigurer { // ... }
ในการบูตแอปพลิเคชันที่โหลดการกำหนดค่านี้เราจำเป็นต้องมีคลาส initializer ด้วย:
public class MainWebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(final ServletContext sc) throws ServletException { AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext(); root.scan("com.baeldung"); sc.addListener(new ContextLoaderListener(root)); ServletRegistration.Dynamic appServlet = sc.addServlet("mvc", new DispatcherServlet(new GenericWebApplicationContext())); appServlet.setLoadOnStartup(1); appServlet.addMapping("/"); } }
โปรดทราบว่าสำหรับเวอร์ชันก่อนหน้า Spring 5 เราต้องใช้คลาสWebMvcConfigurerAdapterแทนอินเทอร์เฟซ
4. Spring MVC โดยใช้การกำหนดค่า XML
อีกทางเลือกหนึ่งสำหรับการกำหนดค่า Java ด้านบนเรายังสามารถใช้การกำหนดค่า XML ล้วนๆ:
หากเราต้องการใช้การกำหนดค่า XML ล้วนๆเราจะต้องเพิ่มไฟล์web.xmlเพื่อบูตแอปพลิเคชัน สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับแนวทางนี้โปรดอ่านบทความก่อนหน้าของเรา
5. ตัวควบคุมและมุมมอง
มาดูตัวอย่างของคอนโทรลเลอร์พื้นฐาน:
@Controller public class SampleController { @GetMapping("/sample") public String showForm() { return "sample"; } }
และรีซอร์ส jsp ที่สอดคล้องกันคือไฟล์sample.jsp :
ไฟล์มุมมองที่ใช้ JSP อยู่ภายใต้โฟลเดอร์ / WEB-INFของโปรเจ็กต์ดังนั้นจึงสามารถเข้าถึงได้เฉพาะในโครงสร้างพื้นฐานของ Spring เท่านั้นไม่ใช่โดยการเข้าถึง URL โดยตรง
6. Spring MVC พร้อม Boot
Spring Boot เป็นส่วนเสริมของ Spring Platform ซึ่งทำให้ง่ายต่อการเริ่มต้นและสร้างแอปพลิเคชันระดับการผลิตแบบสแตนด์อโลน Bootไม่ได้มีไว้เพื่อแทนที่ Spring แต่เพื่อให้ทำงานได้เร็วขึ้นและง่ายขึ้น
6.1. สปริงบูตสตาร์ท
เฟรมเวิร์กใหม่ให้การอ้างอิงเริ่มต้นที่สะดวกซึ่งเป็นตัวบอกการอ้างอิงที่สามารถนำเทคโนโลยีที่จำเป็นทั้งหมดมาใช้เพื่อการทำงานบางอย่าง
สิ่งเหล่านี้มีข้อได้เปรียบที่เราไม่จำเป็นต้องระบุเวอร์ชันสำหรับการพึ่งพาแต่ละครั้งอีกต่อไป แต่ให้ผู้เริ่มต้นจัดการการอ้างอิงแทนเรา
วิธีที่เร็วที่สุดในการเริ่มต้นคือการเพิ่มpom.xml spring-boot-starter-parent :
org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASE
สิ่งนี้จะดูแลการจัดการการพึ่งพา
6.2. จุดเริ่มต้นของ Spring Boot
แต่ละแอปพลิเคชันที่สร้างขึ้นโดยใช้Spring Bootต้องการเพียงกำหนดจุดเริ่มต้นหลัก โดยปกติจะเป็นคลาส Java ที่มีเมธอดหลักซึ่งมีคำอธิบายประกอบด้วย@SpringBootApplication :
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
คำอธิบายประกอบนี้จะเพิ่มคำอธิบายประกอบอื่น ๆ ดังต่อไปนี้:
- @Configuration - ซึ่งทำเครื่องหมายคลาสเป็นแหล่งที่มาของคำจำกัดความของ bean
- @EnableAutoConfiguration - ซึ่งบอกให้เฟรมเวิร์กเพิ่มถั่วตามการอ้างอิงบนคลาสพา ธ โดยอัตโนมัติ
- @ComponentScan – which scans for other configurations and beans in the same package as the Application class or below
With Spring Boot, we can set up frontend using Thymeleaf or JSP's without using ViewResolver as defined in section 3. By adding spring-boot-starter-thymeleaf dependency to our pom.xml, Thymeleaf gets enabled, and no extra configuration is necessary.
The source code for the Boot app is, as always, available over on GitHub.
Finally, if you're looking to get started with Spring Boot, have a look at our reference intro here.
7. Conclusion
In this example we configured a simple and functional Spring MVC project, using Java configuration.
The implementation of this simple Spring MVC tutorial can be found in the GitHub project.
เมื่อโปรเจ็กต์ทำงานในเครื่องสามารถเข้าถึงsample.jspได้ที่// localhost: 8080 / spring-mvc-Basics / sample