InternalResourceViewResolver trong Spring MVC

Trong Spring MVC như mình đã trình bày trong bài viết này, bước cuối cùng của việc xử lý request, DispatcherServlet sẽ chọn View Template và truyền Model data để View Template có thể xử lý, render giao diện và trả về lại cho DispatcherServlet. View Template sẽ là những đối tượng hiện thực interface ViewResolver và chúng sẽ quyết định việc render giao diện sẽ xảy ra như thế nào dựa trên tên view mà chúng ta trả về trong controller. Spring MVC có nhiều đối tượng hiện thực interface ViewResolver, một trong số đó chúng ta có InternalResourceViewResolver. Trong bài viết này, chúng ta hãy cùng nhau tìm hiểu về InternalResourceViewResolver các bạn nhé!

Đầu tiên, mình sẽ tạo mới một Spring Legacy Project trong Spring Tool Suite để làm ví dụ:

InternalResourceViewResolver trong Spring MVC

Bạn nào chưa biết cách tạo thì có thể tham khảo thêm bài viết này.

Phần properties trong file pom.xml mình sẽ chỉnh sửa lại version của các thư viện, framework như sau:

Để chạy project này, mình sẽ sử dụng Maven Jetty Plugin như sau:

OK, vào chủ đề chính thôi các bạn!



Mặc định, khi chúng ta tạo Spring MVC project sử dụng Spring Legacy Project trong Spring Tool Suite, project này sẽ hỗ trợ InternalResourceViewResolver. Nếu các bạn mở tập tin servlet-context.xml nằm trong thư mục /src/main/WEB-INF/spring/appServlet, các bạn sẽ thấy một khai báo bean cho InternalResourceViewResolver như sau:

InternalResourceViewResolver sẽ map tên view mà chúng ta trả về trong controller với một tên file nằm trong một thư mục được chỉ định.

Trong khai báo bean ở trên, InternalResourceViewResolver sẽ map tất cả các tên view với các file có đuôi .jsp nằm trong thư mục /src/main/WEB-INF/views để render giao diện cho chúng ta.

Với ví dụ của chúng ta, trong class HomeController nằm trong package com.huongdanjava.springmvc, chúng ta đã định nghĩa request “/” với tên view trả về trong method home() là “home”.

Với khai báo trả về như thế, InternalResourceViewResolver sẽ load tập tin “WEB-INF/views/home.jsp” để render giao diện.

Dưới đây là một số ví dụ về cách map tên view với tập tin view:

  • home –> /WEB-INF/views/home.jsp
  • admin/login –>  /WEB-INF/views/admin/login.jsp

Mặc định thì InternalResourceViewResolver sẽ resolve tên view của chúng ta thành một đối tượng view của class JstlView nếu thư viện JSTL nằm trong classpath của project. Và đáng lẽ ra trong khai báo bean của InternalResourceViewResolver chúng ta cũng phải khai báo thêm một properties “viewClass” như sau:

Nhưng vì mặc định là JstlView nên chúng ta cũng không cần phải khai báo properties “viewClass” như thế.

Nếu các bạn sử dụng các đối tượng ViewResolver khác thì cần phải khai báo thêm viewClass nữa nhé!

Kết quả:

InternalResourceViewResolver trong Spring MVC

 

5/5 - (2 bình chọn)

Add Comment