Luồng đi Của ứng Dụng Spring MVC
Có thể bạn quan tâm
- Spring MVC
- Tạo dự án spring MVC
- Tạo dự án spring Boot
- Request Param và PathVariable
- Optional Path Variable
- View Resolve
- Thymeleaf
- Model ModelMap ModelView
- Data Binding
- Entity Manager
- Spring Data JPA
- OneToOne
- OneToMany
- Many To Many
- Generation Identifier
- Validation
- Session và Cookie
- Spring Security
- I18n
- Các phương thức HTTP
- Webservice
- Json Web Token
- Restful
- AOP Advise
- AOP Pointcut
- AOP Annotation
- Các Anotation trong Spring
Chào bạn, bạn đang học Spring MVC nhưng chưa hiểu luồng đi của ứng dụng nó chạy như thế nào. Ví dụ như khi người dùng gõ một url như sau vào trình duyệt http://localhost8080 thì ứng dụng mình sẽ chạy qua các tầng nào của springmvc để trả kết quả là trang home cho người dùng thấy được ? Trong bài này anh sẽ hướng dẫn mọi người các bước mà spring mvc xử lý một request (yêu cầu) từ người dùng. Anh sẽ đi qua các chủ đề sau
- Luồng đi của ứng dụng Spring MVC
- Video tạo một dự án bằng Spring MVC
Trước hết mình đi qua hình ảnh về luồng đi của ứng dụng spring mvc gồm có các thành phần nào.
-
Người dùng điền vào tên website mình cần truy cập trên browser sau đó bấm enter. Lúc này mình gửi 1 request lên server nơi mà mình triển khai ứng dụng Spring.
-
Thành phần DispatcherServlet của Spring MVC sẽ nhận được request (yêu cầu) của người dùng ở bước 1. Dispatcher là thành phần quan trọng nhất trong springmvc. Nó sẽ là nơi đầu tiên nhận request từ client sau đó sẽ chuyển request đó tới các controller tương ứng, đồng thời sẽ là chốt chặn cuối cùng trả về kết quả cho client.
-
Sau khi nhận được request(yêu cầu) DispatcherServlet sẽ chuyển yêu cầu đó tới Controller bằng các cơ chế mapping mà ta khai báo trong Handler Mapping. Có 4 cách chúng ta có thể dùng để mapping một request vào controller tương ứng
1- Cách 1 : Dùng BeanNameUrlHandlerMapping
Đây là cơ chế mapping mặc định. Dựa vào tên của URL mà nó sẽ mapping tới controller tương ứng. Anh lấy ví dụ http://localhost/hello thì nó sẽ mapping vào đúng controller HelloController vì nó trùng tên là Hello.
Sử dụng Java configure
1 2 3 4 5 6 7 8 9 10 11 12 | @Configuration public class BeanNameUrlHandlerMappingConfig { @Bean BeanNameUrlHandlerMappingConfig beanNameUrlHandlerMapping() { return new BeanNameUrlHandlerMapping(); } @Bean("/HelloUrl") public WelcomeController hello() { return new HelloController(); } } |
Sử dụng XML Configure
1 2 | <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> <bean name="/hello" class="com.levuguyen.HelloController" /> |
2- Cách 2 : Dùng SimpleUrlHandlerMapping
SimpleUrlHandlerMapping thì uyển chuyển hơn BeanNameUrlHandlerMapping. Chúng ta có thể name hoặc url để mapping tới controller tương ứng.
Ví dụ sử dụng Java Confiure.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @Configuration public class SimpleUrlHandlerMappingConfig { @Bean public SimpleUrlHandlerMapping simpleUrlHandlerMapping() { SimpleUrlHandlerMapping simpleUrlHandlerMapping = new SimpleUrlHandlerMapping(); Map<String, Object> urlMap = new HashMap<>(); urlMap.put("/simpleUrlWelcome", hello()); simpleUrlHandlerMapping.setUrlMap(urlMap); return simpleUrlHandlerMapping; } @Bean public HelloController hello() { return new HelloController(); } } |
- Ví dụ sử dụng XML Configure
1 2 3 4 5 6 7 8 9 | <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <value> /simpleUrlWelcome=hello /*/simpleUrlWelcome=hello </value> </property> </bean> <bean id="hello" class="com.levunguyen.HelloController" /> |
3- Cách 3 : ControllerClassNameHandlerMapping
ControllerClassNameHandlerMapping hiện nay không được hỗ trợ trong version Spring 5.
Chúng ta hoàn toàn có thể cấu hình cách mà URL mapping vào controller theo tên hay theo đường dẫn để mapping vào controller tương ứng.
-
Sau khi vào controller tương ứng thì từ controller ta gọi services, service gọi repository, repository sẽ sử dụng tầng persistent để thao tác với database lấy dữ liệu . và chuyển hoá dữ liệu trong database thành model và trả ngược lại cho controller.
-
Controller sẽ trả về tên view (tên trang web ) và model cho Dispatcherletter.
-
DispatcherServlet sẽ dựa vào tên view mà controller trả về . Nó sẽ đi tìm trang view (thymeleaf,jsp) tương ứng dựa vào việc ta cấu hình Viewresolver mà Dispatcher biết phải tìm thấy trang view ở đâu đồng thời truyền model để trang view hiểu thị dữ liệu. Kết quả cuối cùng là ta có một trang website hoàn chỉnh có HTML và dữ liệu. Chúng ta có thể cấu hình tầng view có thể trả về dạng html, jsp , hoặc xml hoặc json như sau
1 2 3 4 5 6 7 8 | @Bean public ViewResolver internalResourceViewResolver() { InternalResourceViewResolver bean = new InternalResourceViewResolver(); bean.setViewClass(JstlView.class); bean.setPrefix("/WEB-INF/view/"); bean.setSuffix(".jsp"); return bean; } |
Chúng ta sử dụng internalResourceViewResolver để cấu hình nơi nào chúng ta đặt các cái view (/WEB-INF/view/). Trang kết quả trả về là html,xml, hoạc jsp (bean.setSuffix(“.jsp”).
- Cuối cùng DispatcherServlet gửi lại kết quả trang web cho client. Như vậy chúng ta thấy trang web được sinh ra ở phía server sau đó nó mới được gửi lại cho người dùng.
Mọi người hãy Subscribe kênh youtube dưới đây nhé để cập nhật các video mới nhất về kỹ thuật và kỹ năng mềm
Các khoá học lập trình MIỄN PHÍ tại đây
Comments
Từ khóa » Tìm Hiểu Về Spring Mvc
-
Tìm Hiểu Những Lợi ích Mà Spring MVC Mang Lại - ITNavi
-
Một Số Khái Niệm Cơ Bản Về Spring MVC - Viblo
-
Understanding Spring MVC (Hiểu Hơn Về Spring MVC) - Viblo
-
Phần 1: Kiến Trúc Của Spring MVC, Flow Trong Spring ... - STACKJAVA
-
Học Spring Mvc Khoá Học Lập Trình Java Spring Mvc Spring Framework
-
Spring Framework Là Gì ? Tổng Quan Spring Mvc, Spring Boot Trong ...
-
Spring MVC - Hướng Dẫn Java
-
Giới Thiệu Về Spring MVC
-
Tìm Hiểu Spring MVC Và Spring Boot Trong Java Web
-
Giới Thiệu Về Spring MVC | Coder Sơn Trang
-
Báo Cáo Tìm Hiểu Spring Mvc | Xemtailieu
-
Hiểu Biết Cơ Bản Về Spring Framework Cho Người Mới Bắt đầu
-
Spring Là Gì? - VietTuts
-
Spring MVC - Hiểu Nó Theo Cách đơn Giản