Tải bản đầy đủ (.docx) (47 trang)

Báo Cáo Seminar- Spring MVC

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.69 MB, 47 trang )

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO SEMINAR
CHUYÊN ĐỀ JAVA
GV. Nguyễn Hoàng Anh
ĐỀ TÀI
SPRING MVC
TP Hồ Chí Minh
Mục Lục
Báo Cáo Seminar- Spring MVC
0841048- 0841171 Trang 2
Báo Cáo Seminar- Spring MVC
I. Tổng quan về Spring Framework
1. Giới thiệu về Spring Framework
- Spring là một framework ứng dụng mã nguồn mở, được giới thiệu vào năm 2002.
Rod Johnson đã đưa ra ý tưởng này từ kinh nghiệm làm việc với kiến trúc J2EE.
- Johnson đã viết cuốn sách với tiêu đề: “J2EE Develoment Without Using EJB” để
giới thiệu khái niệm trình (lightweight container). Với lý luận:“EJB thì có giá trị
của nó, nhưng không phải lúc nào cũng cần thiết và phù hợp cho tất cả các ứng
dụng.”
- Tuy Spring Framework không bắt buộc người ta phải tuân theo một mô hình lập
trình(programming model) cụ thể nào, song nó lan truyền rộng rãi trong cộng đồng
những người viết chương trình dùng Java, như một hình thức chủ yếu thay thế cho
mô hình Enterprise JavaBean. Theo thiết kế, bộ khung hình này giải phóng lập
trình viên dùng Java, cho phép họ nhiều quyền tự do hơn, và đồng thời cung cấp
một giải pháp tiện lợi, đầy đủ dẫn chứng bằng tài liệu, dễ dàng sử dụng, phù hợp
với những thực hành thông dụng trong công nghệ phần mềm.
- Bên cạnh những đặc trưng nền tảng của Spring Framework là những cái có thể dùng
được trong bất cứ một chương trình ứng dụng Java nào, rất nhiều các mở rộng và
tiến bộ trong việc kiến tạo các trình ứng dụng dành cho nền tảng mạng web (web-


based application) dựa trên nền Java Enterprise cũng tồn tại nữa. Spring
Framework nổi tiếng cũng một phần do chính đặc thù kể trên và được giới thương
mại công nhận như một nền tảng kiến trúc có tầm quan trọng trong chiến lược kiến
tạo phần mềm.
2. Spring với Enterprise Java Bean
2.1. Spring
- Spring không phải là một kỹ thuật persistence nhưng nó cho phép tích hợp với các kỹ
thuật khác. EJB thì tập trung vào kỹ thuật persistence và bây giờ nó đã cộng tác
với Hibernate, một ORM tốt nhất ngày nay. Nó đang dự định cộng tác với một kỹ
thuật ORM tốt khác là JDO (cung cấp cho Object Database).
- Trong Spring, chúng ta có thể sử dụng Java Bean để rút trích các thứ mà lúc trước
chỉ có thể với EJB. Mục tiêu chính của Spring là đơn giản việc phát triển J2EE và
testing.
2.2. EJB (Enterprise Java Bean)
- EJB được xuất hiện vào 1988 và là một chuẩn, đặc tả trong thế giới Enterprise. Mặc
dù có một số kỹ thuật Java gần đây, nhưng không có kỹ thuật nào đáng kể so với
EJB về mặc tổng các đặc tính của nó.
- Theo Rod Johnson thì EJB không phức tạp nhưng nó cố gắng cung cấp cách giải
quyết cho các vấn đề phức tạp.
- EJB được phát triển chính cho các giao dịch, đối tượng được phân phát ở trên máy
khác. Nhưng một số enterprise project không có mức độ phức tạp và vẫn sử dụng
0841048- 0841171 Trang 3
Báo Cáo Seminar- Spring MVC
EJB và thậm chí các ứng dụng đơn giản trở nên phức tạp. Trong trường hợp này
thì Spring là một sự chọn lựa.
- Từ lúc Spring hỗ trợ các dịch vụ ở mức enterprise, thì nó tuyên bố là một sự lựa chọn
khác đối với EJB.
- Thuận lợi của EJB:
o Transaction Management
o Declarative Transaction support

o Persistence ( CMP & BMP)
o Declarative Security
o Distributed Computing (Container managed RPC)
- Spring không làm mọi thứ nhưng nó hỗ trợ những kỹ thuật tốt nhất cho mỗi yêu
cầu.Thay vì CMP(Circuits Multi-Projects) & BMP, nó hỗ trợ một vài kỹ thuật
persistence khác như JDO, Hiberbate và OJB. Các ORM tool này thì có nhiều khả
năng cài đặt hơn CMP. Để đơn giản coding JDBC, có một tool là iBatis và Spring
cũng hỗ trợ nó.
2.3. So Sánh Spring và EJB
- Spring sử dụng Acegi, một security framework mã nguồn mở và cung cấp để khai
báo security thông qua cấu hình Spring hoặc class metadata, trong khi EJB khai
báo security được cấu hình thông qua mô tả deployment.
- Spring cung cấp proxying cho RMI(kỹ thuật remoting đặc biệt như Burlap) JAX-
RPC & web-service, trong khi EJB cung cấp lời gọi phương thức ở xa được quản
lý bởi container.
- Spring có thể cung cấp khai báo transaction như EJB. Hơn nữa, Spring còn cung cấp
khai báo thủ tục rollback cho các phương thức và exception.
- EJB thì cứng và cố gắng làm mọi thứ, một vài công việc tốt nhưng một số thì không.
Spring chỉ sử dụng Java Bean và thông qua một số kỹ thuật đặc biệt để cung cấp
nhiều chức năng như EJB, bằng cách tích hợp với một số kỹ thuật open source
khác.
- Sping cung cấp một vài thuận lợi hơn EJB như:
o Testing dễ dàng hơn - không cần khởi động EJB container để test.
o Spring dựa vào quy ước của chuẩn Java Bean, nên các lập trình viên dễ dàng
làm việc với nó.
o Spring sử dụng AOP(Aspect-Oriented Programming), mô hình hữu ích để bổ
sung vào OOP truyền thống và bảo toàn tính nguyên vẹn của OOP.
o Spring uyển chuyển.
3. Mục đích của Spring
- Mục đích của Spring là trở thành một framework ứng dụng. Các framework phổ biến

khác như Struts, Tapestry, JSF, là các framework tốt cho tầng web nhưng khi
chúng ta sử dụng các framework này, chúng ta phải cung cấp thêm framework
0841048- 0841171 Trang 4
Báo Cáo Seminar- Spring MVC
khác để giải quyết tầng enterprise mà tích hợp tốt với các framework này. Spring
làm giảm bớt vấn đề này bằng cách cung cấp một framework toàn diện bao gồm:
o Core bean container
o MVC framework
o AOP integration framework
o JDBC integration framework
o EJB integration framework.
4. Các phiên bản của Spring MVC
- Tháng 10/2006: phát hành Spring 2.0
- Tháng 11/2007: phát hành Spring 2.5
- Hiện tại: Spring 3.0
- Download:
- Document:
5. Yêu cầu về kỹ thuật
- Để triển khai ứng dụng web sử dụng Spring framework cần cài đặt PHP 5.1.0 trở lên
- Hiểu rõ phương pháp lập trình hướng đối tượng(OOP) vì đây là một framework được
thiết kế theo phương pháp hướng đối tượng thuần túy.
- Hiểu rõ về mô hình MVC
6. Yêu cầu cài đặt
- Operating System: Windows 7
- NetBeans IDE: 6.9 hoặc 6.9.1, phiên bản Java
- Java Development Kit(JDK) Phiên bản 6
- GlassFish Server Edition nguồn mở 3.0.2, yêu cầu JDK 6
- PHP: 5.3.0
- Máy chủ cơ sở dữ liệu MYSQL: 5.1.3
- Spring Framework 3.5

7. Module trong Spring Framework
- Spring Framework gồm có quy mô của 20 modules, được chia thành các nhóm Core
Container, Data Access/Intergration, Web, AOP(Aspect Oriented Programing),
Instrumentation, and Test như mô hình dưới đây:
0841048- 0841171 Trang 5
Báo Cáo Seminar- Spring MVC
- Spring cũng cung cấp module tích hợp với O/R tool như Hibernate và JDO. Spring
có thể được xem như một kiến trúc chứa 7 module. Chức năng của mỗi thành phần
như sau:
7.1. Spring Core Container
0841048- 0841171 Trang 6
Báo Cáo Seminar- Spring MVC
- Core container cung cấp chức năng cơ bản của Spring. Thành phần chính của nó là
Bean Factory, một cài đặt của Factory pattern. BeanFactory áp dụng IoC pattern để
đặc tả sự phụ thuộc từ code của ứng dụng.
7.2. Spring Context/ Application Context
- Spring context là một file cấu hình để cung cấp thông tin ngữ cảnh của Spring.
Spring context cung cấp các service như JNDI access, EJB integration, e-mail,
internalization, validation, và scheduling functionality.
7.3. Spring AOP(Aspect- Oriented)
- Spring AOP module tích hợp chức năng lập trình hướng khía cạnh vào Spring
framework thông qua cấu hình của nó. Spring AOP module cung cấp các
dịch vụ quản lý giao dịch cho các đối tượng trong bất kỳ ứng dụng nào sử
dụng Spring. Với Spring AOP chúng ta có thể tích hợp declarative
transaction management vào trong ứng dụng mà không cần dựa vào EJB
component.
- Spring AOP module cũng đưa lập trình metadata vào trong Spring. Sử dụng
cái này chúng ta có thể thêm chú thích vào source code để hướng dẫn
Spring làm thế nào để liên hệ với aspect.
7.4. Spring DAO

- Tầng JDBC và DAO đưa ra một cây phân cấp exception để quản lý kết nối đến
database, điều khiển exception và thông báo lỗi của database. Tầng exception đơn
giản điều khiển lỗi và giảm khối lượng code mà chúng ta cần viết như mở và đóng
kết nối. Module này cũng cung cấp các dịch vụ quản lý giao dịch cho các đối
tượng trong ứng dụng Spring.
7.5. Spring ORM
- Spring có thể tích hợp với một vài ORM framework để cung cấp Object Relation
tool bao gồm: JDO, Hibernate, Oracle TopLink, JPA và iBatis SQL Maps
7.6. Spring Web Module
- Trên application context module, cung cấp context cho các ứng dụng web. Spring
cũng hỗ trợ tích hợp với Struts, JSF và Webwork. Web module cũng làm giảm bớt
các công việc điều khiển nhiều request và gắn các tham số của request vào các đối
tượng domain.
7.7. Spring MVC Framework
- MVC Framework thì cài đặt đầy đủ đặc tính của MVC pattern để xây dựng
các ứng dụng Web. MVC framework thì cấu hình thông qua giao diện và
chứa được một số kỹ thuật view bao gồm: JSP, Velocity, Tiles và
generation of PDF và Excel file.
- Ví dụ: Có một số kỹ thuật đặc biệt cho tầng web như: Spring MVC
framework, Struts, JSF, WebWork, JSP, Tapestry, FreeMarker,
Developer sẽ bị lúng túng đối chiếu những điểm mạnh và xấu của tất cả
0841048- 0841171 Trang 7
Báo Cáo Seminar- Spring MVC
chúng. Mỗi khi họ chọn một kỹ thuật và bắt đầu cài đặt, thì sau đó nếu họ
muốn thay đổi một kỹ thuật khác thì rất khó. Nhưng Spring đưa ra các
module cho tất cả các kỹ thuật trên, và rất đơn giản để thay đổi file cấu
hình.
- Với phương pháp này, nó có khả năng cho cả team và test thử tất cả các hình
thức trên và xem ảnh hưởng cùng tốc độ trước khi quyết định chọn lựa. JSP
là một view template mặc định. "InternalResouceViewResolver" có thể

được sử dụng cho mục đích này.
8. Kiến trúc MVC(Model – View- Controller)
- Phân định rõ ràng các bước kết nối, chuyển hướng và logic hiển thị
- Chứng minh cơ chế xây dựng web từng lớp(Web- tier)
8.1. Thành phần của MVC
- Có 3 thành phần chính
o Controller: quản lý logic chuyển hướng và tương tác với các dịch vụ được cung
cấp từ logic kết nối.
o Model:
 Là lớp giữa Controller và View.
 Nơi chứa dữ liệu cần để xử lý và đưa lên View.
 Nơi định cư của Controller.
o View:
 Đáp ứng hiển thị theo yêu cầu
 Rút và xuất dữ liệu từ Model
8.2. Motivation for MVC
- Bảo trì dễ dàng hơn
o Thay đổi logic kết nối ít có khả năng phá vỡ logic hiển thị
o Ngược lại: Tăng khả năng làm việc nhóm
- Giúp Developers có thể chú trọng nhiều hơn đến việc phát triển code liên tục, mà
không cần lo lắng đến việc phá vỡ các thể hiện ban đầu.
- Giúp Designers có thể chú trọng nhiều hơn vào việc xây dựng giao diện sao cho tiện
dụng và bắt mắt mà không cần lo lắng về code Java.
- Sử dụng công cụ tốt nhất cho công việc
o Java thích hợp để tạo code logic kết nối
o Đánh dấu hay ngôn ngữ mẫu phù hợp để tạo HTML
- Dễ kiểm tra
o Logic kết nối và chuyển hướng được phân cách rõ ràng với logic hiển thị, nghĩa
là có thể áp dụng những thử nghiệm riêng biệt.
o Thực tế: ta có thể kiểm tra code bên ngoài servlet

8.3. MVC trong Spring
- Front Controller: servlet là các Controller riêng biệt đáp ứng một yêu cầu nào đó.
o Chứng minh mô hình trong Struts và Core J2EE Patterns
- Yêu cầu định tuyến là hoàn toàn điều khiển bởi Front Controller
0841048- 0841171 Trang 8
Báo Cáo Seminar- Spring MVC
o Các Controller riêng biệt có thể sử dụng để điều khiển cho nhiều URL khác
nhau.
- Controller là POJOs
- Controller được là quản lý trực tiếp giống như bất kỳ Bean khác trong Spring
ApplicationContext
9. Cơ chế Validation
- Validation sử dụng giao diện Spring’s Validator xác nhận đối tượng, chứng thực, báo
cáo các lỗi xác thực cho Errorobject.
- Ví dụ: xem xét một đối tượng dữ liệu nhỏ:
- Cung cấp các hành vi xác nhận cho lớp Person bằng cách thực thi hai phương thức
của org.springframework.validation
o Supports(class)
o Validate(object, org.springframework.validation.Errors
- Thực hiện một Validator đơn giản, sử dụng class ValidationUtilshelper do Spring
framework cung cấp.
10. Kiến trúc lưu trữ dữ liệu trên Database(Data access with JDBC)
10.1. Giới thiệu về Spring Framework JDBC
- Giá trị được cung cấp bởi Spring Framework JDBC trừu tượng thể hiện bởi các
chuỗi hành động được nếu trong bảng sau. Bảng này cho thấy những action Spring
quan tâm
Action Sprin
g
You
Xác định thông số kết nối X

Mở các kết nối X
0841048- 0841171 Trang 9
Báo Cáo Seminar- Spring MVC
Xác định các câu lệnh SQL X
Khai báo các thông số và giá trị cung cấp tham số X
Chuẩn bị và thực hiện các statement X
Thiết lập vòng lặp để chuyển đổi thông qua kết quả(nếu có) X
Làm việc cho mỗi lần lặp X
Quy trình các ngoại lệ X
Xử lý giao dịch X
Đóng kết nối báo cáo và statement và resultset X
- Các cách tiếp cận để truy cập cơ sở dữ liệu JDBC
o JdbcTemplate
o NamedParameterJdbcTemplate
o SimpleJdbcTemplate
o SimpleJdbcInsert and SimpleJdbcCall
o RDBMS Objects including MappingSqlQuery, SqlUpdate and
StoredProcedure
- Gói phân cấp: Khung JDBC trừu tượng của Spring Framework bao gồm bốn gói
khác nhau: core, datasource, object, support
o Org.springframework.jdbc.core
o Org.springframework.jdbc.datasource
o Org.springframework.jdbc.object
o Org.springframework.jdbc.support
10.2. Kiểm soát các kết nối cơ sở dữ liệu
- DataSource
- DataSourceUtils
- SmartDataSource
- AbstractDataSource
- SingleConnectionDataSource

- DriverManagerDataSource
- TransactionAwareDataSourceProxy
- DataSourceTransactionManager
- NativeJdbExtractor
11. Kiến trúc ORM(Object Relationship Mapping)
11.1. Giới thiệu về ORM trong MVC
- Spring Framework hỗ trợ tích hợp với Hibernate, Java Persistence API (JPA), Java
Data Object và iBATIS SQL Maps dành cho quản lý tài nguyên, truy cập dữ liệu
đối tượng (DAO) triển khai thực hiện, và chiến lược giao dịch. Ví dụ, đối với
Hibernate có lớp đầu tiên hỗ trợ.
- Có thể cấu hình - tất cả các tính năng hỗ trợ cho O / R (đối tượng quan hệ) các công
cụ lập mapping thông qua Dependency Injection.
- Spring thêm những cải tiến đáng kể cho sự lựa chọn các lớp ORM khi tạo truy cập
dữ liệu ứng dụng. Có thể tận dụng càng nhiều các hỗ trợ hội nhập như ý muốn và
0841048- 0841171 Trang 10
Báo Cáo Seminar- Spring MVC
có thể so sánh. Sử dụng nhiều hỗ trợ của ORM như là thư viện, bất kể công nghệ
bởi nó được thiết kế như một tập hợp các JavaBeans có thể tái sử dụng. ORM
trong một container IoC Spring tạo điều kiện cấu hình và triển khai.
- Lợi ích của việc sử dụng Spring Framework để tạo ra DAO ORM:
o Dễ dàng kiểm tra. Thay đổi cấu hình của SessionFactory Hibernate, JDBC
DataSource.
o Xử lý các ngoại lệ
o Quản lý tài nguyên, tích hợp quản lý giao dịch.
11.2. General ORM integration considerations
- Mục tiêu của Spring’s ORM intergration là lớp ứng dụng rõ ràng với bất kỳ truy cập
dữ liệu và giao dịch công nghệ. Không có dịch vụ business dựa vào việc truy cập
dữ liệu hoặc chiến lược giao dịch.
- Tất cả các tính năng truy cập dữ liệu cá nhân được sử dụng riêng nhưng tích hợp với
Spring, cung cấp các cấu hình dựa trên XML và tham chiếu chéo của JavaBean.

- Trong một ứng dụng Spring, nhiều đối tượng quan trọng như JavaBean: truy cập dữ
liệu mẫu, dịch vụ business có sử dụng truy cập dữ liệu hướng đối tượng và quản lý
giao dịch, phân giải trên web, điều khiển web có sử dụng dịch vụ business.
- Khi sử dụng Hibernate, JPA hoặc JDO trong DAO, phải quyết định làm thế nào để
xử lý handle the persistence của các lớp ngoại lệ.
II. Web MVC FrameWork
1. Giới thiệu về Web MVC framework
0841048- 0841171 Trang 11
Báo Cáo Seminar- Spring MVC
- Spring MVC(Model-View-Controller) framework được thiết kế xung quanh một
DispatcherServlet gởi thông điệp yêu cầu xử lý với các cấu hình handler mappings,
view resolution, local and theme resolution, hỗ trợ uploading files.
- Việc xử lý mặc định là dựa trên điều khiển @Controller và @RequestMapping cung
cấp một loạt xử lý linh hoạt. Với sự ra đời của Spring 3.0, các @Controller điều
khiển cơ chế cũng cho phép bạn tạo các trang web RESTful Web và ứng dụng,
thông qua các chú thích @PathVariable và các tính năng khác.
- Phân chia rạch ròi 3 công việc business logic, presentation logic và navigation logic.
o Model: chịu trách nhiệm đóng gói dữ liệu của ứng dụng
o Views: có nhiệm vụ hiển thị thông tin trả về cho người dung
o Controllers: chịu trách nhiệm nhận request từ người dung và gọi các dịch vụ bên
dưới để xử lý.
- Những thuận lợi trong Spring MVC framework
o Bạn có thể sử dụng bất kỳ đối tượng như là một lệnh hoặc form-backing.
o Bạn không cần phải tạo ra một framework cụ thể hoặc là một lớp cơ sở.
o Dữ liệu ràng buộc của Spring là rất linh động
2. DispatcherServlet
- Spring framework web MVC cũng giống như nhiều web MVC framework khác yêu
cầu điều khiển xung quanh một servlet chính, dispatches yêu cầu tới controller và
các chức năng khác tạo điều kiện phát triển ứng dụng web.
- Việc xử lý yêu cầu công việc của Spring web MVC DispatcherServlet được minh

hoạ trong mô hình sau.
0841048- 0841171 Trang 12
Báo Cáo Seminar- Spring MVC
- DispatcherServlet thực chất là một servlet(nó thừa kế từ lớp cơ sở HttpServlet)
- Tiếp nhận tất cả các request từ Browser. Điều khiển luồng xử lý và trung chuyển
giữa các thành phần trong MVC. Được khai báo trong web.xml của ứng dụng web
của bạn. Bạn muốn DispatcherServlet xử lý map(biều đồ) mà bạn mong muốn
bằng cách sử dụng một ánh xạ URL trong file web.xml như nhau. Như ví dụ dưới
đây:
- Trong ví dụ trên, tất cả các yêu cầu kết thúc bằng form sẽ được xử lý bởi các
DispatcherServlet. Điều này chỉ là bước đầu tiên trong việc thiết lập Spring Web
0841048- 0841171 Trang 13
Báo Cáo Seminar- Spring MVC
MVC. Bây giờ bạn cần phải cấu hình các bean khác nhau được sử dụng bởi các
Spring Web MVC framework.
- Trong khuôn khổ Web MVC, mỗi DispatcherServlet WebApplicationContext của
riêng mình, mà thừa hưởng tất cả các bean đã được xác định trong
WebApplicationContext gốc. Những bean được thừa kế có thể thay đổi trong
phạm vi servlet-cụ thể.
- Sau khi khởi tạo của một DispatcherServlet, khung hình cho một tập tin có tên
[Tên servlet-]-servlet.xml trong thư mục WEB-INF của ứng dụng web của bạn và
tạo ra các hạt được xác định ở đó, trọng các định nghĩa của bất kỳ hạt được xác
định với cùng một tên trong scope.Consider cấu hình DispatcherServlet servlet sau
đây(trong các file web.xml):
0841048- 0841171 Trang 14
Báo Cáo Seminar- Spring MVC
- Với cấu hình servlet trên bạn sẽ cần phải có một tập tin gọi là
/ WEB-INF/golfing-servlet.xml trong ứng dụng của bạn, tập tin này sẽ chứa tất cả
các thành phần của bạn Spring Web MVC-cụ thể (bean). Bạn có thể thay đổi vị trí
chính xác của tập tin cấu hình thông qua một tham số khởi tạo servlet .

- WebApplicationContext là một phần mở rộng của ApplicationContext nhưng có
thêm một số tính năng bổ sung cần thiết cho các ứng dụng web. Nó khác với một
ApplicationContext bình thường ở chỗ nó có khả năng giải quyết các chủ đề
(theme)và nó biết nó là servlet liên quan .Các WebApplicationContext là ràng
buộc trong ServletContext, và bằng cách sử dụng phương pháp tĩnh trên lớp
RequestContextUtils bạn luôn có thể tìm các WebApplicationContext nếu bạn cần
truy cập vào nó.
- The Spring DispatcherServlet sử dụng bean đặc biệt để xử lý yêu cầu và đưa ra các
quan điểm thích hợp. Bean là một phần của Spring Framework. Bạn có thể cấu
hình chúng trong WebApplicationContext này, cũng giống như bạn cấu hình bất
kỳ bean khác. Tuy nhiên, đối với hầu hết các loại bean, giá trị mặc định được cung
cấp ban đầu để bạn không cần phải cấu hình chúng. Những bean này được mô tả
trong Bảng sau đây.
- Bean trong WebApplicationContext
Kiểu bean Giải thích
controllers Form C của MVC
handler mappings Xử lý việc thực hiện một danh sách
các bộ vi xử lý trước và sau xử lý và
controller mà sẽ được thực thi.
view resolvers Giải quyết name view đến view
locale resolver Một locale resolver là một thành phần
có khả năng giải quyết các locale a
client đang sử dụng, để có thể cung
cấp cho view.
0841048- 0841171 Trang 15
Báo Cáo Seminar- Spring MVC
Theme resolver Một Theme resolver có khả năng giải
quyết các theme ứng dụng web của
bạn có thể sử dụng.
multipart file resolver Có chức năng để xử lý file uploads từ

HTML.
handler exception resolvers Có chức năng khác là bản đồ (map) để
xem hoặc thực hiện chúc năng khác
phức tạp hơn.
- Sau khi bạn thiết lập một DispatcherServlet, và yêu cầu đến DispatcherServlet cụ
thể, các DispatcherServlet bắt đầu xử lý yêu cầu như sau:
o WebApplicationContext là tìm kiếm và ràng buộc trong các yêu cầu như là một
thuộc tính có controller và các yếu tố khác trong quá trình này có thể sử dụng.
Đó là bị ràng buộc bởi mặc định theo khoá
DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE.
o Các locale resolver giải quyết yêu cầu để cho phép các yếu tố trong quá trình
giải quyết các locale để sử dụng khi xử lý yêu cầu (rendering the view,
preparing data, and so on). Nếu bạn không cần phải giải quyết các locale.
o Các theme có nghĩa vụ giải quyết yêu cầu để cho các yếu tố như view xác định
theme để sử dụng. Nếu bạn không sử dụng các theme, bạn có thể bỏ qua nó.
o Nếu bạn chỉ định một tập tin giải quyết nhiều lần, yêu cầu được kiểm tra cho
multiparts, nếu multiparts được tìm thấy, yêu cầu được bao bọc trong một
MultipartHttpServletRequest để chế biến tiếp bởi các yếu tố khác trong quá
trình này.
o Một bộ xử lý thích hợp là tìm kiếm. Nếu xử lý được tìm thấy, các dây chuyền
thực hiện liên quan đến việc xử lý (preprocessors, postprocessors, và
controllers) được thực hiện để chuẩn bị một model or rendering.
o Nếu model trả về view, view sẽ gửi kết quả ra. Nếu như model không được trả
lại nên view cũng không được trả về.
3. Implementing Controllers
- Controller cung cấp truy cập vào các ứng dụng mà bạn thường xác định thông qua
một service interface. Controller điều khiển người dùng nhập vào và chuyển qua
model và cuối cùng người dùng sẽ vào view để xem lại. Spring thực hiện
controller một cách rất trừu tượng cho phép bạn tạo ra một loạt các controller mới.
- Spring 2.5 giới thiệu một mô hình lập trình model từ MVC controllers có sử dụng

các chú thích như @RequestMapping, @RequestParam, @ModelAttribute. Sự hổ
trợ này có sẵn cho cả hai Servlet MVC và Portlet MVC. Controller thực hiện theo
kiểu này không cần mở rộng các lớp cơ sở cụ thể hoặc các giao diện củ thể. Hơn
0841048- 0841171 Trang 16
Báo Cáo Seminar- Spring MVC
nữa, họ thường không có phụ thuộc trực tiếp trên Servlet hoặc Portlet API, mặc dù
bạn có thể dễ dàng cấu hình truy cập đến các cơ sở Servlet hoặc Portlet.
3.1. Định nghĩa Controllers với @Controllers
- @Controllers có một lớp server phục vụ cho vai trò của Controllers. Spring không
yêu cầu bạn mở rộng các lớp cơ sở controllers hoặc tham khảo các API Servlet.
Tuy nhiên, bạn vẫn có thể tham khảo các tính năng Servlet-cụ thể nếu bạn cần.
- Các @Controllers hoạt động như một khuôn mẫu cho lớp, nó chỉ ra vai trò của mình.
Dispatcher sẽ quét các lớp cho các methods và detects @ RequestMapping
annotations.
- Bạn có thể định nghĩa được rõ ràng bean controllers. Sử dụng một định nghĩa tiêu
chuẩn bean Spring. Tuy nhiên các điều khiển @controllers cũng cho phép tự động
phát hiện để phù hợp với hỗ trợ chung cho sự ….
- Để kích hoạt tính năng tự động phát hiện các controllers bạn có thêm thành phần để
scan cấu hình của bạn. Sử dụng lược đồ Spring như trong các đoạn mã XML sau:
3.2. Lập bản đồ các yêu cầu với @ RequestMapping
- Bạn có thể sử dụng các chú thích như là đường dẫn của bản đồ. Thông thường thì các
bản đồ sẽ có một chú thích cụ thể hoặc là một đường dẫn mẫu cho một form
controllers, với các phương thức như là GET/POST hoặc các Http request
parameters.
0841048- 0841171 Trang 17
Báo Cáo Seminar- Spring MVC
4. Handler Mapping
- Trong các phiên bản trước của Spring, người dùng đã được yêu cầu xác định
HanderMappings trong các ứng dụng web, yêu cầu mapping để xử lý web thích
hợp. Với sự giới thiệu ở Spring 2.5, DispatcherServlet cho phép

DefaultAnnotationHandlerMapping, tìm kiếm @RequestMapping giải thích trên
@Controllers. Bình thường, bạn không cần phải thay đổi các mapping mặc định,
trừ khi bạn cần thay đổi các giá trị của thuộc tính mặc định. Các thuộc tính đó là:
- interceptors: danh sách của chức năng bị chặn sử dụng, HandlerInterceptors đã
được thảo luận ở các phần “Interceptingrequests-the HandlerInterceptorinterface”.
- defaultHandler: quyền điều khiển được mặc định sử dụng, khi mapping controller
không dẫn tới kết quả tìm kiếm tương ứng.
- order: dựa vào giá trị của thuộc tính(như trong giao diện
org.springframework.core.Ordered)
- alwaysUseFullPath(luôn sử dụng đường dẫn tuyệt đối): nếu đúng thì Spring sử
dụng đường dẫn tuyệt đối bên trong các servlet hiện tại tùy theo tìm kiếm thích
hợp của điều khiển. Nếu sai(mặc định) đường dẫn bên trong các mappingservlet
hiện tại được sử dụng. Ví dụ: nếu bản đồ servlet đang được sử dụng /testing/* và
luôn là đường dẫn tuyệt đối, thuộc tính sẽ luôn đúng thì sử dụng
/testing/viewPage.html. Ngược lại nếu thuộc tính là sai, sử dụng /viewPage.html.
0841048- 0841171 Trang 18
Báo Cáo Seminar- Spring MVC
- urlDecode: mặc định là đúng với Spring 2.5. Nếu bạn để so sánh giữa các đường dẫn
được mã hóa, thiết lập này sẽ sai. Tuy nhiên, HttpServletRequest luôn luôn thấy
nhiều đường đi ở dạng giải mã.
- lazyInitHandlers: cho phép khởi tạo của bộ xử lý lazyInitHanders. Các giá trị này
mặc định là sai.
- Chú ý: Các alwaysUseFullPath, urlDecode, và lazyInitHandlers là thuộc tính duy
nhất, có chứa sẵn các lớp con của
org.springframework.web.servlet.handler.AbstractUrlHandlerMapping. Ví dụ sau
chỉ ra làm sao để ghi đè lên các mapping mặc định và thêm một interceptor
- Chặn yêu cầu- giao diện HandlerInterceptor
- Cơ chế xử lý mapping của Spring bao gồm điều khiển interceptors, nó sẽ hữu ích khi
bạn muốn áp dụng các chức năng cụ thể với các yêu cầu nhất định.
- Interceptors đặt tại các mapping xử lý phải được thực hiện HandlerInterceptor từ

org.springframework.web.servlet. Giao diện này xác định ba phương thức:
o Một là gọi trước khi xử lý thực tế được thực thi
o Hai là được gọi sau khi xử lý được thực thi
o Ba là gọi khi yêu cầu hoàn thành đã hoàn tất.
Ba phương thức cung cấp sự linh hoạt, đủ để hoàn tất các tiền xử lý và sau xử lý.
- preHandle( ) phương thức trả về giá trị Boolean. Bạn có thể sử dụng phương thức
này để thoát hoặc tiếp tục thực hiện chuỗi điều khiển. Khi phương thức này trả về
true, chuỗi thực thi sẽ xử lý tiếp tục, ngược lại khi phương thức trả về false
DispatcherServlet giả sử đã chặn và trả về một view thích hợp và không tiếp tục
thực hiện chuỗi interceptors
- Ví dụ sau định nghĩa một ánh xạ xử lý mà các mapping yêu cầu phù hợp với mẫu
URL “/*.form” và “/*.view” vào một controller đặc biệt,
editAccountFormController. Một interceptor đã được thêm vào để chặn các yêu
cầu này và reroutes chuyển người dùng đến một trang cụ thể nếu thời gian không ở
giữa 9a.m và 6 a.m.
0841048- 0841171 Trang 19
Báo Cáo Seminar- Spring MVC
- Bất cứ yêu cầu xử lý nào của mapping bị chặn bởi các TimeBasedAccessInterceptor.
Nếu thời gian hiện tại nằm ngoài thời gianthực thi, người dùng sẽ được chuyển
hướng đến một tập tin HTML tĩnh, có nội dung thông báo: bạn chỉ có thể truy cập
vào các trang web trong thời gian quy định.
0841048- 0841171 Trang 20
Báo Cáo Seminar- Spring MVC
- Như các bạn có thể thấy, Spring chuyển đổi lớp HandlerInterceptorAdapter làm cho
nó dễ dùng hơn để có thể mở rộng giao diện HandlerInterceptor.
5. Resolving views
- Tất cả framework MVC cho những ứng dụng web cung cấp cách để gửi các view.
Spring cung cấp view, những bộ phân tích cho phép bạn trả lại model bằng trình
duyệt không có những công nghệ đặc biệt. Ngoài ra Spring cho phép xử dụng
JSPs, template velocity và XSLT view.

- Hai giao diện mà quan trọng đối với cách Spring xử lý view là ViewResolver và
View. ViewResolver cung cấp một mapping giữa name và view thực tế. Giao diện
View gửi những yêu cầu của handler tới một trong những view.
5.1. Giải quyết các view bằng giao diện ViewResolver
- Như đã thảo luận ở trên, những “Implementing Controllers” mọi phương pháp
handler trong điều khiển Spring Web MVC các controller phải giải quyết tới name
của view rõ ràng(bằng việc trả lại một chuỗi, view hay ModelAndView) hay tuyệt
đối(dựa vào những quy ước). Views trong Spring được gửi bởi tên view và giải
quyết bởi view resolver . Spring đưa đến khá nhiều cách giải quyết.
View resolvers
ViewResolver Description
AbstractCachingViewResolver View trừu tượng giải quyết bởi các
caches views. Thường với các views cần
chuẩn bị trước khi sử dụng. Mở rộng các
view này bằng cách cung cấp caching.
XmlViewResolver Thi hành của ViewResolver là chấp nhận
cấu hình được viết ở XML với cùng
DTD(Document Type Definitions) là
Spring’s XML bean factories. Mặc định
cấu hình file là /WEB-INF/views.xml.
ResourceBundleViewResolver Sự thi hành của ViewResolver sẽ sử dụng
những định nghĩa bean trong
ResourceBundle, được chỉ rõ ràng bởi
tên. Điển hình, bạn định nghĩ bundle
trong thuộc tính, vị trí trong đường dẫn
lớp. Mặc định tên file là views.properties.
UrlBasedViewResolver Giao diện ViewResolver thực thi đơn
giản, đưa ra những quyết định trực tiếp
của tên view logic tới URLs ngoài định
nghĩa rõ ràng của mapping. Điều này là

phù hợp với sự logic của tên, của các tài
nguyên view mà không rắc rối.
InternalResourceViewResourcer Thuận lợi cho lớp con của
UrlBasedViewResolver hỗ trợ
0841048- 0841171 Trang 21
Báo Cáo Seminar- Spring MVC
InternalResourceView (hiệu ứng,
Servlets, JSPs) và các lớp con như
JstlView và TilesView. Bạn có thể chỉ
định lớp view cho tất cả các quan điểm
được tạo ra bằng cách giải quyết nó với
setViewClass( )
VelocityViewResolver/
FreeMarkerViewResolver
Thuận tiện lớp con của
UrlBasedViewResolver hỗ trợ
VelocityView (hiệu ứng, tốc độ của
templates) hoặc FreeMaKerView, tùy
chỉnh với các lớp con của chúng.
ContentNegotiatingViewResolver Thực thi các giao diện ViewResolver, giải
quyết dựa trên tên file yêu cầu hoặc chấp
nhận tiêu đề.
- Ví dụ, với JSP là một công nghệ view, bạn có thể sử dụng UrlBasedViewResolver.
Cái này sẽ giải quyết name view từ một URL và yêu cầu từ handler cho các
RequestDispatcher để trả lại trên view.
- Khi quay về kiểm tra với tên hợp lý, view này chuyển tiếp giải quyết các yêu cầu cho
RequestDispatcher , sau đó sẽ gửi yêu cầu đến /WEB-INF/jsp/test.jsp
- Khi bạn kết hợp các công nghệ view khác trên ứng dụng web, bạn có thể sử dụng
ResourceBundleViewResolver:
- Các ResourceBundleViewResolver kiểm tra việc ResourceBundle xác định bởi các

basename và ở từng view nó là cách hỗ trợ giải quyết, nó sử dụng các giá trị của
thuộc tính [viewname]. (class) là lớp view và giá trị của thuộc tính [viewname].url
là view url. Có thể xác định một view parent từ tất cả các view trong thuộc tính file
mở rộng. Bằng cách này, bạn có thể xác định được một class default view.
- Chú ý: Các lớp con của AbstractCachingViewResolver, cache view sẽ giải quyết
trường hợp này. Cache cải thiện hiệu suất của các công nghệ view nhất định. Nó có
thể tắt bộ nhớ cache bằng cách thiết lập các thuộc tính cache sai. Hơn nữa, nếu bạn
0841048- 0841171 Trang 22
Báo Cáo Seminar- Spring MVC
phải làm mới một số view trong thời gian chạy (ví dụ như khi tốc độ chạy một mẫu
được sửa đổi), bạn có thể sử dụng removeFromCache (String viewName, Locale loc)
5.2. Chaining ViewResolvers
- Spring hỗ trợ đa cách giải quyết View. Bạn có thể giải quyết chuỗi, ví dụ ghi đè các
phương thức view đặc biệt tùy từng trường hợp nhất định.
Trong ví dụ sau, các chuỗi của view có hai cách giải quyết, một là
InternalResourceViewResolver, luôn tự động định vị như là giải quyết cuối cùng
trong chuỗi, và XmlViewResolver xác định các view Excel. Các view Excel không
được hỗ trợ bởi InternalResourceViewResolver.
- Nếu cách giải quyết rõ ràng không cho ra kết quả một view, Spring sẽ xem xét cách
giải quyết khác. Nếu giải quyết thêm view tồn tại, Spring tiếp tục kiểm tra chúng
cho đến khi được giải quyết. Nếu không có cách giải quyết trả lại một view, Spring
đưa ra một ServletException.
- Giải quyết vấn đề của view trả về null nếu view có thể không được tìm thấy. Không
phải tất cả các cách giải quyết đều làm được điều này, tuy nhiên, bởi trong một số
trường hợp, việc giải quyết đơn giản là không thể phát hiện có hoặc không thấy tồn
tại. Ví dụ: InternalResourceViewResolver sử dụng RequestDispatcher bên trong,
và là cách duy nhất để tìm hiểu xem JSP là tồn tại, nhưng thực thi này chỉ có thể
thực hiện một lần. Tương tự cũng cho VelocityViewResolver và một số cách khác.
Kiểm tra Javadoc để giải quyết view, xem view tồn tại chưa. Vì vậy việc đưa ra
một InternarlResourceViewResolver trong chuỗi ở một nơi khác là cuối cùng, kết

quả trong chuỗi không được kiểm tra đầy đủ, bởi các
InternalResourceViewResoler sẽ luôn luôn trả lại view.
5.3. Chuyển đến view
0841048- 0841171 Trang 23
Báo Cáo Seminar- Spring MVC
- Như đã đề cập trước đây, một controller thông thường trả về một view tương ứng ,
có một giải quyết cho một kỹ thuật view cụ thể. Đối với các kỹ thuật view như là
JSP được biên dịch thông qua Servlet hay JSP , sự thông dịch này thường được xử
lý thông qua sự kết hợp của InternalResourceViewResolver và
InternalResourceView, mà vấn đề là một tiến bộ hay bao gồm thông qua
RequestDispatcher.forward các API của phương thức Servlet ( )hoặc phương thức
RequestDispatcher.include(). Đối với các công nghệ view khác, chẳng hạn như
Velocity, XSLT, view sẽ tự cho nội dung vào từng dòng.
- RedirectView
o Một cách để thực hiện chuyển hướng là kết quả của controller trả về controller
đã tạo và trả về một View của SpringRedirectView. Trong trường hợp này,
DispatcherServlet không sử dụng các cơ chế View phân giải bình thường. Thay
vì nó đã được trả về view đã có, DispatcherServlet đơn giản chỉ thị nhằm làm
việc với RedirectView.
o Vấn đề một HttpServletResponse.sendRedirect () gọi trả về cho trình duyệt của
client như là một HTTP chuyển hướng. Tất cả các thuộc tính mô hình được thể
hiện như các tham số truy vấn HTTP. Điều này có nghĩa là các model phải có
các đối tượng (thường Strings hoặc các đối tượng chuyển đổi sang một đại diện
String), mà có thể dễ dàng chuyển đổi sang một parameter. Nếu truy vấn văn
bản HTTP bạn sử dụng RedirectView và view là được tạo ra bởi controller
chính nó, nó cảnh cáo bạn cấu hình các URL chuyển hướng được thêm vào
controller để nó không phải là thêm vào controller, nhưng cấu hình cùng với
tên View.
- The redirect: prefix
o Nó cũng có thể sử dụng một chuyển tiếp đặc biệt: tiền tố cho name view có giải

quyết bằng UrlBasedViewResolver và các lớp con. Điều này tạo ra một
InternalResourceView (mà cuối cùng không một RequestDispatcher.forward
()) trên phần còn lại của view name, được xem là một URL.
o Do đó, tiền tố này không hữu ích với InternalResourceViewResolver và
InternalResourceView. Nhưng các tiền tố có thể hữu ích khi bạn đang sử dụng
một công nghệ view khác, nhưng vẫn muốn các nguồn tài nguyên được xử lý
bởi Servlet JSP /. Đối với các redirect: prefix, nếu name view với redirect:
prefix được thêm vào controller, controller sẽ không phát hiện bất cứ điều gì
đặc biệt xảy ra trong việc xử lý phản ứng
- The forward: prefix
Itisalsopossibletouseaspecial forward: prefixforviewnamesthatareultimatelyresolvedby
0841048- 0841171 Trang 24
Báo Cáo Seminar- Spring MVC
UrlBasedViewResolver andsubclasses.Thiscreatesan InternalResourceView (which
ultimatelydoesa RequestDispatcher.forward())aroundtherestoftheviewname,whichis
consideredaURL.Therefore,thisprefixisnotusefulwith InternalResourceViewResolver
and
InternalResourceView (forJSPsforexample).Buttheprefixcanbehelpfulwhenyouare
primarilyusinganotherviewtechnology,butstillwanttoforceaforwardofaresourcetobehan
dledby
theServlet/JSPengine.(Notethatyoumayalsochainmultipleviewresolvers,instead.)
Aswiththe redirect: prefix,iftheviewnamewiththe forward: prefixisinjectedintothe
controller,thecontrollerdoesnotdetectthatanythingspecialishappeningintermsofhandling
the
response.
5.4. ContentNegotiatingViewResolver
- Các ContentNegotiatingViewResolver không giải quyết được chính nó mà fải cần có
1 đại diện khác để xem độ phận giải của nó. Chọn chế độ View tương tự như các
đại diện theo yêu cầu của phía client. Tồn tại hai chiến lược cho client để yêu cầu
một đại diện từ máy chủ.

o Sử dụng một URI riêng biệt cho mỗi tài nguyên, thông thường bằng cách sử
dụng một phần mở rộng tập tin khác nhau trong các URL.
o Sử dụng URL tương tự cho các client để xác định vị trí các nguồn lực, nhưng
thiết lập các tiêu đề chấp nhận yêu cầu HTTP vào danh sách các loại phương
tiện truyền thông mà nó hiểu được. Ví dụ, một yêu cầu HTTP cho
với một tiêu đề Chấp nhận đặt application /
pdf yêu cầu một đại diện của người sử dụng PDF fred, trong khi
với một tiêu đề Chấp nhận thiết lập để
text / xml yêu cầu một đại diện XML
- Ghi chú:
o Để hỗ trợ nhiều đại diện của một tài nguyên, Spring cung cấp
ContentNegotiatingViewResolver để giải quyết view dựa trên phần mở rộng
tập tin hoặc chấp nhận tiêu đề của yêu cầu HTTP. Ở trong firefox nó được cố
định
- ContentNegotiatingViewResolver không thực hiện việc giải quyết View chính nó
0841048- 0841171 Trang 25

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×