Hướng dẫn Spring MVC

1. Khái quát chung

Đây là một hướng dẫn Spring MVC đơn giản chỉ ra cách thiết lập một dự án Spring MVC, cả với cấu hình dựa trên Java cũng như với cấu hình XML.

Các phụ thuộc Maven cho một dự án Spring MVC được mô tả chi tiết trong bài viết về các phụ thuộc Spring MVC.

2. Spring MVC là gì?

Như tên cho thấy, đó là một mô-đun của khung công tác Spring xử lý mô hình Model-View-Controller hoặc MVC . Nó kết hợp tất cả những ưu điểm của mẫu MVC với sự tiện lợi của mùa Xuân.

Spring triển khai MVC với mẫu điều khiển phía trước bằng cách sử dụng DispatcherServlet của nó .

Tóm lại, DispatcherServlet hoạt động như bộ điều khiển chính để định tuyến các yêu cầu đến đích dự kiến ​​của chúng. Mô hình không là gì ngoài dữ liệu của ứng dụng của chúng tôi và chế độ xem được đại diện bởi bất kỳ công cụ mẫu khác nhau. Chúng ta sẽ xem xét các JSP trong ví dụ của chúng ta sau một thời gian.

3. Spring MVC sử dụng cấu hình Java

Để bật hỗ trợ Spring MVC thông qua một lớp cấu hình Java, tất cả những gì chúng ta phải làm là thêm chú thích @EnableWebMvc :

@EnableWebMvc @Configuration public class WebConfig { /// ... }

Điều này sẽ thiết lập hỗ trợ cơ bản mà chúng ta cần cho một dự án MVC, chẳng hạn như đăng ký bộ điều khiển và ánh xạ, bộ chuyển đổi kiểu, hỗ trợ xác nhận, bộ chuyển đổi thông báo và xử lý ngoại lệ.

Nếu chúng tôi muốn tùy chỉnh cấu hình này, chúng tôi cần triển khai giao diện 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; } }

Trong ví dụ này, chúng tôi đã đăng ký một bean ViewResolver sẽ trả về các chế độ xem .jsp từ thư mục / WEB-INF / view .

Điều quan trọng ở đây là chúng ta có thể đăng ký bộ điều khiển chế độ xem tạo ánh xạ trực tiếp giữa URL và tên chế độ xem bằng ViewControllerRegistry. Bằng cách này, không cần bất kỳ Bộ điều khiển nào giữa cả hai.

Nếu chúng ta cũng muốn xác định và quét các lớp bộ điều khiển, chúng ta có thể thêm chú thích @ComponentScan với gói chứa bộ điều khiển:

@EnableWebMvc @Configuration @ComponentScan(basePackages = { "com.baeldung.web.controller" }) public class WebConfig implements WebMvcConfigurer { // ... }

Để khởi động một ứng dụng tải cấu hình này, chúng ta cũng cần một lớp khởi tạo:

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("/"); } }

Lưu ý rằng đối với các phiên bản trước Spring 5, chúng ta phải sử dụng lớp WebMvcConfigurerAdapter thay vì giao diện.

4. Spring MVC sử dụng cấu hình XML

Ngoài cấu hình Java ở trên, chúng ta cũng có thể sử dụng cấu hình XML hoàn toàn:

Nếu chúng ta muốn sử dụng một cấu hình XML hoàn toàn, chúng ta cũng cần thêm tệp web.xml để khởi động ứng dụng. Để biết thêm chi tiết về cách tiếp cận này, hãy xem bài viết trước của chúng tôi.

5. Bộ điều khiển và Chế độ xem

Hãy cùng xem một ví dụ về bộ điều khiển cơ bản:

@Controller public class SampleController { @GetMapping("/sample") public String showForm() { return "sample"; } }

Và tài nguyên jsp tương ứng là tệp sample.jsp :

Các tệp dạng xem dựa trên JSP được đặt trong thư mục / WEB-INF của dự án, vì vậy chúng chỉ có thể truy cập vào cơ sở hạ tầng Spring chứ không phải bằng cách truy cập URL trực tiếp.

6. Spring MVC có khởi động

Spring Boot là một phần bổ sung cho Spring Platform giúp dễ dàng bắt đầu và tạo các ứng dụng sản xuất, độc lập. Boot không nhằm thay thế Spring mà để làm việc với nó nhanh hơn và dễ dàng hơn.

6.1. Khởi động Spring Boot

Khung mới cung cấp các phụ thuộc khởi động thuận tiện - là các bộ mô tả phụ thuộc có thể mang lại tất cả các công nghệ cần thiết cho một chức năng nhất định.

Những điều này có lợi thế là chúng ta không còn cần chỉ định phiên bản cho mỗi phần phụ thuộc mà thay vào đó cho phép người khởi động quản lý các phần phụ thuộc cho chúng tôi.

Cách nhanh nhất để bắt đầu là thêm spring-boot-starter-parent pom.xml:

 org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASE 

Điều này sẽ quản lý sự phụ thuộc.

6.2. Điểm vào Spring Boot

Mỗi ứng dụng được xây dựng bằng Spring Boot chỉ cần xác định điểm vào chính. Đây thường là một lớp Java với phương thức chính , được chú thích bằng @SpringBootApplication :

@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 

Chú thích này thêm các chú thích khác sau:

  • @Configuration - đánh dấu lớp làm nguồn định nghĩa bean
  • @EnableAutoConfiguration - yêu cầu khung công tác thêm các bean dựa trên các phụ thuộc vào classpath một cách tự động
  • @ComponentScan - quét các cấu hình và đậu khác trong cùng một gói với lớp Ứng dụng trở xuống

Với Spring Boot, chúng ta có thể thiết lập giao diện người dùng bằng Thymeleaf hoặc JSP mà không cần sử dụng ViewResolver như đã định nghĩa trong phần 3. Bằng cách thêm phần phụ thuộc spring-boot-starter-thymeleaf vào pom.xml của chúng tôi, Thymeleaf được kích hoạt và không cần cấu hình thêm.

Mã nguồn của ứng dụng Boot, như mọi khi, có sẵn trên GitHub.

Cuối cùng, nếu bạn đang muốn bắt đầu với Spring Boot, hãy xem phần giới thiệu tham khảo của chúng tôi tại đây.

7. Kết luận

Trong ví dụ này, chúng tôi đã cấu hình một dự án Spring MVC đơn giản và chức năng, sử dụng cấu hình Java.

Việc triển khai hướng dẫn Spring MVC đơn giản này có thể được tìm thấy trong dự án GitHub.

Khi dự án chạy cục bộ, sample.jsp có thể được truy cập tại // localhost: 8080 / spring-mvc-basics / sample.