Giới thiệu về Spring Boot Starter WebMVC

Khi xây dựng một ứng dụng Web với Spring Framework, chúng ta thường cần khá nhiều thành phần khác nhau như Spring Web, Spring MVC, JSON support và một Web Server Runtime như Apache Tomcat để chạy ứng dụng. Nếu phải tự khai báo từng dependency, đồng thời tự quản lý version của chúng, việc tạo một Spring Web application sẽ trở nên khá mất thời gian. Spring Boot giải quyết vấn đề này thông qua các Starter, đó các bạn.

Một trong những Starter được sử dụng phổ biến nhất mà mình muốn đề cập trong bài viết này là Spring Boot Starter WebMVC:

Chỉ với dependency này, chúng ta đã có phần lớn những thành phần cần thiết để xây dựng một web application hoặc REST API sử dụng Spring MVC.

Vậy spring-boot-starter-webmvc thực chất là gì? Nó cung cấp những dependency nào? Và tại sao chúng ta có thể xây dựng một REST API gần như ngay lập tức sau khi thêm dependency này? Chúng ta sẽ cùng tìm hiểu trong bài viết này, các bạn nhé.

Trước khi tìm hiểu spring-boot-starter-webmvc, mình sẽ nói qua về Starter trong Spring Boot là gì trước.

Có thể hiểu đơn giản, Spring Boot Starter là một dependency descriptor giúp tập hợp những dependency thường được sử dụng cùng nhau cho một mục đích cụ thể. Điều này giúp việc khai báo dependency đơn giản hơn rất nhiều. Ngoài ra, Spring Boot cũng cung cấp cơ chế quản lý version cho các dependency của mình, giúp những dependency thường được sử dụng cùng nhau có version tương thích với nhau.

spring-boot-starter-webmvc là một Spring Boot Starter dành cho việc xây dựng các ứng dụng web sử dụng Spring MVC.

Để sử dụng nó, các bạn chỉ cần thêm dependency sau vào tập tin pom.xml:

Sau khi thêm dependency này, Maven sẽ tải spring-boot-starter-webmmvc cùng với các dependency mà Starter này yêu cầu.

Trong ví dụ của bài viết trước, các bạn có thể thấy rất nhiều dependency cần thiết được include vào project như sau:

Một số dependency quan trọng của Spring Boot Starter WebMVC, giúp chúng ta có thể hiểu Starter này hoạt động như thế nào, mà mình có thể liệt kê ra ở đây như sau:
  • Spring Boot Starter
  • Spring Web
  • Spring Web MVC và Spring Boot Web MVC
  • Spring Boot Tomcat và Spring Boot Starter Tomcat
  • Spring Boot Jackson và Spring Boot Starter Jackson

Bây giờ chúng ta sẽ xem vai trò của từng dependency như thế nào, các bạn nhé!

Spring Boot Starter

spring-boot-starter là thư viện core của các Spring Boot Starters, bất kỳ một Starter nào cũng đều sử dụng nó.

Nó giúp chúng ta include các dependency cơ bản cho một Spring Boot application như sau:

  • spring-boot
  • spring-boot-autoconfigure
  • spring-core
  • spring-context
  • logging support

Spring Web

spring-web là một module của Spring Framework, cung cấp những thành phần nền tảng liên quan đến Web. Nó cung cấp nhiều abstraction và infrastructure được sử dụng trong quá trình xử lý HTTP request và response. Nó liên quan đến:

  • HTTP request và response
  • Web utilities
  • HTTP message conversion
  • REST-related infrastructure

Spring Web MVC và Spring Boot Web MVC

Một dependency rất quan trọng khác là spring-webmvc. Đây là module cung cấp Spring MVC, đó các bạn.

Spring MVC cung cấp cơ chế để application có thể nhận HTTP request, tìm Controller phù hợp, gọi method xử lý request và tạo HTTP response.

spring-boot-webmvc thì là module cung cấp cơ chế auto-configuration và integration của Spring Boot. Chúng ta sẽ đề cập đến cơ chế auto-configuration này trong bài viết sau, các bạn nhé.

Embedded Tomcat

Một thành phần rất đáng chú ý khác là: spring-boot-starter-tomcat

Starter này sẽ đưa Embedded Tomcat vào application. Đây là một trong những điểm làm cho Spring Boot khác biệt đáng kể so với cách triển khai Java Web application truyền thống đó các bạn.

Trước đây, để deploy ứng dụng lên các server runtime, chúng ta thường đóng gói nó thành WAR file và triển khai lên một server runtime như Apache Tomcat đã được cài đặt bên ngoài.

Với Spring Boot thì Tomcat được đóng gói cùng với application và có thể được khởi động cùng application.

Do đó, chúng ta có thể chạy application bằng:

hoặc sau khi build thành JAR:

Chúng ta không cần phải cài đặt một Tomcat server riêng chỉ để chạy application trong trường hợp sử dụng embedded server mặc định.

Đây là một trong những tính năng giúp Spring Boot đơn giản hóa quá trình phát triển và triển khai web application.

JSON support

Khi xây dựng REST API, việc chuyển đổi giữa Java object và JSON là một nhu cầu rất phổ biến.

Ví dụ, chúng ta có một Java record:

Khi trả về object này từ một REST endpoint, client có thể nhận được JSON:

Quá trình này có thể được hình dung như sau:

  • Java Object -> JSON serialization -> JSON
  • Ở chiều ngược lại thì JSON -> JSON deserialization -> Java Object

Trong Spring Boot, Jackson là thư viện thường được sử dụng để thực hiện việc chuyển đổi này.

spring-boot-starter-webmvc đưa spring-boot-starter-jackson vào application, từ đó cung cấp những dependency cần thiết cho JSON support.

Vì vậy, khi xây dựng một REST API với Spring Boot, chúng ta thường không cần phải tự viết logic chuyển Java object thành JSON hoặc ngược lại.

Auto configuration

Đây là lúc chúng ta có thể kết nối Starter với một khái niệm rất quan trọng của Spring Boot: Auto-configuration.

Spring Boot có thể dựa vào những dependency có trong classpath và môi trường của application để xác định những configuration nào cần được áp dụng. Khi các dependency cần thiết cho một web application có mặt, Spring Boot có thể tự động cấu hình phần lớn infrastructure cần thiết cho ứng dụng.

Một trong những auto-configuration class liên quan đến Spring MVC là: WebMvcAutoConfiguration. Nhờ cơ chế này, chúng ta không cần phải tự viết rất nhiều configuration như khi sử dụng Spring Framework thuần túy. Như mình đã nói ở trên, mình sẽ đề cập chi tiết về phần auto-configuration này trong một bài viết khác, các bạn nhé!

Đây chính là một trong những ý tưởng cốt lõi của Spring Boot: Convention over Configuration

Thay vì yêu cầu developer cấu hình mọi thứ từ đầu, Spring Boot cung cấp những configuration hợp lý cho các trường hợp phổ biến và cho phép developer tùy chỉnh khi cần.

Cho ví dụ trong bài viết trước, chúng ta không phải tự:

  • Cài đặt Tomcat;
  • Cấu hình Servlet container;
  • Tạo WAR file;
  • Cấu hình Spring MVC infrastructure;
  • Tự viết JSON converter.

Phần lớn những công việc này đã được Spring Boot xử lý thông qua dependency của Starter và cơ chế auto-configuration.

Như vậy là trong bài viết này, mình đã giới thiệu với các bạn những điểm cơ bản của Spring Boot Starter Web MVC. Hiểu rõ mục đích của nó sẽ giúp các bạn rất nhiều trong quá trình phát triển các ứng dụng web với Spring Boot đó các bạn!

Add Comment