1.3.1 Xử lý các yêu cầu web
Spring đi kèm với một framework web mạnh mẽ gọi là Spring MVC. Ở trung tâm của Spring MVC là khái niệm controller — một lớp chịu trách nhiệm xử lý các yêu cầu và phản hồi lại với một số thông tin nào đó. Trong trường hợp của một ứng dụng hướng tới trình duyệt, controller phản hồi bằng cách (nếu cần) cung cấp dữ liệu cho model và chuyển tiếp yêu cầu tới một view để tạo ra HTML trả về cho trình duyệt.
Bạn sẽ học rất nhiều về Spring MVC trong chương 2. Nhưng hiện tại, bạn sẽ viết một lớp controller đơn giản để xử lý các yêu cầu đến đường dẫn gốc (ví dụ /) và chuyển tiếp các yêu cầu đó đến view của trang chủ mà không cần truyền dữ liệu nào cho model. Đoạn mã sau đây thể hiện lớp controller đơn giản đó.
Liệt kê 1.4 Controller của trang chủ
package tacos;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home";
}
}Như bạn thấy, lớp này được chú thích với @Controller. Bản thân @Controller không làm được nhiều điều. Mục đích chính của nó là đánh dấu lớp này là một component để Spring có thể quét và phát hiện. Vì HomeController được chú thích với @Controller, việc quét component của Spring sẽ tự động phát hiện và tạo ra một instance của HomeController như một bean trong context của ứng dụng Spring.
Thực tế thì có một vài annotation khác (bao gồm @Component, @Service và @Repository) phục vụ mục đích tương tự như @Controller. Bạn cũng có thể dùng bất kỳ annotation nào trong số đó để chú thích HomeController, và nó vẫn sẽ hoạt động như nhau. Tuy nhiên, việc chọn @Controller giúp mô tả rõ hơn vai trò của thành phần này trong ứng dụng.
Phương thức home() đơn giản như một phương thức controller có thể có. Nó được chú thích với @GetMapping để biểu thị rằng nếu có một HTTP GET request đến đường dẫn gốc /, thì phương thức này sẽ xử lý request đó. Phương thức này chỉ đơn giản là trả về một giá trị chuỗi "home".
Giá trị này được hiểu là tên logic của một view. Cách mà view đó được triển khai còn phụ thuộc vào vài yếu tố, nhưng vì Thymeleaf đã có mặt trong classpath của bạn, bạn có thể định nghĩa template đó bằng Thymeleaf.
Tại sao lại là Thymeleaf?
Có thể bạn đang tự hỏi tại sao tôi lại chọn Thymeleaf làm template engine. Tại sao không dùng JSP? Tại sao không dùng FreeMarker? Tại sao không chọn một trong số rất nhiều tùy chọn khác?
Nói đơn giản, tôi cần chọn một cái gì đó, và tôi thích Thymeleaf, thường ưu tiên nó hơn các lựa chọn khác. Mặc dù JSP có thể có vẻ là một lựa chọn hiển nhiên, nhưng có một vài khó khăn khi dùng JSP với Spring Boot. Tôi không muốn đi vào vấn đề đó ngay từ chương 1. Cứ yên tâm, chúng ta sẽ xem các tùy chọn template khác, bao gồm JSP, trong chương 2.
Tên template được suy ra từ tên logic của view bằng cách thêm tiền tố /templates/ và hậu tố .html. Vì vậy, đường dẫn cuối cùng của template là /templates/home.html. Do đó, bạn cần đặt template trong dự án tại /src/main/resources/templates/home.html. Hãy cùng tạo template đó ngay bây giờ.
