You are on page 1of 22

Spring MVC

Mc lc
I.

Spring Framework. ............................................................................................................................... 3


1.

Gii thiu. ......................................................................................................................................... 3

2.

Cc module chnh. ............................................................................................................................ 3

3.
II.

2.1.

Core Container. ......................................................................................................................... 4

2.2.

Spring Context/Application Context. ........................................................................................ 4

2.3.

Spring AOP (Aspect Oriented Programming). ......................................................................... 4

2.4.

Spring DAO. ............................................................................................................................. 5

2.5.

Spring ORM. ............................................................................................................................. 6

2.6.

Spring Web module. ................................................................................................................. 6

2.7.

Spring MVC Framework. ......................................................................................................... 6

L do s dng. .................................................................................................................................. 7
Spring Web MVC. ................................................................................................................................ 7

1.

M hnh MVC. .................................................................................................................................. 7


1.1.

Model (M hnh). ...................................................................................................................... 8

1.2.

View (khung nhn) : .................................................................................................................. 8

1.3.

Controller (B iu khin) : ...................................................................................................... 8

2.

Spring MVC. ..................................................................................................................................... 8

3.

Cc khi nim lin quan. ................................................................................................................... 9


3.1.

Inversion of Control Container (IoC container) : ...................................................................... 9

3.2.

Bean : ...................................................................................................................................... 10

3.3.

Dependency Injection (DI) : ................................................................................................... 10

3.3.1.

Setter Injection: ............................................................................................................... 12

3.3.2.

Constuctor injection: ....................................................................................................... 12

3.4.

Application Context : .............................................................................................................. 14


3.4.1.1. ClassPathXmlApplicationContext: ............................................................................. 14
3.4.1.2. FileSystemXmlApplicationContext: ........................................................................... 14
3.4.1.3. XmlWebApplicationContext: ..................................................................................... 15

4.

C ch x l Request-Respone. ...................................................................................................... 15
4.1.

Gii thch s lung d liu : ............................................................................................. 16

4.2.

Configuring DispatcherServlet : ............................................................................................. 16

4.3.

Configuring a context loader : ................................................................................................ 18

4.4.

Building the controller : .......................................................................................................... 19

4.5.

Introducing ModelAndView : ................................................................................................. 20

4.6.

Configuring the controller bean: ............................................................................................. 21

I.

Spring Framework.
1. Gii thiu.
Spring Framework, hay ngn hn l Spring, l mt framework m
ngun m c vit bng Java. N c xem nh l mt gii php
kin trc tt nht ca Java EE hin nay.
Theo thit k, b khung hnh ny gii phng lp trnh vin dng
Java, cho php h nhiu quyn t do hn.
ng thi cung cp mt gii php tin li, y dn chng bng
ti liu, d dng s dng, ph hp vi nhng thc hnh thng dng
trong cng ngh phn mm.
2. Cc module chnh.
Spring ng vai tr l tng business.

Spring c t chc thnh 7 modules :

2.1.

Core Container.
Core package l phn c bn nht ca framework,
cung cp nhng c tnh IoC (Inversion of Control:
Khung cha o ngc khng ch) v Dependency
Injection.

Khi nim c bn l BeanFactory - ci t factory


pattern cho php bn mc ni s ph thuc gia cc
i tng trong file cu hnh.

2.2.

Spring Context/Application Context.


Pha trn ca Core package l Context package - cung
cp cch truy cp i tng.
Context package kt tha cc c tnh t bean package
v thm vo chc nng a ngn ng (I18N), truyn s
kin, resource-loading,...

2.3.

Spring AOP (Aspect Oriented Programming).


4

Spring AOP module tch hp chc nng lp trnh


hng kha cnh vo Spring framework thng qua cu
hnh ca n. Spring AOP module cung cp cc dch v
qun l giao dch cho cc i tng trong bt k ng
dng no s dng Spring. Vi Spring AOP chng ta c
th tch hp declarative transaction management vo
trong ng dng m khng cn da vo EJB
component.
Spring AOP module cng a lp trnh metadata vo
trong Spring. S dng ci ny chng ta c th thm
annotation (ch thch) vo source code hng dn
Spring v lm th no lin h vi aspect (Kha cnh
khc).
2.4.

Spring DAO.
DAO package cung cp cho tng JDBC, b bt nhng
coding di dng ca JDBC v chuyn i m li c
xc nh bi database vendor. JDBC package cung cp
cch lp trnh tt nh declarative transaction
management.
Tng JDBC v DAO a ra mt cy phn cp
exception qun l kt ni n database, iu khin
exception v thng bo li c nm bi vendor ca
database. Tng exception n gin iu khin li v
gim khi lng code m chng ta cn vit nh m v
ng kt ni. Module ny cng cung cp cc dch v
qun l giao dch cho cc i tng trong ng dng
Spring.

2.5.

Spring ORM.
ORM package cung cp tng tch hp vi objectrelational mapping API bao gm: JDO, Hibernate,
iBatis.
S dng ORM package bn c th s dng tt c cc
object-relational mapping kt hp vi tt c cc
c tnh ca Spring nh declarative transaction
management.

2.6.

Spring Web module.


Spring Web package cung cp c tnh ca web nh:
chc nng file-upload, khi to IoC container s dng
trnh lng nghe serlvet v web-oriented application
context.
Nm trn application context module, cung cp
context cho cc ng dng web. Spring cng h tr tch
hp vi Struts, JSF v Webwork. Web module cng
lm gim bt cc cng vic iu khin nhiu request
v gn cc tham s ca request vo cc i tng
domain.

2.7.

Spring MVC Framework.


Spring Framework l mt ng dng m ngun m ph
bin cho Java EE pht trin d dng hn. N bao gm
mt container, mt framework cho cc thnh phn
qun l, v mt b cc snap-in dch v cho cc giao
din ngi dng web, giao dch,. Mt phn ca
Spring Framework l Spring Web MVC, mt m hnh
MVC m rng to cc ng dng web.

MVC Framework th ci t y c tnh ca MVC


pattern xy dng cc ng dng Web. MVC
framework th cu hnh thng qua giao din v cha
c mt s k thut view bao gm: JSP, Velocity,
Tiles v generation of PDF v Excel file. . Spring
MVC framework cung cp s phn bit r rng gia
domain model v web form.
3. L do s dng.
Tt c cc framework c tch hp rt tt vo Spring.
Hot ng rt tt khi p dng theo kin trc MVC.
S dng c ch plug-in.
Kt hp rt tt vi cc O/R (object-relational) Mapping frameworks
nh l Hibernate.
D Testing ng dng.
t phc tp hn so vi cc framework khc.
Cng ng ngi s dng rt nhiu, nhiu sch mi c xut bn.
II.

Spring Web MVC.


1. M hnh MVC.

1.1.

Model (M hnh).

M hnh gm cc lp java c nhim v:


Biu din data v cho php truy cp ti get v set data
trong (JAVABEAN), Thng th phn layer ny m phng 1
cch y i tng t th gii thc.
Nhn cc yu cu t khung nhn
Thi hnh cc yu cu (tnh ton, kt ni CSDL )
Tr v cc gi tr tnh ton theo yu cu ca Controller
1.2.

View (khung nhn) :


Bao gm cc m tng t nh JSP, HTML, CSS,
XML, Javascript, JSON hin th giao din ngi dng, cc
d liu tr v t Model thng qua Controller

1.3.

Controller (B iu khin) :
ng b ho gia Khung nhn v M hnh. Tc l vi mt trang
JSP ny th s tng ng vi lp java no x l n v ngc
li, kt qu s tr v trang jsp no.N ng vai tr iu tit gia
View v Model.
Nh vy, chng ta c th tch bit c cc m java ra khi m
html. Do vy, n gii quyt c cc kh khn nu ra trong
M hnh 1. Ngi thit k giao din v ngi lp trnh java c
th mang tnh cht c lp tng i.
Vic debug hay bo tr s d dng hn, vic thay i cc theme
ca trang web cng d dng hn

2. Spring MVC.
Framework Spring nh thng cha nh v h tr nhiu
framework v cc th vin. N cho php cc nh pht trin trn
v kt hp nhiu framework khi pht trin v trin khai cc ng
dng. Cc Spring MVC c nhng li th t Spring framework v
8

cung cp mt ln tt nht cho framework v hiu qu cho s pht


trin ca cc ng dng web.
Cc MVC Spring l mt framework pht trin web da trn cc
mu thit k MVC (Model View Controller). Cc tnh nng ca
framework Spring MVC l Pluggable cng ngh View v
Injection dch v vo iu khin.

3. Cc khi nim lin quan.


3.1.

Inversion of Control Container (IoC container) :

Hai package: org.springframework.beans v


org.springframework.context cung cp IoC container cho Spring
framework. Giao tip BeanFactory cung cp k thut cu hnh
nng cao, c kh nng qun l cc i tng.

Giao tip ApplicationContext k tha t BeanFactory v thm


mt vi chc nng khc nh tch hp vi c tnh Spring AOP,
truyn s kin, application context nh WebApplicationContext
s dng trong ng dng web.

Hiu chnh cc components ca chng trnh v qun l vng


i (lifecycle) ca cc i tng Java.

3.2.

Bean :
Cc i tng trong ng dng c qun l bi IoC container
c gi l cc bean. Mt bean th n gin l mt i tng
c khi to, phn pht v c qun l bi IoC container. S
ph thuc gia chng c phn nh trong configuration
metadata c s dng bi container.
Giao tip org.springframework.beans.factory.BeanFactory l IoC
container chu trch nhim cha, khi to, qun l v mc ni s
ph thuc gia cc bean.
Mt ci t (k tha) ca BeanFactory l XmlBeanFactory nhn XML configuration metadata v s dng n cu hnh
cho ng dng.
Configuration metadata c nh dng XML (hoc properties),
c s dng vit cc bean definitions cho cc bean m bn
mun IoC container qun l.
mc c bn nht th cu hnh IoC container phi cha t nht
mt bean m container phi qun l. Khi s dng XML-based
configuration metadata, cc bean ny c cu hnh nh mt
hoc nhiu element bn trong element. Cc bean ny tng ng
vi cc i tng c to trong ng dng.

3.3.

Dependency Injection (DI) :


Kim sot ng dng, Lin kt cc i tng li vi nhau.
Tt c thng tin ng dng c cu hnh trong mt file xml do
d d dng thay i , m rng ng dng nh l mt kin trc
plug-in.
10

i tng A to ra i tng B,C ph thuc vo A nhng khng


lin kt cht ch vi A.

Mt i tng A cha cc phng thc setter accept interfaces


to objects B and C. iu ny c th cng t c vi cc
hm trong i tng A chp nhn cc i tng B v C
L cc i tng nh ngha s ph thuc ca chng thng qua
tham s ca phng thc khi to (constructor) hoc cc thuc
tnh c thit lp trn th hin (instance) sau khi n c khi
to hoc tr v t phng thc factory. Sau l cng vic ca
11

container, n s o ngc s ph thuc khi n to bean. Do


n c tn l Inversion of Control (IoC).
C hai bin th chnh ca DI l: Setter Injection v Constructor
Injection.
3.3.1. Setter Injection:
Cho on code sau :
<beans>
<bean name="person" class="examples.spring.Person">
<property name="email">
<value>my@email.address</value>
</property>
</bean>
</beans>
on code trn tng ng vi on code sau :
Person person = new Person();
person.setEmail(my@email.address);
Khi to i tng Person v gn gi tr email cho n. c
nhn ra bi phng thc setter trn bean sau khi triu gi phng
thc khi to khng tham s hoc phng thc static factory
khng tham s khi to bean.
3.3.2. Constuctor injection:
c nhn ra bng cch triu gi mt phng thc khi to vi
mt s tham s.
Mt bin th khc thay th cho constructor l s dng phng
thc static factory tr v th hin ca i tng.

12

<beans>
<bean

name="fileDataProcessor

class="examples.spring.DataProcessor"
singleton="true">
<constructor-arg>
<ref bean="fileDataReader"/>
</constructor-arg>
</bean>
<bean

name="fileDataReader"

class="examples.spring.FileDataReader" singleton="true">
<constructor-arg>
<value>/data/file1.data</value>
</constructor-arg>
</bean>
</beans>
Gii thch on code trn :
FileDataReader fileDataReader = new
FileDataReader(/data/file1.data);

13

DataProcessor fileDataProcessor = new


DataProcessor(fileDataReader);
3.4.

Application Context :
Trong khi Bean Factory c s dng cho cc ng dng n
gin, th Application Context l mt container nng cao ca
Spring. Ging nh BeanFactory, n c th c s dng load
cc nh ngha bean, gn cc bean vi nhau v phn pht cc
bean theo yu cu.
N cng cung cp:
-

gii quyt text message, bao gm h tr internationlization.

cch chung load file resource.

cc s kin bean c ng k nh cc trnh lng nghe.

C 3 cch s dng ci t Application Context:


3.4.1.1.

ClassPathXmlApplicationContext:

o N load nh ngha context t XML file c t trong


classpath, xem cc nh ngha context nh cc ti nguyn ca
classpath. Application context th c load t classpath ca
ng dng nh sau:
ApplicationContext context = new
ClassPathXmlApplicationContext("bean.xml");
3.4.1.2.

FileSystemXmlApplicationContext:

o N load nh ngha context t XML file trong t h thng


file. Application Context c load t h thng file nh sau:
ApplicationContext context=new
FileSystemXmlApplicationContext("bean.xml");

14

3.4.1.3.

XmlWebApplicationContext:

o N s load cc nh ngha context t XML file trong ng


dng web.
4. C ch x l Request-Respone.

Cng ging nh cc java-base MVC FrameWork khc Spring


MVC cng phi requests thng qua mt front controller servlet.
Mt b front controller servlet i din duy nht chu trch
nhim v yu cu cc thnh phn khc ca mt ng dng thc
hin vic x l thc t. Trong trng hp ca Spring MVC,
DispatcherServlet l b iu khin pha trc.
Mt Request c gi bi DispatcherServlet n iu khin
(c chn thng qua mt bn x l). Mt khi iu khin kt
thc, yu cu sau c gi xem ( l la chn thng qua
ViewResolver ) lm cho u ra.

15

4.1.

Gii thch s lung d liu :


1.Request c gi n DispatcherServlet .
2.DispatcherServlet gi yu cu n Handler Mapping ( Mt bn
cu hnh URL ) xc nh controller no s x l yu cu
ny.
3.DispatcherServlet gi yu cu n Controller sau khi bit c
Controller no s x l yu cu. Nu yu cu cn truy xut c
s d liu th Controller s y nhim cho mt business logic hay
nhiu hn mt service Objects (MODEL) ly thng tin v gi
d liu v cho Controller lc ny Controller ng gi m hnh d
liu

v tn ca mt view s c ti ln thnh i tng

ModelAndView.
4.Gi ModelAndView c gi tr v DispatcherServlet.
5.DispatcherServlet gi gi ModelAndView cho ViewResolver
tm xem trang web (JSP) no s c load ln.
DispatcherServlet load trang web ln cng vi d liu ca n.

4.2.

Configuring DispatcherServlet :
DispatcherServlet ng vai tr nh tri tim ca Spring MVC.
Mt servlet c chc nng ging nh Spring MVCs front
controller. Ging nh bt k servlet no, DispatcherServlet phi
dc cu hnh trong web.xml file.

<servlet>
<servlet-name>roadrantz</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>

16

<load-on-startup>1</load-on-startup>
</servlet>
Theo mc nh, khi DispatcherServlet c np, n s ti cc ng
dng Spring context t file XML c tn da vo tn ca servlet.

Trong trng hp ny, v servlet c tn roadrantz, DispatcherServlet


s c gng ti cc ng dng context t mt file c tn roadrantzservlet.xml.
Sau , bn phi ch ra nhng g cc URL s c x l bi cc
DispatcherServlet.
Thm <servlet-mapping> sau y vo web.xml cho
DispatcherServlet x l tt c cc URL m kt thc bng
.html:
<servlet-mapping>
<servlet-name>roadrantz</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
Trong thc t, nn chia ng cnh ng dng ca bn qua lp ng
dng, nh th hin trong hnh sau.

17

Phn chia mt ng dng thnh cc lp ring bit sch s phn


chia trch nhim. lp An ninh (Security Layer) ng cht nhng
ng dng, lp web-layer tp trung vo tng tc ngi dng,
Service Layer tp trung vo business logic, v Persistence Layer
c lin quan n c s d liu.
4.3.

Configuring a context loader :


m bo rng tt c cc file cu hnh c np, bn s cn
phi cu hnh mt Context Loader trong tp tin web.xml ca
bn. Mt b Context Loader cu hnh Ngoi cc tp tin trong
DispatcherServlet. Vic ph bin nht Context Loader c s
dng l mt servlet listener gi l servlet ContextLoaderListener
c cu hnh trong web.xml nh sau:
<listener>
<listener-class>org.springframework.
web.context.ContextLoaderListener</listener-class>
</listener>
Vi ContextLoaderListener khi cu hnh, bn s cn phi ni cho
n v tr ca Spring cu hnh files ti. Nu khng quy nh
khc, cc bi cnh b np s tm mt file cu hnh Spring /
WEB-INF/applicationContext.xml. Nhng v tr ny khng thch
hp chia nh cc ng cnh ng dng trn lp ng dng, do
,

th

bn

mun

ghi

mc

nh

ny.

Bn c th ch nh mt hoc nhiu file cu hnh Spring cho b


np ng cnh ti , bng cch thit lp cc thng s
contextConfigLocation trong bi cnh servlet:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/roadrantz-service.xml
18

/WEB-INF/roadrantz-data.xml
/WEB-INF/roadrantz-security.xml
</param-value>
</context-param>
Cc tham s contextConfigLocation c quy nh nh mt danh
sch cc ng dn (lin quan n ng dng web gc). Khi cu
hnh y, b ti bi cnh s s dng contextConfigLocation
ti tp tin cu hnh ba bi cnh , mt cho Security Layer, mt cho
cc tng dch v(Service Layer), v mt cho cc lp d liu (data
layer).
DispatcherServlet by gi l cu hnh v sn sng gi yu cu
n lp ng dng web ca bn. Nhng lp web cha c
xy dng ! ng bn khon. Chng ti s xy dng nhiu lp
web trong chng ny. Hy bt u bng cch cm nhn c
mt ci nhn tng quanlm th no tt c cc mnh ca Spring
MVC c lp rp sn xut cc chc nng web.
4.4.

Building the controller :

HomePageController ly mt danh sch cc rants gn y


hin th trn trang ch

19

Trng hp Spring MVC iu khin khc nhau t mt servlet


hay mt hnh ng Struts l n cu hnh nh mt JavaBean ch
trong bi cnh ng dng Spring. iu ny c ngha l bn c th
tn dng y cc dependency injection (DI) v Spring AOP
vi mt controller class ging nh bn lm vi bt k Bean khc.

Trong trng hp ca HomePageController, DI c s dng


bao bc trong mt RantService . HomePageController delegates
trch nhim ly danh sch cc rants gn y cc RantService.

4.5.

Introducing ModelAndView :
Mt khi cc logic nghip v c hon thnh bi cc i
tng dch v, l thi gian cho b iu khin gi kt qu
tr li trnh duyt. Cc ModelAndView lp i din cho mt
20

khi nim quan trng trong Spring MVC. Trong thc t, mi iu


khin thc hin phng thc phi tr v ModelAndView.
Cc i tng ModelAndView c xy dng nh sau:
new ModelAndView("home", "rants", recentRants);
Hai thng s home v recentRants s c chuyn choView
. Hai thng s to thnh tn ca m hnh i tng mt tham s
th ba. Trong trng hp ny, danh sch rants trong bin
recentRants s c chuyn n View vi mt tn l rants.

4.6.

Configuring the controller bean:


By gi HomePageController c vit, l thi gian cu
hnh n trong DispatcherServlet contex ca tp tin cu hnh (
l roadrant-servlet.xml cho cc ng dng RoadRantz).
Cc on sau y ca XML cu hnh cho HomePageController.
<bean name="/home.htm"
class="com.roadrantz.mvc.HomePageController">
<property name="rantService" ref="rantService" />
</bean>

5. Truy xut d liu trong Spring MVC.


Spring cung cp mt template JDBC bn c th qun l nhng
kt ni ca bn.
Mt v d n gin bn c th kt ni n mt datasource :
ProductManagerDaoJdbc implements ProductManagerDao {
public void setDataSource(DataSource ds)
{

21

this.ds = ds;
}
Khng cn thay i code java khi thay i datasource :
<beans>
<bean

name="dataSource"

class="com.mysql.jdbc.jdbc2.optional.MysqlDataSource"
destroy-method="close">
<property name="url">
<value>jdbc:mysql://localhost/test</value>
</property>
<beans>
<bean id="prodManDao" class="db.ProductManagerDaoJdbc">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>

22

You might also like