Spring - Khung MVC
Khung công tác Spring Web MVC cung cấp kiến trúc Model-View-Controller (MVC) và các thành phần sẵn sàng có thể được sử dụng để phát triển các ứng dụng web linh hoạt và kết hợp lỏng lẻo. Mô hình MVC dẫn đến việc tách biệt các khía cạnh khác nhau của ứng dụng (logic đầu vào, logic nghiệp vụ và logic giao diện người dùng), đồng thời cung cấp sự kết hợp lỏng lẻo giữa các phần tử này.
Các Model đóng gói dữ liệu ứng dụng và nói chung chúng sẽ bao gồm POJO.
Các View chịu trách nhiệm hiển thị dữ liệu mô hình và nói chung, nó tạo ra đầu ra HTML mà trình duyệt của khách hàng có thể diễn giải.
Các Controller chịu trách nhiệm xử lý các yêu cầu của người dùng và xây dựng một mô hình thích hợp và chuyển nó đến dạng xem để kết xuất.
The DispatcherServlet
Khung công tác mô hình-view-controller (MVC) của Spring Web được thiết kế xung quanh DispatcherServlet để xử lý tất cả các yêu cầu và phản hồi HTTP. Quy trình xử lý yêu cầu của Spring Web MVC DispatcherServlet được minh họa trong sơ đồ sau:
Sau đây là chuỗi các sự kiện tương ứng với một yêu cầu HTTP đến DispatcherServlet :
Sau khi nhận được một yêu cầu HTTP, DispatcherServlet sẽ tư vấn cho HandlerMapping để gọi Bộ điều khiển thích hợp .
Bộ điều khiển nhận yêu cầu và gọi các phương thức dịch vụ thích hợp dựa trên phương thức GET hoặc POST đã sử dụng. Phương thức dịch vụ sẽ thiết lập dữ liệu mô hình dựa trên logic nghiệp vụ đã xác định và trả về tên chế độ xem cho DispatcherServlet .
Các DispatcherServlet sẽ mất sự giúp đỡ từ ViewResolver để đón các quan điểm được xác định cho yêu cầu.
Sau khi hoàn tất chế độ xem, DispatcherServlet chuyển dữ liệu mô hình đến chế độ xem cuối cùng được hiển thị trên trình duyệt.
Tất cả các thành phần được đề cập ở trên, tức là HandlerMapping, Controller và ViewResolver là một phần của WebApplicationContext w, là phần mở rộng của ApplicationContext đơn giản với một số tính năng bổ sung cần thiết cho các ứng dụng web.
Cấu hình yêu cầu
Bạn cần ánh xạ các yêu cầu mà bạn muốn DispatcherServlet xử lý, bằng cách sử dụng ánh xạ URL trongweb.xmltập tin. Sau đây là một ví dụ để hiển thị khai báo và ánh xạ choHelloWeb Ví dụ về DispatcherServlet -
<web-app id = "WebApp_ID" version = "2.4"
xmlns = "http://java.sun.com/xml/ns/j2ee"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Spring MVC Application</display-name>
<servlet>
<servlet-name>HelloWeb</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloWeb</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
</web-app>
Các web.xmltệp sẽ được lưu trong thư mục WebContent / WEB-INF của ứng dụng web của bạn. Khi khởi tạoHelloWeb DispatcherServlet, khung công tác sẽ cố gắng tải ngữ cảnh ứng dụng từ một tệp có tên [servlet-name]-servlet.xmlnằm trong Thư mục WebContent / WEB-INFdirectory của ứng dụng. Trong trường hợp này, tệp của chúng tôi sẽHelloWebservlet.xml.
Tiếp theo, thẻ <servlet-mapping> cho biết URL nào sẽ được xử lý bởi DispatcherServlet nào. Ở đây tất cả các yêu cầu HTTP kết thúc bằng.jsp sẽ được xử lý bởi HelloWeb DispatcherServlet.
Nếu bạn không muốn sử dụng tên tệp mặc định là [servlet-name] -servlet.xml và vị trí mặc định là WebContent / WEB-INF , bạn có thể tùy chỉnh tên và vị trí tệp này bằng cách thêm trình xử lý servlet ContextLoaderListener trong tệp web.xml của bạn như sau -
<web-app...>
<!-------- DispatcherServlet definition goes here----->
....
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/HelloWeb-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
Bây giờ, hãy để chúng tôi kiểm tra cấu hình cần thiết cho HelloWeb-servlet.xmltệp, được đặt trong thư mục WebContent / WEB-INF của ứng dụng web của bạn -
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:context = "http://www.springframework.org/schema/context"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package = "com.tutorialspoint" />
<bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name = "prefix" value = "/WEB-INF/jsp/" />
<property name = "suffix" value = ".jsp" />
</bean>
</beans>
Sau đây là những điểm quan trọng về HelloWeb-servlet.xml tập tin -
Tệp [servlet-name] -servlet.xml sẽ được sử dụng để tạo các bean được định nghĩa, ghi đè các định nghĩa của bất kỳ bean nào được xác định có cùng tên trong phạm vi toàn cục.
Thẻ <context: component-scan ...> sẽ được sử dụng để kích hoạt khả năng quét chú thích Spring MVC, cho phép sử dụng các chú thích như @Controller và @RequestMapping, v.v.
Các InternalResourceViewResolver sẽ có những quy định để giải quyết các tên xem. Theo quy tắc đã xác định ở trên, một chế độ xem logic có tênhellođược ủy quyền triển khai chế độ xem tại /WEB-INF/jsp/hello.jsp .
Phần sau đây sẽ chỉ cho bạn cách tạo các thành phần thực của bạn, tức là Bộ điều khiển, Mô hình và Chế độ xem.
Xác định Bộ điều khiển
DispatcherServlet ủy quyền yêu cầu cho bộ điều khiển để thực thi chức năng cụ thể cho nó. Các@Controllerchú thích chỉ ra rằng một lớp cụ thể đóng vai trò của bộ điều khiển. Các@RequestMapping chú thích được sử dụng để ánh xạ một URL tới toàn bộ một lớp hoặc một phương thức xử lý cụ thể.
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(method = RequestMethod.GET)
public String printHello(ModelMap model) {
model.addAttribute("message", "Hello Spring MVC Framework!");
return "hello";
}
}
Các @Controllerchú thích định nghĩa lớp như một bộ điều khiển Spring MVC. Đây, cách sử dụng đầu tiên của@RequestMapping chỉ ra rằng tất cả các phương pháp xử lý trên bộ điều khiển này liên quan đến /hellocon đường. Chú thích tiếp theo@RequestMapping(method = RequestMethod.GET)được sử dụng để khai báo phương thức theprintHello () làm phương thức dịch vụ mặc định của bộ điều khiển để xử lý yêu cầu HTTP GET. Bạn có thể xác định một phương thức khác để xử lý bất kỳ yêu cầu POST nào tại cùng một URL.
Bạn có thể viết bộ điều khiển ở trên ở một biểu mẫu khác, nơi bạn có thể thêm các thuộc tính bổ sung trong @RequestMapping như sau:
@Controller
public class HelloController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String printHello(ModelMap model) {
model.addAttribute("message", "Hello Spring MVC Framework!");
return "hello";
}
}
Các value thuộc tính chỉ ra URL mà phương thức xử lý được ánh xạ tới và methodthuộc tính xác định phương thức dịch vụ để xử lý yêu cầu HTTP GET. Các điểm quan trọng sau đây cần được lưu ý về bộ điều khiển được xác định ở trên:
Bạn sẽ xác định logic nghiệp vụ bắt buộc bên trong một phương thức dịch vụ. Bạn có thể gọi một phương thức khác bên trong phương thức này theo yêu cầu.
Dựa trên logic nghiệp vụ được xác định, bạn sẽ tạo một mô hình trong phương pháp này. Bạn có thể sử dụng setter các thuộc tính mô hình khác nhau và các thuộc tính này sẽ được chế độ xem truy cập để trình bày kết quả cuối cùng. Ví dụ này tạo một mô hình với thuộc tính "message" của nó.
Một phương thức dịch vụ đã xác định có thể trả về một Chuỗi, chứa tên của viewđược sử dụng để kết xuất mô hình. Ví dụ này trả về "hello" dưới dạng tên chế độ xem logic.
Tạo chế độ xem JSP
Spring MVC hỗ trợ nhiều kiểu xem cho các công nghệ trình chiếu khác nhau. Chúng bao gồm - các bảng tính JSP, HTML, PDF, Excel, XML, các mẫu Velocity, XSLT, JSON, Atom và RSS feeds, JasperReports, v.v. Nhưng chúng ta thường sử dụng các mẫu JSP được viết bằng JSTL.
Hãy để chúng tôi viết một đơn giản hello xem trong /WEB-INF/hello/hello.jsp -
<html>
<head>
<title>Hello Spring MVC</title>
</head>
<body>
<h2>${message}</h2>
</body>
</html>
Đây ${message}là thuộc tính mà chúng tôi đã thiết lập bên trong Bộ điều khiển. Bạn có thể có nhiều thuộc tính được hiển thị bên trong chế độ xem của mình.
Ví dụ về khung MVC của Spring Web
Dựa trên các khái niệm trên, hãy để chúng tôi kiểm tra một số ví dụ quan trọng sẽ giúp bạn trong việc xây dựng Ứng dụng web mùa xuân của mình -
Sr.No. | Ví dụ & Mô tả |
---|---|
1 | Ví dụ về Spring MVC Hello World Ví dụ này sẽ giải thích cách viết một ứng dụng Spring Web Hello World đơn giản. |
2 | Ví dụ về xử lý biểu mẫu Spring MVC Ví dụ này sẽ giải thích cách viết ứng dụng Spring Web bằng cách sử dụng các biểu mẫu HTML để gửi dữ liệu đến bộ điều khiển và hiển thị kết quả đã xử lý. |
3 | Ví dụ về chuyển hướng trang mùa xuân Tìm hiểu cách sử dụng chức năng chuyển hướng trang trong Spring MVC Framework. |
4 | Ví dụ về trang tĩnh mùa xuân Tìm hiểu cách truy cập các trang tĩnh cùng với các trang động trong Spring MVC Framework. |
5 | Ví dụ về xử lý ngoại lệ mùa xuân Tìm hiểu cách xử lý các ngoại lệ trong Spring MVC Framework. |