1. Trang chủ
  2. » Luận Văn - Báo Cáo

LẬP TRÌNH ỨNG DỤNG JAVA SE08 – SPRING

92 999 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 92
Dung lượng 1,98 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

- 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 t

Trang 1

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN

KHOA CÔNG NGHỆ THÔNG TIN

Trang 2

Mục Lục

I Tổng quan về Spring Framework 5

1 Giới thiệu về Spring Framework 5

2 Spring với Enterprise Java Bean 5

2.1 Spring 5

2.2 EJB (Enterprise Java Bean) 6

2.3 So Sánh Spring và EJB 5

3 Mục đích của Spring 6

4 Các phiên bản của Spring MVC 6

5 Yêu cầu về kỹ thuật 6

6 Yêu cầu cài đặt 6

7 Module trong Spring Framework 6

7.1 Spring Core Container 8

7.2 Spring Context/ Application Context 8

7.3 Spring AOP(Aspect- Oriented) 8

7.4 Spring DAO 8

7.5 Spring ORM 9

7.6 Spring Web Module 9

7.7 Spring MVC Framework 9

8 Kiến trúc MVC(Model – View- Controller) 9

8.1 Thành phần của MVC 9

8.2 Motivation for MVC 10

8.3 MVC trong Spring 10

9 Cơ chế Validation 10

10 Kiến trúc lưu trữ dữ liệu trên Database(Data access with JDBC) 11

10.1 Giới thiệu về Spring Framework JDBC 11

10.2 Kiểm soát các kết nối cơ sở dữ liệu 12

11 Kiến trúc ORM(Object Relationship Mapping) 12

11.1 Giới thiệu về ORM trong MVC 12

11.2 General ORM integration considerations 13

II Web MVC FrameWork 13

Trang 3

1 Giới thiệu về Web MVC framework 14

2 DispatcherServlet 14

3 Implementing Controllers 18

3.1 Định nghĩa Controllers với @Controllers 19

3.2 Lập bản đồ các yêu cầu với @ RequestMapping 19

4 Handler Mapping 20

5 Resolving views 23

5.1 Giải quyết các view bằng giao diện ViewResolver 23

5.2 Chaining ViewResolvers 25

5.3 Chuyển đến view 26

5.4 ContentNegotiatingViewResolver 27

6 Using locales 29

6.1 AcceptHeaderLocaleResolver 29

6.2 CookieLocaleResolver 30

6.3 SessionLocaleResolver 30

6.4 LocaleChangeInterceptor 30

7 Using themes 31

7.1 Tổng quan về themes 31

7.2 Định nghĩa themes 31

7.3 Phân giải Theme 32

8 Spring’s multipart(fileupload) support 33

8.1 Giới thiệu 33

8.2 Sử dụng MultipartResolver 33

8.3 Xử lý một tập tin tải lên trong một biểu mẫu 34

9 Handling exceptions 35

9.1 HandlerExceptionResolver 35

9.2 @ExceptionHandler 36

10 Convention over configuration support 37

10.1 Controller-ControllerClassNameHandlermapping 37

10.2 The Model ModelMap (ModelAndView) 38

10.3 The View – RequestToViewNameTranslator 39

11 Etag support 40

12 Configuring Spring MVC 41

Trang 4

12.1 mvc:annotation-driven 41

12.2 mvc:interceptors 42

12.3 mvc:view-controller 43

12.4 mvc:resources 43

12.5 mvc:default-servlet-handler 43

III Demo HelloSpringMVC 44

1 Bước 1: Tạo Project 44

2 Bước 2: Tạo Service 46

3 Bước 3: Tạo Controller 46

4 Bước 4: Tạo View 48

5 Bước 5: Cấu hình 49

IV Ứng Dụng: Đồ án Java Lý thuyết: Chợ Lớn- Gia Dụng 50

V Tham Khảo 50

Trang 5

I Tổng quan về Spring Framework

Spring Framework - Kiến trúc và ứng dụng

1. Giới thiệu về Spring Framework

- Spring là một application framework 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

- Ông ta đã 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 chứa hạng 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

- Như Hibernate chống lại CMP về nguyên lý cơ bản của kỹ thuật ORM, Spring chống

lại EJB vì sự phức tạp và không phù hợp cho các unit test Thay vì EJB, Spring sử dụng

Java bean, với một vài sự thay đổi để thu được tất cả các thuận lợi mà môi trường EJB

đưa ra Do đó Spring là một sự lựa chọn khác so với EJB

2. Giới thiệu 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

Trang 6

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 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:

a) Transaction Management

b) Declarative Transaction support

c) Persistence ( CMP & BMP)

d) Declarative Security

e) Distributed Computing (Container managed RPC)

Spring không cố gắ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 & 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

Trang 7

- 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ả demployment

- 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

- Do đó, trong khi 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

Do đó, nó cung cấp một vài thuận lợi hơn EJB như:

a) Testing dễ dàng hơn - không cần khởi động EJB container để test

b) Spring dựa vào quy ước của chuẩn Java Bean, nên programmer dễ dàng làm việc với

c) Nó 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

d) Nó thì uyển chuyển

3 Mục đích của Spring

- Mục đích của Spring là trở thành một application framework 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 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:

• Core bean container

• MVC framework

Trang 8

• AOP integration framework

• JDBC integration frameworkEJB integration framework

1 Các phiên bản của Spring MVC

1 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

1 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

Trang 9

– 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:

– 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:

Trang 10

7.1 Core Container:

- 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

Trang 11

- 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 annotation vào source code để hướng dẫn Spring nơi và 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 ném bởi vendor 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, OJB và iBatis SQL Maps

7.6 Spring Web module:

-Nằm 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 tuyệt vời 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ả 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 thử và test các 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

Trang 12

JSP là một view template mặc định "InternalResouceViewResolver" có thể được sử

dụng cho mục đích này

1. 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)

1.1.Thành phần của MVC

– Có 3 thành phần chính

○ 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

○ 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

○ View:

 Đáp ứng hiển thị theo yêu cầu

 Rút và xuất dữ liệu từ Model

1.1.Motivation for MVC

– Bảo trì dễ dàng hơn

○ Thay đổi logic kết nối ít có khả năng phá vỡ logic hiển thị

○ 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

○ Java thích hợp để tạo code logic kết nối

○ Đánh dấu hay ngôn ngữ mẫu phù hợp để tạo HTML

Trang 13

– Dễ kiểm tra

○ 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

○ Thực tế: ta có thể kiểm tra code bên ngoài servlet

1.1.MVC trong Spring

– Front Controller: servlet là các Controller riêng biệt đáp ứng một yêu cầu nà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

○ Các Controller riêng biệt có thể sử dụng để điều khiển cho nhiều URL khác

– 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

Trang 14

1 Kiến trúc lưu trữ dữ liệu trên Database(Data access with JDBC)

1.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

Khai báo các thông số và giá trị cung cấp tham số X

Thiết lập vòng lặp để chuyển đổi thông qua kết quả(nếu có) X

Trang 15

Đó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

○ JdbcTemplate

○ NamedParameterJdbcTemplate

○ SimpleJdbcTemplate

○ SimpleJdbcInsert and SimpleJdbcCall

○ 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

1 Kiến trúc ORM(Object Relationship Mapping)

1.1.Giới thiệu về ORM trong MVC

Trang 16

– 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à

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:

○ Dễ dàng kiểm tra Thay đổi cấu hình của SessionFactory Hibernate, JDBC

DataSource

○ Xử lý các ngoại lệ

○ Quản lý tài nguyên, tích hợp quản lý giao dịch

1.1.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ệ

Trang 17

II Các khái niệm chính của Spring:

- Các khái niệm chính của Spring là: IoC và Aspect Orient Programming Spring dựa

vào Depenecy injection của IoC Chúng ta không trực tiếp kết nối các component và

service lại với nhau trong code mà thông qua file cấu hình Một container thì chịu trách

nhiệm móc nối nó Khái niệm này thì tương tự với Declarative Management

1 Dependency Injection:

- Depedency injection là một pattern chịu trách nhiệm tạo đối tượng và các liên kết giữa

các đối tượng bị loại bỏ ra khỏi các đối tượng và chuyển đến cho factory quản lý

- Các đối tượng của ứng dụng không chịu trách nhiệm tìm kiếm các resource mà chúng

phụ thuộc Và vì thế nên sự phụ thuộc được đảo ngược vào trong các đối tượng

- Theo phương pháp này, các đối tượng có thể được rút trích thông qua Setter Injection

(các thuộc tính của Java-Beans) hoặc Constructor Injection (tham số của constructor)

Mỗi phương thức có thuận lợi và bất lợi riêng

- Bình thường trong Java bean, chúng ta sử dụng phương thức setter và getter để thiết

lập và lấy giá trị của thuộc tính như sau:

public class namebean {

- Chúng ta sẽ tạo một thể hiện của bean "namebean" (gọi là bean1) và thiết lập thuộc

tính: bean1.setName("Tom") Còn trong setter injection, chúng ta thiết lập thuộc tính

"name" trong subelement <property> của thẻ <bean> trong file cấu hình Spring như sau:

<bean id="bean1" class="namebean">

Trang 18

setName("Tom"); => tiến trình này được gọi là setter injection.

- Ví dụ về constructor injection, chúng ta sử dụng constructor với một tham số:

public class namebean {

- Chúng ta sẽ thiết lập thuộc tính "name" trong khi tạo thể hiện của bean "namebean"

như sau: namebean bean1 = new namebean("Tom");

- Ở đây chúng ta sử dụng element <constructor-arg> để thiết lập thuộc tính sử dụng

constructor injection như sau:

<bean id="bean1" class="namebean">

<constructor-arg>

<value>My Bean Value</value>

</constructor-arg>

</bean>

- Để thiết lập các thuộc tính tham chiếu đến bean khác - <ref>, subelement <property>

được sử dụng như sau:

<bean id="bean1" class="bean1impl">

Trang 19

2 Aspect-oriented Programming:

- Kỹ thuật lập trình đưa ra cách phân chia các yêu cầu của hệ thống Hệ thống được phân

ra thành một vài component đảm trách một chức năng xác định Bên cạnh các chức năng

cơ bản thì các dịch vụ (yêu cầu hệ thống) như logging, transaction management,

security phải có trong chương trình Các dịch vụ hệ thống này được gọi là 'cross-cutting

concern' - nghĩa là chúng cắt chéo qua nhiều component trong hệ thống AOP có khả

năng module hóa các service này và sau đó cung cấp đến các component và chúng ta có

thể tập trung vào yêu cầu chính (core concern) Trong Spring, lát cắt (aspect) được cắm

vào trong các đối tượng của XML file như các JavaBean Tiến trình này gọi là sự đan

xen (weaving)

- Container là khái niệm chính của Spring Để quản lý vòng đời và cấu hình các đối

tượng của ứng dụng Chúng ta có thể cấu hình mỗi bean nên được tạo như thế nào hoặc

làm thế nào để tạo một instance của bean hoặc làm thế nào kết hợp chúng lại Spring

không sử dụng các EJB container hạnh nặng Spring có 2 container phân biệt: Bean

Factory được định nghĩa bởi org.springframework beans.factory.BeanFactory là một

container đơn giản nhất, cung cấp hỗ trợ dependency injection Application context được

định nghĩa bởi org.springframework.context.ApplicationContext, cung cấp các service

của application framework

2.1 Bean Factory:

- Bean factory thì cài đặt factory design pattern và chức năng của nó là tạo và phân phát

các bean Bean factory biết về nhiều đối tượng trong ứng dụng, nó có thể tạo mối kết

hợp cho các đối tượng khi chúng được khởi tạo Điều này sẽ giảm bớt gánh nặng cho

bean và client

- Có một vài cài đặt của BeanFactory Một cái hữu ích nhất là

org.springframework.beans.factory.xml.XmlBeanFacto ry Nó sẽ load các bean dựa vào

định nghĩa trong XML file Để tạo một thể hiện của XmlBeanFactory, hãy chuyển vào

constuctor của nó một InputStream Resource này sẽ cung cấp XML cho factory

BeanFactory factory = new XmlBeanFactory(new FileInputStream("myBean.xml"));

=> dòng này bảo bean factory đọc định nghĩa bean từ XML file Định nghĩa bean bao

gồm mô tả bean và các thuộc tính của nó Nhưng bean factory vẫn chưa khởi tạo nó Để

rút trích một bean từ BeanFactory, hãy gọi phương thức getBean() Khi phương thức

Trang 20

getBean() được gọi, factory sẽ khởi tạo bean và bắt đầu thiết lập các thuộc tính của nó sử

dụng depedency injection

myBena bean1 = (myBean)factory.getBean("myBean");

2.2 Application Context:

- Trong khi Bean Factory được sử dụng cho các ứng dụng đơn giản, thì Application

Context là một container nâng cao của Spring Giống như BeanFactory, nó có thể được

sử dụng để load các định nghĩa bean, gắn các bean với nhau và phân phát các bean theo

yêu cầu

Nó cũng cung cấp:

1) giải quyết text message, bao gồm hỗ trợ internationlization

2) cách chung để load file resource

3) các sự kiện để bean được đăng ký như các trình lắng nghe

Có 3 cách sử dụng cài đặt Application Context:

1) ClassPathXmlApplicationContext: Nó load định nghĩa context từ XML file được

đặt trong classpath, xem các định nghĩa context như các tài nguyên của classpath

Application context thì được load từ classpath của ứng dụng như sau:

ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

2) FileSystemXmlApplicationContext: Nó load định nghĩa context từ XML file trong

từ hệ thống file Application Context được load từ hệ thống file như sau:

ApplicationContext context = new FileSystemXmlApplicationContext("bean.xml");

3) XmlWebApplicationContext: Nó sẽ load các định nghĩa context từ XML file trong

ứng dụng web

Spring thì nhẹ về cả kích cỡ và chi phí Toàn bộ framework có thể được phân phát trong

JAR file chỉ hơn 1.7MB Chi phí được yêu cầu bởi Spring thì không đáng kể Và Spring

không ràng buộc, ví dụ: các đối tượng trong ứng dụng Spring không phụ thuộc vào các

class của Spring

III Release info:

Trang 21

Spring framework được download ở trang http://www.springframework.org Trên đó có

2 file zip: một file có dependencies, một file thì không Spring framework với

dependencies thì lớn hơn và chứa tất cả thư viện phụ thuộc

Nội dung của phân phối "-with-dependencies" (~60 MB):

* "dist" chứa các file jar của bảng phân phối và một file nén chứa tất cả source code

* "docs" chứa tài liệu có định dạnh PDF, HTML và javadocs

* "lib" chứa tất cả thư viện cần để xây dựng framework hoặc chạy các ví dụ

* "src" chứa các file Java source của framework

* "mock" chứa các file Java source cho mock và test

* "test" chứa file java cho bộ test của Spring

* "tiger/src" chứa các file JDK-1.5-specific Java source cho framework

* "tiger/test" chứa các file JDK-1.5-specific Java source cho bộ test của Spring

* "aspectj/src" chứa tất cả file AspectJ-specific source cho framework

* "aspectj/test" chứa tất cả file AspectJ-specific source cho cho bộ test của Spring

* "samples" chứa các ứng dụng demo và chương trình giới thiệu

IV Spring Application:

Các bước tạo ứng dụng sử dụng Spring:

1 Một interface định nghĩa các chức năng

2 Một implementation chứa các thuộc tính, các phương thức settter và getter

3 Một file XML gọi là file cấu hình Spring

4 Chương trình client sử dụng chức năng trên

//1 Một interface định nghĩa các chức năng.

public interface Hello {

public String sayHello(String s);

}

//2 Một implementation chứa các thuộc tính, các phương thức settter và getter.

public class HelloImpl implements Hello{

private String greeting;

Trang 23

BeanFactory factory = new XmlBeanFactory(resource);

HelloImpl bean = (HelloImpl) factory.getBean("hello");

String hello = bean.sayHello("LooDong");

System.out.println(hello);

} catch (Exception e) {

e.printStackTrace();

} }

- Ở đây, HelloImpl cài đặt giao tiếp Hello Mặc dù không cần thiết phải dấu cài đặt phía

sau một giao tiếp HelloImpl có một thuộc tính greeting Thuộc tính này có thể được

thiết lập theo 2 cách: bằng phương thức setter hoặc bằng constructor File hello.xml khai

báo một thể hiện của HelloImpl trong container của Spring và cấu hình giá trị của thuộc

tính greeting là "Good Morning!"

- Root của file hello.xml là <beans> element - là root element của bất kỳ file cấu hình

nào của Spring Element <bean> được sử dụng để bảo Spring container về lớp và nó nên

được cấu hình như thế nào Ở đây, thuộc tính id là tên của interface và thuộc tính class

Trang 24

xác định tên lớp đầy đủ của bean.

- Trong <element> bean, element <property> được sử dụng để thiết lập thuộc tính, trong

trường hợp này là thuộc tính greeting Sử dụng <property>, chúng ta nói với Spring

container gọi phương thức setGreeting() Giá trị của greeting được định nghĩa trong

element <value>

- Container sẽ khởi tạo HelloImpl dựa vào định nghĩa XML như sau:

HelloImpl hello = new HelloImpl ();

hello.setGreeting("Good Morning! ");

- Tương tự, thuộc tính greeting có thể được thiết lập thông qua constructor có 1 tham số

của

HelloImpl như sau:

<bean id="hello" class=" HelloImpl">

<constructor-arg>

<value>Good Morning! </value>

</constructor-arg>

</bean>

- Bây giờ thì container khởi tạo HelloImpl dựa vào định nghĩa XML như sau:

HelloImpl hello = new HelloImpl("Good Morning ");

- Ở chương trình client, lớp BeanFactory được sử dụng là Spring container Sau đó

phương thức getBean() được gọi để lấy tham chiếu đến bean "hello" Với tham chiếu

này thì phương thức sayHello() được gọi

- Bước kế tiếp chúng ta sẽ xem làm thế nào để chạy chương trình này như một servlet

Đầu tiên copy spring.jar đến thư mục common\lib của Tomcat và khởi động tomcat

server Sau khi thiết lập classpath, tạo file HelloServlet.java như sau:

Trang 25

protected void doPost(HttpServletRequest request, HttpServletResponse

response) throws ServletException, IOException {

String name = request.getParameter("userName");

response.setContentType("text/html");

ClassPathResource resource = new ClassPathResource("hello.xml");

BeanFactory factory = new XmlBeanFactory(resource);

Hello bean = (Hello) factory.getBean("hello");

PrintWriter out = response.getWriter();

<form method="post" action="http://localhost:8080/springservlet/hello">

<input type="text" name="userName"/>

<input type="submit" value="sayHello"/>

</form>

</body>

</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<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

Trang 26

<display-name>springservlet</display-name>

<servlet>

<servlet-name>hello</servlet-name>

<servlet-class>HelloServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>hello</servlet-name>

<url-pattern>/hello</url-pattern>

– Bây giờ chúng ta sẽ vào tiến trình chính của bất kỳ ứng dụng enterprise nào: data

persistence Spring có framework data access riêng của nó Spring chia phần cố định

và tùy biến của tiến trình data access thành hai lớp phân biệt: Template và Callback

Template quản lý phần cố định của framework như data connection, quản lý tài

nguyên, điều khiển giao dịch Trong khi Callback định nghĩa các thứ được xác định

trong ứng dụng như tạo statement, móc nối tham số Lớp Template của Spring là

JdbcTemplate Một data source phải được cung cấp bên trong JdbcTemplate

- Một ví dụ về kết nối CSDL sử dụng JdbcTemplate như sau Ở đây chúng ta sử dụng

CSDL MySQL Sau khi tạo bảng user(name text, place text) trong CSDL test, chúng ta

tạo chương trình như sau:

1. Tạo interface DataConnection chứa hàm lấy về một dataSource để cung cấp cho

JdbcTemplate:

import javax.sql.DataSource;

public interface DataConnection {

public DataSource getDataSource();

}

Trang 27

2. Tạo cài đặt của interface đó chứa thuộc tính dataSource và các phương thức setter,

getter:

import javax.sql.DataSource;

public class DataConnectionImpl implements DataConnection{

private DataSource dataSource;

public DataSource getDataSource() {

protected void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

Trang 28

String name = request.getParameter("name");

String place = request.getParameter("place");

response.setContentType("text/html");

PrintWriter out = response.getWriter();

ClassPathResource resource = new ClassPathResource("applicationContext.xml");

BeanFactory factory = new XmlBeanFactory(resource);

DataConnection bean = (DataConnection) factory.getBean("dataConnection");

DataSource ds = bean.getDataSource();

try {

JdbcTemplate template = new JdbcTemplate(ds);

String sql = "insert into user values ('" + name + "','" + place+

Trang 29

</body>

</html>

5 Cấu hình bean “dataSource”:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<bean id="hello" class="HelloImpl">

<property name="greeting">

<value>Good Morning!</value>

</property>

</bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManager

DataSource">

<property name="driverClassName">

<value>com.mysql.jdbc.Driver</value>

</property>

<property name="url">

<value>jdbc:mysql://localhost:3306/test</value>

</property>

<property name="username">

<value>root</value>

</property>

<property name="password">

<value>root</value>

</property>

</bean>

<bean id="dataConnection" class="DataConnectionImpl">

<property name="dataSource">

<ref local="dataSource"/>

</property>

</bean>

</beans>

Trang 30

6 Cấu hình servlet:

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"

<servlet-name>data</servlet-name>

<servlet-class>DataConServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>data</servlet-name>

<url-pattern>/data</url-pattern>

- Để mapping các resource của Hibernate, cần tạo một thể hiện của SessionFactory,

LocalSessionFactoryBean thì được sử dụng cho mục đích này và các thuộc tính:

hibernateProperties, mappingResources và mappingDirectoryLocation phải được thiết

lập Giống như framework DAO của Spring, chúng ta có HibernateTemplate để tạo đối

tượng SessionFactory Để truy cập vào dữ liệu với HibernateTemplate, phương thức

execute(HibernateCallback) phải được sử dụng

- Tương tự như SessionFactory của hibernate, JDO có PersistenceManagerFactory Nó

được cấu hình bởi LocalPersistenceManagerFactoryBean JDOTemplate cũng để tạo

một đối tượng của PersistenceManagerFactory Để truy cập vào dữ liệu với

JDOTemplate, phương thức execute(JDOCallback) phải được sử dụng

Trang 31

V Web MVC FrameWork

1. Giới thiệu về Web MVC framework

– 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

Trang 32

– Phân chia rạch ròi 3 công việc business logic, presentation logic và navigation

logic

○ Model: chịu trách nhiệm đóng gói dữ liệu của ứng dụng

○ Views: có nhiệm vụ hiển thị thông tin trả về cho người dung

○ 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

○ Bạn có thể sử dụng bất kỳ đối tượng như là một lệnh hoặc form-backing

○ 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ở

○ Dữ liệu ràng buộc của Spring là rất linh động

1 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

Trang 33

– 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:

Trang 34

– 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

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ể

Trang 35

– 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):

Trang 36

– 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

Trang 37

Kiểu bean Giải thích

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

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:

○ 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

○ 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

Trang 38

○ 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ó

○ 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

○ 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

○ 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ề

1 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 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

1.1.Định nghĩa Controllers với @Controllers

Trang 39

1.2.Lập bản đồ các yêu cầu với @ RequestMapping

Trang 40

2 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

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

Ngày đăng: 12/04/2015, 14:14

HÌNH ẢNH LIÊN QUAN

Hình chúng trong WebApplicationContext này, cũng giống như bạn cấu hình bất kỳ - LẬP TRÌNH ỨNG DỤNG JAVA SE08 – SPRING
Hình ch úng trong WebApplicationContext này, cũng giống như bạn cấu hình bất kỳ (Trang 36)
Bảng Những thuộc tính của CookieLocaleResolver - LẬP TRÌNH ỨNG DỤNG JAVA SE08 – SPRING
ng Những thuộc tính của CookieLocaleResolver (Trang 50)
Bảng 15.5. Sự thi hành ThemeResolver - LẬP TRÌNH ỨNG DỤNG JAVA SE08 – SPRING
Bảng 15.5. Sự thi hành ThemeResolver (Trang 54)

TỪ KHÓA LIÊN QUAN

w