You are on page 1of 51

TR

NG

I H C KHOA H C T

NHIN

KHOA CNG NGH THNG TIN

BO CO SEMINAR

CHUYN

JAVA

GV. Nguy n Hong Anh

TI

SPRING MVC

Thng tin nhm: MSSV 0841048 0841171 H v Tn Nguy n Thanh H i i n tho i 0974513040 Email thanhhaik5@gmail.com lenguyenthanhthan@gmail.com

L Nguy n Thanh Thn 0907730712

TP H Ch Minh, Thng 11 N m 2010

Bo Co Seminar- Spring MVC


M cL c
I. T quan v Spring Framework ................................ ................................ ................................ 4 1. Gi i thi u v Spring Framework ................................ ................................ ............................. 4 2. Spring v i Enterprise Java Bean ................................ ................................ ............................. 4 2.1. Spring ................................ ................................ ................................ ................................ 4 2.2. EJB (Enterprise Java Bean)................................ ................................ .............................. 4 2.3. So Snh Spring v EJB ................................ ................................ ................................ ..... 5 3. M c ch c a Spring ................................ ................................ ................................ ................ 6 4. Cc phi n b n c a Spring MVC ................................ ................................ ........................ 6 5. Yu c u v k thu t ................................ ................................ ................................ .............. 6 6. Yu c u ci 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 trc MVC(Model View- Controller) ................................ ................................ ............ 9 8.1. Thnh 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 trc l u tr d li u trn Database(Data access with JDBC) ................................ ..... 11 10.1. Gi i thi u v Spring Framework JDBC ................................ ................................ ....... 11 10.2. Ki m sot cc k t n i c s d li u ................................ ................................ ............... 12 11. Ki n trc 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 1. Gi i thi u v Web MVC framework ................................ ................................ ..................... 14 2. DispatcherServlet ................................ ................................ ................................ ................... 14 3. Implementing Controllers................................ ................................ ................................ ...... 18

0841048- 0841171

Trang 1

Bo Co Seminar- Spring MVC


3.1. nh ngh a Controllers v i @Controllers ................................ ................................ ...... 19 cc yu c u v i @ RequestMapping ................................ ............................ 19 3.2. L p b n

4. Handler Mapping ................................ ................................ ................................ ................... 20 5. Resolving views ................................ ................................ ................................ ...................... 23 5.1. Gi i quy t cc 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. Phn gi i Theme ................................ ................................ ................................ .............. 32 8. Springs 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 ln 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 12.1. mvc:annotation-driven ................................ ................................ ................................ .. 41 12.2. mvc:interceptors ................................ ................................ ................................ ............ 42 12.3. mvc:view-controller................................ ................................ ................................ ....... 43 12.4. mvc:resources ................................ ................................ ................................ ................ 43

0841048- 0841171

Trang 2

Bo Co Seminar- Spring MVC


12.5. mvc:default-servlet-handler ................................ ................................ .......................... 43 III. Demo HelloSpringMVC ................................ ................................ ................................ .......... 44 1. B 2. B 3. B 4. B 5. B IV. c 1: T o Project ................................ ................................ ................................ ............... 44 c 2: T o Service ................................ ................................ ................................ ............... 46 c 3: T o Controller ................................ ................................ ................................ .......... 46 c 4: T o View................................ ................................ ................................ ................... 48 c 5: C u hnh ................................ ................................ ................................ ................... 49 n Java L thuy t: Ch L n- Gia D ng ................................ ........................ 50

ng D ng:

V. Tham Kh o ................................ ................................ ................................ ............................... 50

0841048- 0841171

Trang 3

Bo Co Seminar- Spring MVC


I. T ng quan v Spring Framework 1. Gi i thi u v Spring Framework - Spri l t framework ng d ng m ngu n m ,

c gi i t i u vo n m 2002.

Rod Johnson a ra t ng ny t kinh nghi m lm vi c v i ki n trc J2EE. - Johnson vi t cu n sch v i tiu : J2EE Develoment Without Using EJB gi i thi u khi ni m trnh (lightweight container). V i l lu n:EJB th c gi tr c a n, nh ng khng ph i lc no c ng c n thi t v ph h p cho t t c cc ng d ng. - Tuy Spring Framework khng b t bu c ng i ta ph i tun theo m t m hnh l p trnh(programming model) c th no, song n lan truy n r ng ri trong c ng ng nh ng ng i vi t ch ng trnh dng Java, nh m t hnh th c ch y u thay th cho m hnh Enterprise JavaBean. Theo thi t k , b khung hnh ny gi i phng l p trnh vin dng Java, cho php h nhi u quy n t do h n, v ng th i cung c p m t gi i php ti n l i, y d n ch ng b ng ti li u, d dng s d ng, ph h p v i nh ng th c hnh thng d ng trong cng ngh ph n m m. - Bn c nh nh ng c tr ng n n t ng c a Spring Framework l nh ng ci c th dng c trong b t c m t ch ng trnh ng d ng Java no, r t nhi u cc m r ng v ti n b trong vi c ki n t o cc trnh ng d ng dnh cho n n t ng m ng web (web-based application) d a trn 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 chnh c th k trn v c gi i th ng m i cng nh n nh m t n n t ng ki n trc 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 khng ph i l m t k thu t persistence nh ng n cho php tch h p v i cc k thu t khc. EJB th t p trung vo k thu t persistence v by gi n c ng tc v i Hibernate, m t ORM t t nh t ngy nay. N ang d nh c ng tc v i m t k thu t ORM t t khc l JDO (cung c p cho Object Database). - Trong Spring, chng ta c th s d ng Java Bean rt trch cc th m lc tr c ch c th v i EJB. M c tiu chnh c a Spring l n gi n vi c pht tri n J2EE v testing. 2.2. EJB (Enterprise Java Bean) - EJB c xu t hi n vo 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 khng c k thu t no ng k so v i EJB v m c t ng cc c tnh c a n.

0841048- 0841171

Trang 4

Bo Co Seminar- Spring MVC


- Theo Rod Johnson th EJB khng ph c t p nh ng n c g ng cung c p cch gi i quy t cho cc v n ph c t p. - EJB c pht tri n chnh cho cc giao d ch, i t ng c phn pht trn my khc. Nh ng m t s enterprise project khng c m c ph c t p v v n s d ng EJB v th m ch cc ng d ng n gi n tr nn ph c t p. Trong tr ng h p ny th Spring l m t s ch n l a. - T lc Spring h tr cc d ch v m c enterprise, th n tuyn b l m t s l a ch n khc 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 khng lm m i th nh ng n h tr nh ng k thu t t t nh t cho m i yu c u.Thay v CMP(Circuits Multi-Projects) & BMP, n h tr m t vi k thu t persistence khc nh JDO, Hiberbate v OJB. Cc ORM tool ny th c nhi u kh n ng ci 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 Snh Spring v EJB - Spring s d ng Acegi, m t security framework m ngu n m v cung c p khai bo security thng qua c u hnh Spring ho c class metadata, trong khi EJB khai bo security c c u hnh thng qua m t deployment. - Spring cung c p proxying cho RM (k thu t remoting c bi t nh Burlap) JAXRPC & 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 bo transaction nh EJB. H n n a, Spring cn cung c p khai bo th t c rollback cho cc ph ng th c v exception. - EJB th c ng v c g ng lm m i th , m t vi cng vi c t t nh ng m t s th khng. Spring ch s d ng Java Bean v thng qua m t s k thu t c bi t cung c p nhi u ch c n ng nh EJB, b ng cch tch h p v i m t s k thu t open source khc. - Sping cung c p m t vi thu n l i h n EJB nh : o Testing d dng h n - khng c n kh i ng EJB container test. o Spring d a vo quy c c a chu n Java Bean, nn cc l p trnh vin d dng lm vi c v i n.
0841048- 0841171 Trang 5

Bo Co Seminar- Spring MVC


o Spring s d ng AOP(Aspect-Oriented Programming), m hnh h u ch

sung vo OOP truy n th ng v b o ton tnh nguyn 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 thnh m t framework ng d ng. Cc framework ph bi n khc nh Struts, Tapestry, JSF,...l cc framework t t cho t ng web nh ng khi chng ta s d ng cc framework ny, chng ta ph i cung c p thm framework khc gi i quy t t ng enterprise m tch h p t t v i cc framework ny. Spring lm gi m b t v n ny b ng cch cung c p m t framework ton 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. Cc phin b n c a Spring MVC - Thng 10/2006: pht hnh Spring 2.0 - Thng 11/2007: pht hnh Spring 2.5 - Hi n t i: Spring 3.0 - Download: - Document: 5. Yu c u v k thu t tri n khai ng d ng web s d ng Spring framework c n ci t PHP 5.1.0 tr ln - Hi u r ph ng php l p trnh h ng i t ng(OOP) v y l m t framework c thi t k theo ph ng php h - Hi u r v m hnh MVC ng it ng thu n ty.

6. Yu c u ci t - Operating System: Windows 7 - NetBeans IDE: 6.9 ho c 6.9.1, phin b n Java - Java Development Kit(JDK) Phin b n 6 - GlassFish Server Edition ngu n m 3.0.2, yu c u JDK 6 - PHP: 5.3.0 - My ch c s d li u MYSQL: 5.1.3 - Spring Framework 3.5 7. Module trong Spring Framework

0841048- 0841171

Trang 6

Bo Co Seminar- Spring MVC


- Spring Framework g m c quy m c a 20 modules, c chia thnh cc nhm Core Container, Data Access/Intergration, Web, AOP(Aspect Oriented Programing), Instrumentation, and Test nh m hnh d i y:

- Spring c ng cung c p module tch h p v i O/R tool nh

Hibernate v JDO.

Spring c th c xem nh m t ki n trc ch a 7 module. Ch c n ng c a m i thnh ph n nh sau:

0841048- 0841171

Trang 7

Bo Co Seminar- Spring MVC

7.1. Spring Core Container - Core container cung c p ch c n ng c b n c a Spring. Thnh ph n chnh c a n l Bean Factory, m t ci 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 hnh cung c p thng tin ng c nh c a Spring. Spring context cung c p cc service nh JNDI access, EJB integration, e-mail, internalization, validation, v scheduling functionality. 7.3. Spring AOP(Aspect- Oriented) - Spring AOP module tch h p ch c n ng l p trnh h ng kha c nh vo Spring framework thng qua c u hnh c a n. Spring AOP module cung c p cc d ch v qu n l giao d ch cho cc i t ng trong b t k ng d ng no s d ng Spring. V i Spring AOP chng ta c th tch h p declarative transaction management vo trong ng d ng m khng c n d a vo EJB component. - Spring AOP module c ng a l p trnh metadat a vo trong Spring. S d ng ci ny chng ta c th thm ch thch vo source code h ng d n Spring lm th no lin h v i aspect. 7.4. Spring DAO - T ng JDBC v DAO a ra m t cy phn c p exception qu n l k t n i database, i u khi n exception v thng bo l i c a database. T ng exception
0841048- 0841171

n n

Trang 8

Bo Co Seminar- Spring MVC


gi n i u khi n l i v gi m kh i l ng code m chng ta c n vi t nh m v ng k t n i. Module ny c ng cung c p cc d ch v qu n l giao d ch cho cc i t ng trong ng d ng Spring. 7.5. Spring ORM - Spring c th tch h p v i m t vi 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 - Trn application context module, cung c p context cho cc ng d ng web. Spring c ng h tr tch h p v i Struts, JSF v Webwork. Web module c ng lm gi m b t cc cng vi c i u khi n nhi u request v g n cc tham s c a request vo cc i t ng domain. 7.7. Spring MVC Framework - MVC Framework th ci t y c tnh c a MVC pattern xy d ng cc ng d ng Web. MVC framework th c u hnh thng 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 fi le. - 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 lng tng i chi u nh ng i m m nh v x u c a t t c chng. M i khi h ch n m t k thu t v b t u ci t, th sau n u h mu n thay i m t k thu t khc th r t kh. Nh ng Spring a ra cc module cho t t c cc k thu t trn, v r t n gi n thay i file c u hnh. - V i ph ng php ny, n c kh n ng cho c team v test th t t c cc hnh th c trn v xem nh h ng cng 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 ny. 8. Ki n trc MVC(Model View- Controller) - Phn nh r rng cc b c k t n i, chuy n h ng v logic hi n th - Ch ng minh c ch xy d ng web t ng l p(Web- tier) 8.1. Thnh ph n c a MVC - C 3 thnh ph n chnh o Controller: qu n l logic chuy n h ng v t cung c p t logic k t n i. o Model:  L l p gi a Controller v View.
0841048- 0841171

ng tc v i cc d ch v

Trang 9

Bo Co Seminar- Spring MVC


 N i ch a d li u c n x l v  N i nh c c a Controller. o View:  p ng hi n th theo yu c u  Rt v xu t d li u t Model 8.2. Motivation for MVC - B o tr d dng 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 lm vi c nhm - Gip Developers c th ch tr ng nhi u h n n vi c pht tri n code lin t c, m khng c n lo l ng n vi c ph v cc th hi n ban u. - Gip Designers c th ch tr ng nhi u h n vo vi c xy d ng giao di n sao cho ti n d ng v b t m t m khng c n lo l ng v code Java. - S d ng cng c t t nh t cho cng vi c o Java thch h p t o code logic k t n i o nh d u hay ngn ng m u ph h p t o HTML - D ki m tra
o Logic k t n i v chuy n h

a ln View.

ng c phn cch r rng v i logic hi n th , ngh a l c th p d ng nh ng th nghi m ring bi t. o Th c t : ta c th ki m tra code bn ngoi servlet

8.3. MVC trong Spring - Front Controller: servlet l cc Controller ring bi t p ng m t yu c u no . o Ch ng minh m hnh trong Struts v Core J2EE Patterns - Yu c u nh tuy n l hon ton i u khi n b i Front Controller
o Cc Controller ring bi t c th s d ng

i u khi n cho nhi u URL khc

nhau. - Controller l POJOs - Controller c l qu n l tr c ti p gi ng nh b t k Bean khc trong Spring ApplicationContext 9. C ch Validation - Validation s d ng giao di n Springs Validator xc nh n bo co cc l i xc th c cho Errorobject. - V d : xem xt m t i t ng d li u nh : it ng, ch ng th c,

0841048- 0841171

Trang 10

Bo Co Seminar- Spring MVC

- Cung c p cc hnh vi xc nh n cho l p Person b ng cch 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 trc l u tr d li u trn 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 cc chu i hnh ng c n u trong b ng sau. B ng ny cho th y nh ng action Spring quan tm Action Xc Xc nh thng s k t n i X X X X X X X
Trang 11

Spring

You X

M cc k t n i nh cc cu l nh SQL Khai bo cc thng s v gi tr cung c p tham s Chu n b v th c hi n cc statement Thi t l p vng l p chuy n i thng qua k t qu (n u c)

Lm vi c cho m i l n l p Quy trnh cc ngo i l


0841048- 0841171

Bo Co Seminar- Spring MVC


X l giao d ch ng k t n i bo co v statement v resultset - Cc cch ti p c n truy c p c s d li u JDBC o JdbcTemplate o NamedParameterJdbcTemplate
o SimpleJdbcTemplate o SimpleJdbcInsert and SimpleJdbcCall

X X

Objects including MappingSqlQuery, SqlUpdate and StoredProcedure - Gi phn c p: Khung JDBC tr u t ng c a Spring Framework bao g m b n gi khc 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

o RDBMS

10.2. Ki m sot cc k t n i c s d li u - DataSource - DataSourceUtils - SmartDataSource - AbstractDataSource - SingleConnectionDataSource - DriverManagerDataSource - TransactionAwareDataSourceProxy - DataSourceTransactionManager - NativeJdbExtractor 11. Ki n trc ORM(Object Relationship Mapping) 11.1. Gi i thi u v ORM trong MVC - Spring Framework h tr tch h p v i Hibernate, Java Persistence API (JPA), Java Data Object v iBATIS SQL Maps dnh cho qu n l ti nguyn, 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 tin h tr . - C th c u hnh - t t c cc tnh n ng h tr cho O / R ( i t ng quan h ) cc cng c l p mapping thng qua Dependency Injection. - Spring thm nh ng c i ti n ng k cho s l a ch n cc l p ORM khi t o truy c p d li u ng d ng. C th t n d ng cng nhi u cc h tr h i nh p nh mu n
0841048- 0841171 Trang 12

Bo Co Seminar- Spring MVC


v c th so snh. S d ng nhi u h tr c a ORM nh l th vi n, b t k cng ngh b i n c thi t k nh m t t p h p cc JavaBeans c th ti s d ng. ORM trong m t container IoC Spring t o i u ki n c u hnh v tri n khai. - L i ch c a vi c s d ng Spring Framework t o ra DAO ORM: o D dng ki m tra. Thay i c u hnh c a SessionFactory Hibernate, JDBC DataSource. o X l cc ngo i l o Qu n l ti nguyn, tch h p qu n l giao d ch. 11.2. General ORM integration considerations - M c tiu c a Springs ORM intergration l l p ng d ng r rng v i b t k truy c p d li u v giao d ch cng ngh . Khng c d ch v business d a vo vi c truy c p d li u ho c chi n l c giao d ch. - T t c cc tnh n ng truy c p d li u c nhn c s d ng ring nh ng tch h p v i Spring, cung c p cc c u hnh d a trn XML v tham chi u cho 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, phn gi i trn 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 lm th no x l handle the persistence c a cc l p ngo i l . II. Web MVC FrameWork

0841048- 0841171

Trang 13

Bo Co Seminar- Spring MVC

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 thng i p yu c u x l v i cc c u hnh handler mappings, view resolution, local and theme resolution, h tr uploading files. - Vi c x l m c nh l d a trn 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, cc @Controller i u khi n c ch c ng cho php b n t o cc trang web RESTful Web v ng d ng, thng qua cc ch thch @PathVariable v cc tnh n ng khc. - Phn chia r ch ri 3 cng vi c business logic, presentation logic v navigation logic.
o Model: ch u trch nhi m ng gi d li u c a ng d ng o Views: c nhi m v hi n th thng tin tr v cho ng o Controllers: ch u trch nhi m nh n request t ng

i dung i dung v g i cc d ch v

bn 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 khng 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 rng bu c c a Spring l r t linh

ng

2. DispatcherServlet

0841048- 0841171

Trang 14

Bo Co Seminar- Spring MVC


- Spring framework web MVC c ng gi ng nh nhi u web MVC framework khc yu c u i u khi n xung quanh m t servlet chnh, dispatches yu c u t i controller v cc ch c n ng khc t o i u ki n pht tri n ng d ng web. - Vi c x l yu c u cng vi c c a Spring web MVC DispatcherServlet ho trong m hnh sau. c minh

- 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 cc request t Browser. i u khi n lu ng x l v trung chuy n gi a cc thnh ph n trong MVC. c khai bo 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 cch s d ng m t nh x URL trong file web.xml nh nhau. Nh v d d i y:

0841048- 0841171

Trang 15

Bo Co Seminar- Spring MVC

- Trong v d trn, t t c cc yu c u k t thc b ng form s c x l b i cc DispatcherServlet. i u ny ch l b c u tin trong vi c thi t l p Spring Web MVC. By gi b n c n ph i c u hnh cc bean khc nhau c s d ng b i cc Spring Web MVC framework. - Trong khun kh Web MVC, m i DispatcherServlet WebApplicationContext c a ring mnh, m th a h ng t t c cc bean c xc 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 hnh cho m t t p tin c tn [Tn servlet-]-servlet.xml trong th m c WEB-INF c a ng d ng web c a b n v t o ra cc h t c xc nh , tr ng cc nh ngh a c a b t k h t c xc

0841048- 0841171

Trang 16

Bo Co Seminar- Spring MVC


nh v i cng m t tn trong scope.Consider c u hnh DispatcherServlet servlet sau y(trong cc file web.xml):

- V i c u hnh servlet trn 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 ny s ch a t t c cc thnh ph n c a b n Spring Web MVC-c th (bean). B n c th thay i v tr chnh xc c a t p tin c u hnh thng 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 thm m t s tnh n ng b sung c n thi t cho cc ng d ng web. N khc v i m t ApplicationContext bnh th ng ch n c kh n ng gi i quy t cc ch (theme)v n bi t n l servlet lin quan .Cc WebApplicationContext l rng bu c trong ServletContext, v b ng cch s d ng ph ng php t nh trn l p RequestContextUtils b n lun c th tm cc WebApplicationContext n u b n c n truy c p vo n. - The Spring DispatcherServlet s d ng bean c bi t x l yu c u v a ra cc quan i m thch h p. Bean l m t ph n c a Spring Framework. B n c th c u hnh chng trong WebApplicationContext ny, c ng gi ng nh b n c u hnh b t k bean khc. Tuy nhin, i v i h u h t cc lo i bean, gi tr m c nh c cung c p ban u b n khng c n ph i c u hnh chng. Nh ng bean ny c m t trong B ng sau y. - Bean trong WebApplicationContext Ki u bean controllers handler mappings view resolvers locale resolver
0841048- 0841171

Gi i thch Form C c a MVC X l vi c th c hi n m t danh sch cc b vi x l tr c v sau x l v controller m s c th c thi. Gi i quy t name view n view M t locale resolver l m t thnh ph n
Trang 17

Bo Co Seminar- Spring MVC


c kh n ng gi i quy t cc locale a client ang s d ng, c th cung c p cho view. M t Theme resolver c kh n ng gi i quy t cc theme ng d ng web c a b n c th s d ng. C ch c n ng x l file uploads t HTML. C ch c n ng khc l b n (map) xem ho c th c hi n chc n ng khc ph c t p h n.

Theme resolver multipart file resolver handler exception resolvers

- Sau khi b n thi t l p m t DispatcherServlet, v yu c u n DispatcherServlet c th , cc DispatcherServlet b t u x l yu c u nh sau: o WebApplicationContext l tm ki m v rng bu c trong cc yu c u nh l m t thu c tnh c controller v cc y u t khc trong qu trnh ny c th s d ng. l b rng bu c b i m c nh theo kho DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE. cho php cc y u t trong qu trnh gi i quy t cc locale s d ng khi x l yu c u (rendering the view, preparing data, and so on). N u b n khng c n ph i gi i quy t cc locale. o Cc theme c ngh a v gi i quy t yu c u cho cc y u t nh view xc nh theme s d ng. N u b n khng s d ng cc 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, yu c u c ki m tra cho multiparts, n u multiparts c tm th y, yu c u c bao b c trong m t MultipartHttpServletRequest ch bi n ti p b i cc y u t khc trong qu trnh ny. o M t b x l thch h p l tm ki m. N u x l c tm th y, cc dy chuy n th c hi n lin 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 khng c tr l i nn view c ng khng c tr v . 3. Implementing Controllers - Controller cung c p truy c p vo cc ng d ng m b n th ng xc nh thng qua m t service interface. Controller i u khi n ng i dng nh p vo v chuy n qua model v cu i cng ng i dng s vo view xem l i. Spring th c hi n controller m t cch r t tr u t ng cho php b n t o ra m t lo t cc controller m i.
0841048- 0841171 Trang 18

o Cc locale resolver gi i quy t yu c u

Bo Co Seminar- Spring MVC


- Spring 2.5 gi i thi u m t m hnh l p trnh model t MVC controllers c s d ng cc ch thch nh @RequestMapping, @RequestParam, @ModelAttribute. S h tr ny c s n cho c hai Servlet MVC v Portlet MVC. Controller th c hi n theo ki u ny khng c n m r ng cc l p c s c th ho c cc giao di n c th . H n n a, h th ng khng c ph thu c tr c ti p trn Servlet ho c Portlet API, m c d b n c th d dng c u hnh truy c p n cc 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 khng yu c u b n m r ng cc l p c s controllers ho c tham kh o cc API Servlet. Tuy nhin, b n v n c th tham kh o cc tnh n ng Servlet-c th n u b n c n. - Cc @Controllers ho t ng nh m t khun m u cho l p, n ch ra vai tr c a mnh. Dispatcher s qut cc l p cho cc methods v detects @ RequestMapping annotations. - B n c th nh ngh a c r rng bean controllers. S d ng m t nh ngh a tiu chu n bean Spring. Tuy nhin cc i u khi n @controllers c ng cho php t ng pht hi n ph h p v i h tr chung cho s . kch ho t tnh n ng t ng pht hi n cc controllers b n c thm thnh ph n scan c u hnh c a b n. S d ng l c Spring nh trong cc o n m XML sau: -

3.2. L p b n cc yu c u v i @ RequestMapping - B n c th s d ng cc ch thch nh l ng d n c a b n . Thng th ng th cc b n s c m t ch thch c th ho c l m t ng d n m u cho m t form controllers, v i cc ph ng th c nh l GET/POST ho c cc Http request parameters.
0841048- 0841171 Trang 19

Bo Co Seminar- Spring MVC

4. Handler Mapping - Trong cc phin b n tr c c a Spring, ng i dng c yu c u xc nh HanderMappings trong cc ng d ng web, yu c u mapping x l web thch h p. V i s gi i thi u Spring 2.5, DispatcherServlet cho php DefaultAnnotationHandlerMapping, tm ki m @RequestMapping gi i thch trn @Controllers. Bnh th ng, b n khng c n ph i thay i cc mapping m c nh, tr khi b n c n thay i cc gi tr c a thu c tnh m c nh. Cc thu c tnh l: - interceptors: danh sch c a ch c n ng b ch n s d ng, HandlerInterceptors c th o lu n cc ph n Interceptingrequests-the HandlerInterceptorinterface. - defaultHandler: quy n i u khi n c m c nh s d ng, khi mapping controller khng d n t i k t qu tm ki m t ng ng. - order: d a vo gi tr c a thu c tnh(nh trong giao di n org.springframework.core.Ordered) - alwaysUseFullPath(lun s d ng ng d n tuy t i): n u ng th Spring s d ng ng d n tuy t i bn trong cc servlet hi n t i ty theo tm ki m thch h p c a i u khi n. N u sai(m c nh) ng d n bn trong cc mappingservlet hi n t i c s d ng. V d : n u b n servlet ang c s d ng /testing/* v

0841048- 0841171

Trang 20

Bo Co Seminar- Spring MVC


lun l ng d n tuy t i, thu c tnh s lun ng th s d ng /testing/viewPage.html. Ng c l i n u thu c tnh l sai, s d ng /viewPage.html. - urlDecode: m c nh l ng v i Spring 2.5. N u b n so snh gi a cc ng d n c m ha, thi t l p ny s sai. Tuy nhin, HttpServletRequest lun lun th y nhi u ng i d ng gi i m. - lazyInitHandlers: cho php kh i t o c a b x l lazyInitHanders. Cc gi tr ny m c nh l sai. - Ch : Cc alwaysUseFullPath, urlDecode, v lazyInitHandlers l thu c tnh duy nh t, c ch a s n cc l p con c a org.springframework.web.servlet.handler.AbstractUrlHandlerMapping. V d sau ch ra lm sao ghi ln cc mapping m c nh v thm m t interceptor - Ch n yu 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 cc ch c n ng c th v i cc yu c u nh t nh. - Interceptors t t i cc mapping x l ph i c th c hi n HandlerInterceptor t org.springframework.web.servlet. Giao di n ny xc nh ba ph ng th c: o M t l g i tr c khi x l th c t c th c thi c g i sau khi x l c th c thi o Ba l g i khi yu c u hon thnh hon t t. Ba ph ng th c cung c p s linh ho t, hon t t cc ti n x l v sau x l.
o Hai l

- preHandle(..) ph ng th c tr v gi tr Boolean. B n c th s d ng ph ng th c ny thot ho c ti p t c th c hi n chu i i u khi n. Khi ph ng th c ny 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 thch h p v khng ti p t c th c hi n chu i interceptors - V d sau nh ngh a m t nh x x l m cc mapping yu c u ph h p v i m u URL /*.form v /*.view vo m t controller c bi t, editAccountFormController. M t interceptor c thm vo ch n cc yu c u ny v reroutes chuy n ng i dng n m t trang c th n u th i gian khng gi a 9a.m v 6 a.m.

0841048- 0841171

Trang 21

Bo Co Seminar- Spring MVC

-B t c yu c u x l no c a mapping b ch n b i cc TimeBasedAccessInterceptor. N u th i gian hi n t i n m ngoi th i gianth c thi, ng i dng s c chuy n h ng n m t t p tin HTML t nh, c n i dung thng bo: b n ch c th truy c p vo cc trang web trong th i gian quy nh.

0841048- 0841171

Trang 22

Bo Co Seminar- Spring MVC


- Nh cc b n c th th y, Spring chuy n i l p HandlerInterceptorAdapter lm cho n d dng 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 cch g i cc view. Spring cung c p view, nh ng b phn tch cho php b n tr l i model b ng trnh duy t khng c nh ng cng ngh c bi t. Ngoi ra Spring cho php x d ng JSPs, template velocity v XSLT view. - Hai giao di n m quan tr ng i v i cch 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 yu c u c a handler t i m t trong nh ng view. 5.1. Gi i quy t cc view b ng giao di n ViewResolver - Nh th o lu n trn, nh ng Implementing Controllers m i ph ng php handler trong i u khi n Spring Web MVC cc controller ph i gi i quy t t i name c a view r rng(b ng vi c tr l i m t chu i, view hay ModelAndView) hay tuy t i(d a vo nh ng quy c). Views trong Spring c g i b i tn view v gi i quy t b i view resolver . Spring a n kh nhi u cch gi i quy t. View resolvers ViewResolver AbstractCachingViewResolver Description View tr u t ng gi i quy t b i cc caches views. Th ng v i cc views c n chu n b tr c khi s d ng. M r ng cc view ny b ng cch cung c p caching. Thi hnh c a ViewResolver l ch p nh n c u hnh c vi t XML v i cng DTD(Document Type Definitions) l Springs XML bean factories. M c nh c u hnh file l /WEB-INF/views.xml. S thi hnh c a ViewResolver s s d ng nh ng nh ngh a bean trong ResourceBundle, c ch r rng b i tn. i n hnh, b n nh ngh bundle trong thu c tnh, v tr trong ng d n l p. M c nh tn file l views.properties. Giao di n ViewResolver th c thi n gi n, a ra nh ng quy t nh tr c ti p c a tn view logic t i URLs ngoi nh ngh a r rng c a mapping. i u ny l ph h p v i s logic c a tn, c a cc ti nguyn view m khng r c r i. Thu n l i cho l p con c a
Trang 23

XmlViewResolver

ResourceBundleViewResolver

UrlBasedViewResolver

InternalResourceViewResourcer
0841048- 0841171

Bo Co Semi

r Spri

MVC

UrlBasedViewResolver h tr InternalResourceView (hi u ng, Servlets, JSPs) v cc l p con nh JstlView v TilesView. B n c th ch nh l p view cho t t c cc quan i m c t o ra b ng cch gi i quy t n v i setViewClass(..) VelocityViewResolver/ Thu n ti n l p con c a FreeMarkerViewResolver UrlBasedViewResolver h tr VelocityView (hi u ng, t c c a templates) ho c FreeMaKerView, ty ch nh v i cc l p con c a chng. ContentNegotiatingViewResolver Th c thi cc giao di n ViewResolver, gi i quy t d a trn tn ile yu c u ho c ch p nh n tiu . - V d , v i JSP l m t cng ngh view, b n c th s d ng UrlBasedViewResolver. Ci ny s gi i quy t name view t m t URL v yu c u t handler cho cc RequestDispatcher tr l i trn view.

- Khi quay v ki m tra v i tn h p l, view ny chuy n ti p gi i quy t cc yu c u cho RequestDispatcher , sau s g i yu c u n / EB-INF/jsp/test.jsp - Khi b n k t h p cc cng ngh view khc trn ng d ng web, b n c th s d ng ResourceBundleViewResolver:

- Cc ResourceBundleViewResolver ki m tra vi c ResourceBundle xc

nh b i

cc basename v t ng view n l cch h tr gi i quy t, n s d ng cc gi tr c a thu c tnh [viewname]. (class) l l p view v gi tr c a thu c tnh [viewname].url l view url. C th xc nh m t view parent t t t c cc view trong thu c tnh ile m r ng. B ng cch ny, b n c th xc nh c m t class de ault view.

0841048- 0841171

Tr

24

Bo Co Semi

r- Spri

MVC

- Ch : Cc l p con c a AbstractCachingViewResolver, cache vi w s gi i quy t e tr ng h p ny. Cache c i thi n hi u su t c a cc cng ngh view nh t nh. N c th t t b nh cache b ng cch thi t l p cc thu c tnh cache sai. H n n a, n u b n ph i lm 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 ViewRe olver - Spring h tr a cch gi i quy t View. B n c th gi i quy t chu i, v d ghi

cc ph

ng th c view

c bi t ty t ng tr

ng h p nh t

nh.

Trong v d sau, cc chu i c a view c hai cch gi i quy t, m t l InternalResourceViewResolver, lun t ng nh v nh l gi i quy t cu i cng trong chu i, v XmlViewResolver xc nh cc view Excel. Cc view Excel khng ch tr b i InternalResourceViewResolver.

- N u cch gi i quy t r rng khng cho ra k t qu m t view, Spring s xem xt cch gi i quy t khc. N u gi i quy t thm view t n t i, Spring ti p t c ki m tra chng cho n khi c gi i quy t. N u khng c cch 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 khng c tm th y. Khng ph i t t c cc cch gi i quy t u lm c i u ny, tuy nhin, b i trong m t s tr ng h p, vi c gi i quy t n gi n l khng th pht hi n c ho c khng th y t n t i. V d : InternalResourceViewResolver s d ng RequestDispatcher bn trong, v l cch duy nh t tm hi u xem JSP l t n t i, nh ng th c thi ny ch c th th c hi n m t l n. T ng t c ng cho VelocityViewResolver v m t s cch khc. 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 khc l cu i cng,
0841048- 0841171 Tr 25

Bo Co Seminar- Spring MVC


k t qu trong chu i khng c ki m tra InternalResourceViewResoler s lun lun tr l i view. y , b i cc

5.3. Chuy n n view - Nh c p tr c y, m t controller thng 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 cc k thu t view nh l JSP c bin d ch thng qua Servlet hay JSP , s thng d ch ny th ng cx l thng qua s k t h p c a InternalResourceViewResolver v InternalResourceView, m v n l m t ti n b hay bao g m thng qua RequestDispatcher.forward cc API c a ph ng th c Servlet (..)ho c ph ng th c RequestDispatcher.include(). i v i cc cng ngh view khc, ch ng h n nh Velocity, XSLT, view s t cho n i dung vo t ng dng. - RedirectView o M t cch 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 ny, DispatcherServlet khng s d ng cc c ch View phn gi i bnh th ng. Thay v n c tr v view c, DispatcherServlet n gi n ch th nh m lm vi c v i RedirectView. m t HttpServletResponse.sendRedirect () g i tr v cho trnh duy t c a client nh l m t HTTP chuy n h ng. T t c cc thu c tnh m hnh c th hi n nh cc tham s truy v n HTTP. i u ny c ngh a l cc model ph i c cc i t ng (th ng Strings ho c cc i t ng chuy n i sang m t i di n String), m c th d dng 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 chnh n, n c nh co b n c u hnh cc URL chuy n h ng c thm vo controller tn View. n khng ph i l thm vo controller, nh ng c u hnh cng v i
oV n

- 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 cc l p con. i u ny t o ra m t InternalResourceView (m cu i cng khng m t RequestDispatcher.forward ()) trn ph n cn l i c a view name, c xem l m t URL. ny khng h u ch v i InternalResourceViewResolver v InternalResourceView. Nh ng cc ti n t c th h u ch khi b n ang s d ng m t cng ngh view khc, nh ng v n mu n cc ngu n ti nguyn c x l b i Servlet JSP /. i v i cc redirect: prefix, n u name view v i redirect:
o Do , ti n t

0841048- 0841171

Trang 26

Bo Co Seminar- Spring MVC


prefix c thm vo controller, controller s khng pht hi n b t c c bi t x y ra trong vi c x l ph n ng - The forward: prefix Itisalsopossibletouseaspecial forward: prefixforviewnamesthatareultimatelyresolvedby 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 - Cc ContentNegotiatingViewResolver khng gi i quy t c chnh n m f i i u g

c n c 1 i di n khc xem ph n gi i c a n. Ch n ch View t ng t nh cc i di n theo yu c u c a pha client. T n t i hai chi n l c cho client yu c u m t i di n t my ch . o S d ng m t URI ring bi t cho m i ti nguyn, thng th ng b ng cch s d ng m t ph n m r ng t p tin khc nhau trong cc URL. o S d ng URL t ng t cho cc client xc nh v tr cc ngu n l c, nh ng thi t l p cc tiu ch p nh n yu c u HTTP vo danh sch cc lo i ph ng ti n truy n thng m n hi u c. V d , m t yu c u HTTP cho http://www.example.com/users/fred v i m t tiu Ch p nh n t application / pdf yu c u m t i di n c a ng i s d ng PDF fred, trong khi http://www.example.com/users/fred v i m t tiu Ch p nh n thi t l p text / xml yu c u m t i di n XML - Ghi ch:
0841048- 0841171 Trang 27

Bo Co Seminar- Spring MVC


h tr nhi u i di n c a m t ti nguyn, Spring cung c p ContentNegotiatingViewResolver gi i quy t view d a trn ph n m r ng t p tin ho c ch p nh n tiu c a yu c u HTTP. trong firefox n cc
o

nh

- ContentNegotiatingViewResolver khng th c hi n vi c gi i quy t View chnh n m thay vo cc delegate cho m t danh sch cc phn gi i View m b n ch nh thng qua cc thu c tnh bean ViewResolvers.The ContentNegotiatingViewResolver l a ch n m t View thch h p x l cc yu c u b ng cch so snh cc yu c u lo i truy n thng (s) v i cc lo i truy n thng (cn g i l Content-Type) h tr cc View lin k t v i nhau c a ViewResolvers. View u tin trong danh sch c m t Content-Type t ng thch v i cc i di n cho client. N u m t View t ng thch c th khng c cung c p b i cc chu i ViewResolver, sau danh sch cc i m quy nh thng qua cc thu c tnh s c DefaultViews l y ki n. D i y l v d v c u hnh m t ContentNegotiatingViewResolver:

Ch :

0841048- 0841171

Trang 28

Bo Co Seminar- Spring MVC


o N u trong ContentNegotiatingViewResolver danh sch cc ViewResolvers

khng c c u hnh m t cch r rng, n s t ViewResolvers quy nh trong ng d ng


o Cc m i u khi n t

ng s

d ng b t k

ng ng

cho m t http://localhost/content.atom

tr v m t Atom, ngu n c p d li u RSS URI c d ng ho c http://localhost/content:

6. Using locales - H u h t cc b ph n c a ki n trc qu c t c a Spring

c h tr , c ng nh

khun kh Spring MVC web. DispatcherServlet cho php b n t ng gi i quy t cc thng tin s d ng locales c a client. i u ny c th c hi n v i cc i t ng LocaleResolver. - Khi yu c u n, DispatcherServlet s tm m t LocaleResolver, v n u n tm th y m t LocaleResolver, n c g ng s d ng LocaleResolver t 1 locale S d ng ph ng php RequestContext.getLocale (), b n c th lun l y cc locale c gi i quy t b ng cc LocaleResolver. - Ngoi phn gi i locales t ng, b n c ng c th nh km m t s ch n x l, thay i locale trong nh ng hon c nh c th , v d , d a trn vo m t tham s trong yu c u. - V tr phn gi i v s ch n c nh ngh a t i cc gi org.springframework.web.servlet.i18n v c c u hnh trong ng d ng c a b n theo cch thng th ng. y l m t s ch n l c c a LocaleResolver trong Spring. 6.1. AcceptHeaderLocaleResolver - B LocaleResolver ki m tra tiu accept-language trong yu c u c a client (V d , m t trnh duy t web). Thng th ng l nh v c ny tiu cc locale c a h i u hnh c a client.
0841048- 0841171

cg i ch a

Trang 29

Bo Co Seminar- Spring MVC


6.2. CookieLocaleResolver - N u locale c ch nh th LocaleResolver ny c th th y cs t nt ic a Cookie trn cc client b ng vi c ki m tra Cookie . N u v y, n s d ng locale quy nh. S d ng cc tnh ch t c a LocaleResolver ny, b n c th ch nh tn c a cookie c ng nh di t i a. D i y m t v d v xc nh m t CookieLocaleResolver.

B ng Nh ng thu c tnh c a CookieLocaleResolver Thu c tnh cookieName cookieMaxAge M c nh classname + LOCALE Integer.MAX_INT M t Tn c a cookie Th i gian t i a m t cookie s l i lu di i v i client. N u -1 l quy nh, cc cookie s khng t n t i, n s ch c s n cho n khi client t t trnh duy t c a mnh. Gi i h n kh n ng hi n th c a cc t p tin cookie cho m t ph n no c a trang web. Khi cookiePath c quy nh, cc cookie s ch c hi n th cho con ng v cc ng d n bn d i. c

cookiePath

6.3. SessionLocaleResolver - SessionLocaleResolver cho php b n l y k t h p v i yu c u c a ng i dng.

a i m locale t session c th

6.4. LocaleChangeInterceptor - B n c th cho php thay i c a locale b ng cch thm cc LocaleChangeInterceptor m t trong cc s Handler .N s pht hi n m t s yu c u v thay i locale. N g i setLocale () trn LocaleResolver c ng t n t i trong tr ng h p . V d sau y cho th y r ng cch g i n t t c cc ngu n ti
0841048- 0841171 Trang 30

Bo Co Seminar- Spring MVC


nguyn *.view c ch a m t tham s siteLanguage c t tn s thay i local. V v y, v d , m t yu c u cho cc URL, http://www.sf.net/home.view?siteLanguage=nl s thay i ngn ng trang web thnh ti ng H lan.

7. Using themes 7.1. T ng quan v themes - B n c th p d ng Spring Web MVC framework themes thi t l p khun kh t ng th ci nhn v c m nh n c a ng d ng c a b n, qua nng cao kinh nghi m ng i dng. Theme l t p h p cc ti nguyn t nh, th ng l phong cch sheets and images, c nh h ng n phong cch tr c quan c a ng d ng. 7.2. nh ngh a themes s d ng cc theme trong ng d ng web c a b n, b n ph i thi t l p m t giao di n th c hi n org.springframework.ui.context.ThemeSource. Cc giao di n WebApplicationContext m r ng ThemeSource nh ng u quy n nh ng trch nhi m (c a) n cho m t phin th c hi n. Theo m c nh cc y quy n s l m t org.springframework.ui.context.support.ResourceBundleThemeSource th c hi n c tnh ch t t i file t th m c g c c a classpath ny. s d ng th c hi n ThemeSource ty ch nh ho c c u hnh cc ti n t tn c s c a cc ResourceBundleThemeSource, b n c th ng k m t bean trong t ng tr ng h p

0841048- 0841171

Trang 31

Bo Co Seminar- Spring MVC


ng d ng v i tn themeSource c b o l u. T ng tr ng h p ng d ng web t ng pht hi n m t bean v i tn v s d ng n. - Khi s d ng ResourceBundleThemeSource, theme c nh ngh a trong m t t p tin thu c tnh n gi n. Cc thu c tnh t p tin li t k cc ngu n ti nguyn t o nn theme. y l m t v d : styleSheet=/themes/cool/style.css background=/themes/cool/img/coolBg.jpg - Cc kho c a cc thu c tnh l tn tham chi u n cc themes element t view code. i v i JSP, b n th ng lm c i u ny b ng cch s d ng Spring: theme custom tag,t ng t nh Spring: message tag. Cc JSP sau s d ng cc theme c nh ngh a trong v d tr c ty ch nh ci nhn v c m nh n:

- Theo m c nh, ResourceBundleThemeSource s d ng empty base name prefix. K t qu l, cc thu c tnh t p tin c t i t th m c g c c a classpath ny. V v y, b n s t cc nh ngh a theme cool.properties trong m t th m c g c c a classpath, v d , trong / WEB-INF/classes. ResourceBundleThemeSource s d ng cc gi Java resource bundle chu n t i c ch , cho php qu c t ha y c a theme. V d , chng ta c th c m t WEB-INF/classes/cool_nl.properties / , cc ti li u tham kh o m t hnh n n c bi t v i v n b n c a H Lan v n. 7.3. Phn gi i Theme - Sau khi b n xc nh theme, nh trong ph n tr c, b n quy t nh theme s d ng. Cc DispatcherServlet s tm m t bean c tn themeResolver tm ra s thi hnh ThemeResolver s d ng. M t b phn tch theme lm vi c trong nhi u cch t ng t nh LocaleResolver. N nh n di n cc theme s d ng cho m t yu c u c th v c ng c th thay i theo yu c u c a theme. Vi c phn gi i theme sau y c cung c p b i Spring: B ng 15.5. S thi hnh ThemeResolver M t
Trang 32

L p
0841048- 0841171

Bo Co Seminar- Spring MVC


FixedThemeResolver SessionThemeResolver CookieThemeResolver FixedThemeResolverSelects l m t theme c nh, thi t l p b ng cch s d ng cc thu c tnh defaultThemeName. Theme ny c duy tr trong HTTP session c a ng i dng. N ch c n c thi t l p m t l n cho m i session, nh ng khng t n t i gi a session. Cc theme c ch n l l u tr trong m t cookie trn client. i theme

- Spring c ng cung c p m t ThemeChangeInterceptor cho php thay trn t t c cc yu c u v i m t request parameter n gi n.

8. Springs multipart(fileupload) support 8.1. Gi i thi u - Spring c tch h p trong h tr nhi u ph n x l t p tin t i ln trong cc ng d ng web. B n kch ho t tnh n ng ny nhi u l n h tr v i cc i t ng MultipartResolver, c xc nh trong gi org.springframework.web.multipart. Spring cung c p MultipartResolver s d ng v i Commons FileUpload . - Theo m c nh,Spring khng x l nhi u multipart, b i v m t s nh pht tri n mu n x l chnh multiparts. B n cho php x l nhi u multipart d li u Spring b ng cch thm m t multipart resolver cc ng d ng web. M i yu c u c ki m tra xem n u n c ch a nhi u multipart. N u khng c nhi u multipart c tm th y, cc yu c u ti p t c. N u m t multipart c tm th y trong yu c u, cc MultipartResolver c khai bo trong context c a b n l cs d ng. Sau , cc thu c tnh nhi u multipart trong yu c u c a b n c x l nh cc thu c tnh khc. 8.2. S d ng MultipartResolver - V d sau y cho th y lm th no s d ng CommonsMultipartResolver:

- T t nhin b n c ng c n ph i t cc jar thch h p trong classpath c a b n lm vi c v i b phn tch nhi u ph n. Trong tr ng h p c a CommonsMultipartResolver, b n c n ph i s d ng commons-fileupload.jar. - Khi Spring DispatcherServlet nh n di n m t yu c u nhi u multipart, n kch ho t b phn tch c khai bo trong resoler (c a) cc b n v s trao tay c a b n
0841048- 0841171 Trang 33

Bo Co Seminar- Spring MVC


trn yu c u. Gi i quy t sau k t thc bao b c dng HttpServletRequest thnh m t MultipartHttpServletRequest t p tin h tr nhi u ph n t i ln. S d ng MultipartHttpServletRequest, b n c th nh n c thng tin v cc multiparts c theo yu c u ny v th c s c trong b controller c a b n. c quy n truy c p vo cc t p tin nhi u l n mnh

8.3. X l m t t p tin t i ln trong m t bi u m u - Sau khi MultipartResolver hon thnh, yu c u c x l nh b t k cng vi c khc. u tin, t o m t form v i m t u vo t p tin s cho php ng i dng t i ln m t form. Cc thu c tnh m ha (Enctype = "multipart / form-data") cho php trnh duy t bi t lm th no m ha cc hnh th c theo yu c u nhi u multipart

- B c ti p theo l t o ra m t controller x l cc t p tin t i ln. Controller ny t ng t nh m t normal annotated @Controller, ngo i tr vi c chng ti s d ng MultipartHttpServletRequest ho c MultipartFile trong cc method parameters:

0841048- 0841171

Trang 34

Bo Co Seminar- Spring MVC

- L u @RequestParam method parameters nh p vo khai bo trong form. Trong v d ny, khng c g c th c hi n v i byte[], nh ng trn th c t b n c th l u n vo c s d li u, l u tr n trn h th ng t p tin v nhi u h n n a. - Cu i cng, b n s ph i khai bo b controller and the resolver trong context ng d ng.

9. Handling exceptions 9.1. HandlerExceptionResolver - Spring HandlerExceptionResolvers gi m thi u sai st c a tr ng h p exception b t ng x y ra khi b n yu c u c x l b i m t controller no ph h p yu c u. HandlerExceptionResolvers ph n no gi ng v i s ngo i tr b n c th nh ngh a trong web.xml trong b m t ng d ng web. Tuy nhin, h cung c p m t cch linh ho t h n x l cc tr ng h p exception. H cung c p thng tin v nh ng x l c th c hi n khi exception c a ra. H n n a, m t ch ng trnh x l exception cho b n ty ch n h n cho ph n ng thch h p tr c khi yu c u c chuy n ti p n m t URL (k t qu cu i cng nh khi b n s d ng s exception c th servlet).
0841048- 0841171 Trang 35

Bo Co Seminar- Spring MVC


- Bn c nh vi c th c hi n cc giao di n HandlerExceptionResolver, ch l v n th c hi n ph ng th c resolveException (exception, Handler) v tr v m t ModelAndView, b n c ng c th s d ng cc SimpleMappingExceptionResolver. Resolver ny cho php b n l y tn class c a b t k tr ng h p exception c th c a ra v s ny tn cho view. y l ch c n ng t ng ng v i cc tnh n ng l p s exception t Servlet API, nh ng n c ng c th th c hi n 1 s r rng h n c a cc exception t nh ng x l khc nhau. - Theo mc nh, DispatcherServlet ng k vi c DefaultHandlerExceptionResolver. B phn tch ny gi i quy t m t s tiu chu n x l c a Spring MVC exceptions b ng cch thi t l p m t m ph n h i tr ng thi c th : Exception ConversionNotSupportedException HttpMediaTypeNotAcceptableException HttpMediaTypeNotSupportedException HttpMessageNotReadableException HttpMessageNotWritableException HttpRequestMethodNotSupportedException MissingServletRequestParameterExceptio NoSuchRequestHandlingMethodException TypeMismatchException M Tnh tr ng HTTP 500 (Internal Server Error) 406 (Not Acceptable) 415 (Unsupported Media Type) 400 (Bad Request) 500 (Internal Server Error) 405 (Method Not Allowed) 400 (Bad Request) 404 (Not Found) 400 ad Request)

9.2. @ExceptionHandler - M t thay th cho cc giao di n HandlerExceptionResolver l ch thch @ExceptionHandler. B n s d ng cc ch thch ph ng php @ExceptionHandler trong vng controller m t xc nh cc ph ng php c g i khi m t Exception c a m t lo i hnh c th c a ra trong khi th c hi n cc ph ng php controller. V d :

0841048- 0841171

Trang 36

Bo Co Seminar- Spring MVC

S g i ph ra.

ng php "handlerIOException ' khi java.io.IOException

- Cc gi tr @ExceptionHandler c th c thi t l p m t lo t cc lo i exception. N u exception c a vo ph h p v i m t trong cc lo i trong danh sch, sau cc ph ng php ch thch v i cc k t h p @ ExceptionHandler s c g i l i. N u gi tr annotation khng c thi t l p sau li t k cc lo i exception nh cc i s ph ng php c s d ng. - C ng gi ng nh cc ph ng php controller methods annotated v i m t ch thch @RequestMapping, ph ng php i s v gi tr tr v c a ph ng php @ExceptionHandler l r t linh ho t. V d , HttpServletRequest c th c truy c p trong mi tr ng Servlet v cc PortletRequest t i mi tr ng Portlet. Cc ki u tr v c th l m t String. 10. Convention over configuration support i v i nhi u project, vi c g n k t thi t l p cc quy c v nh ng m c nh h p l ch l nh ng g m chng c ntheme v quy c trn c u hnh ny by gi c h tr r rng trong Spring Web MVC. i u ny c ngh a l n u b n thi t l p cc quy c t tn t ng t nh v y, v c n b n b n c th cut down 1 trong s nh ng c u hnh m i h i ci t b i u khi n nh x , xem l i cc view, v d nh ModelAndView, - Vi c h tr quy c trn c u hnh l 3 v n c t li c a MVCmodel, view v controller 10.1. Controller-ControllerClassNameHandlermapping - Class ControllerClassNameHandlerMapping c b sung cho HandlerMapping, s d ng quy c xc nh nh x gi a cc request URL v cc Controller truy c p cc request

0841048- 0841171

Trang 37

Bo Co Seminar- Spring MVC

y l o n m gi t file c u hnh Spring Web MVC

- ControllerClassNameHandlerMapping tm ra cc x

l khc nhau (ho c

Controller), beans c nh ngh a trong cc ng d ng ng c nh v lm tot ln tn Controller c nh ngh a nh x x l c a n. Theo cch , cc nh x ViewShoppingCartController n /viewshoppingcart* request o WelcomeController maps to the /welcome* request URL o HomeController maps to the /home* request URL o IndexController maps to the /index* request URL o RegisterController maps to the /register* request URL - Trong tr ng h p cc l p x l MultiActionController, cc nh x c t o ra h i ph c t p h n. Tn cc Controller trong v d sau c cho r ng n l s b sung cho MultiActionController: o AdminController maps to the /admin/* request URL o CatalogController maps to the /catalog/* request URL 10.2. The Model ModelMap (ModelAndView) - Class ModelMap v c b n l 1 Map c th add thm cc object hi n th trong 1 View tham gia vo theo 1 quy c t tn chung. Xem thm cc b sung Cotroller; ch r ng cc object c thm vo ModelAndView khng c b t k tn k t h p no c ch nh

0841048- 0841171

Trang 38

Bo Co Seminar- Spring MVC

- Class ModelAndView s d ng 1 class ModelMap l s b sung c a 1 Map ty ch n c th t ng generate 1 key cho 1 object c add vo n. Cc chi n l t xc nh add thm 1 object l, trong tr ng h p object v h ng nh l User, dng tn ng n c a 1 class c a 1 class object. Cc v d sau y l nh ng ci tn c t o ra cho cc object v h ng t trong 1 ModelMap ng h p x.y.User c add th tn user s c t o ra. o Tr ng h p x.y.Registration c add th tn registration s c t o ra. o Tr ng h p x.y.Foo c add th tn foo c t o ra. o Tr ng h p java.util.HashMap c add th tn hashMap c t o ra. Trong tr ng h p ny c th b n mu n r rng h n v tn b i v v tr c gic th hashMap nh h n. o Add null th k t qu tr ra s l IllegalArgumentException c a ra. N u nh object (ho c cc object) c add null th chng ta c ng c n lm r v tn. t o ra 1 name sau khi add thm 1 object Set, List ho c array l tham kh o trong collection, l y tn ng n class c a i t ng u tin trong collection v s d ng n g n v i tn List . V d : o 1 m ng x.y.User[] v i 1ho c nhi u ph n t x.y.User c add s c tn userList c t o. o 1 m ng x.y.Foo[] v i 1 ho c nhi u ph n t x.y.User c add s c tn fooList c t o ra. - M t java.util.ArrayList v i 1 ho c nhi u ph n t x.y.User c add s c tn userList c t o. - M t java.util.HashSet v i 1 ho c nhi u ph n t x.y.Foo c add s c tn fooList c t o. - M t java.util.ArrayList r ng s khng c add vo t t c (trong effect, addObject(..) khi g i v c b n s l 1 no-op). 10.3. The View RequestToViewNameTranslator
0841048- 0841171 Trang 39

o Tr

Bo Co Seminar- Spring MVC


- Khi khng c tn View logic th Giao di n RequestToViewNameTranslator s xc nh 1 cch r rng. DefaultRequestToViewNameTranslator ch l 1 l p b sung. - Cc nh x DefaultRequestToViewNameTranslator yu c u cc URL view logic, nh trong v d : n tn cc

- Ch trong vi c th c hi n b sung cc ph ng th c handleRequest(..) khng View ho c tn view logic bao gi c ng c t vo ModelAndView v c tr v . Cc DefaultRequestToViewNameTranslator c thao tc v i vi c t o ra 1 tn view logic t URL c a yu c u. Trong tr ng h p pha trn cc RegistrationController c dng lin k t v i cc ControllerClassNameHandlerMapping, m t request URL c a
http://localhost/registration.html tr v k t qu trong tn 1 view local c a registration

b t u c t o ra b ng DefaultRequestToViewNameTranslator. Tn View logic ny sau c gi i quy t bn trong view /WEB-INF/jsp/registration.jsp b ng bean InternalResourceViewResolver. 11. Etag support
0841048- 0841171 Trang 40

Bo Co Seminar- Spring MVC


- M t ETag (entity tag) l 1 header ph n h i HTTP c tr v b i 1 l nh HTTP/1.1 c a web server, dng xc nh r nh ng thay i trong n i dung t i 1 URL c a ln. N c th c coi l s k th a tinh vi i v i header LastModified. Khi server tr v 1 i di n v i 1 header ETag, client c th dng header ny trong GET ti p theo, trong 1 header If-None-Match. N u n i dung khng thay i th server tr v 304: No Modified. - H tr cho ETag th c cung c p b i b l c servlet ShallowEtagHeaderFilter. N l 1 Servlet Filter, v do c th c s d ng k t h p b t k framework web no. B l c ShallowEtagHeaderFilter t o ra ci g i l ETag c n (tri ng c v i ETag su, s tm hi u sau). B l c l u tr n i dung tr v JSP (ho c n i dung khc), t o ra 1 MD5 b m trn , v tr v nh 1 header Etag trong ph n h i. L n sau, 1 client g i 1 yu c u v i ti nguyn t ng t nh th , n s d ng b m gi tr If-None-Match. B l c d tm gi tr ny , tr v l i 1 view v so snh gi a 2 l n b m. N u chng b ng nhau, s tr v gi tr 304. B l c ny s khng l u cc x l l y th a b i v view hy cn c hon tr l i. N ch l u l i b ng thng v ph n h i tr l i khng c g i tr v wire - B n c th c u hnh ShallowEtagHeaderFilter trong Web.xml :

12. Configuring Spring MVC - Spring 3 gi i thi u mvc XML c u hnh namespace lm

n gi n ha qu trnh ci

t Spring MVC vo trong ng d ng web c a b n. Thay v ng k cc bean c p th p nh l AnnotationMethodHandlerAdapter, n gi n l chng ta c th dng namespace v nh n g thi t l p c p cao. - Cc namespace mvc bao g m 3 tag: mvc: annotation-driven, mvc:interceptors v mvc: view-controller. M i tag ny cghi d i y v trong l c XML: 12.1. mvc:annotation-driven - Tag ny ng k cc bean DefaultAnnotationHandlerMapping v

AnnotationMethodHandlerAdapter, y l yu c u c a Spring MVC g i request n @Controllers. Tag c u hnh 2 bean v i gi tr m c nh l nh ng g c trong classpath. Cc gi tr m c nh l:
0841048- 0841171 Trang 41

Bo Co Seminar- Spring MVC


- H tr cho Spring 3 l ki u ConversionService c b sung thm vo JavaBeans PropertyEditors trong Data Binding. V d v ConversionService c thi t l p ra b i org.springframework.format.support.FormattingConversionServiceFactoryBean c dng m c nh. Ci ny c th c ghi b ng cch thi t l p cc thu c tnh conversion-service. - H tr cho formatting cc tr ng Number s d ng di n gi i @NumberFormat - H tr cho formatting cc tr ng Date, Calendar, Long, v Joda Time s d ng di n gi i @DateTimeFormat - H tr cho validating cc u vo @Controller v i @Valid, n u JSR-303 Provider hi n h u trong classpath. Xc th c h th ng c th c c u hnh 1 cch r rng b ng cch thi t l p cc thu c tnh validator. - H tr cho vi c c v vi t XML, n u JAXB hi n h u trong classpath. - H tr c v vi t JSON, n u Jackson hi n h u trong classpath. M t cch s d ng i n hnh c hi n th d i y:

12.2. mvc:interceptors - Tag ny cho php b n ng k ty ch n HandlerInterceptors ho c WebRequestInterceptors c n c p d ng vo trong cc bean HandlerMapping. B n c ng c th gi i h n ng d n URL b ch n c th c p d ng. - Sau y l v d v vi c ng k ng n ch n p d ng cho cc ng d n URL:

- M t v d

v vi c

ng k ng n ch n c gi i h n 1

ng d n URL c th :

0841048- 0841171

Trang 42

Bo Co Seminar- Spring MVC

12.3. mvc:view-controller - Tag ny l 1 shorcut nh ngh a 1 ParameterizableViewController , khi c g i ngay l p t c chuy n ti p 1 view - M t v d c a view-controller c chuy n n trang home c hi n th d i y

12.4. mvc:resources - Tag ny cho php cc yu c u resource static theo sau 1 m u URL lin quan ph c v b i 1 ResourceHttpRequestHandler t b t k 1 list cc Resource. - V d , ph c v cc yu c u resource v i 1m u URL c a /resources/** t th m c public-resources trong root ng d ng c a web, tag s c s d ng nh sau:

- Cc thu c tnh mapping ph i l 1m u Ant , c th c dng b i SimpleUrlHandlerMapping v cc thu c tnh v tr ph i c ch nh 1 ho c nhi u gi tr resource v tr th m c. a s cc resource u c th c ch nh s d ng d u ph y ng n cch gi a list cc cc gi tr . Cc v tr quy nh s c check vo order cho s hi n h u c a resource cho b t k yu c u no. - V d , c th ph c v cc resource t c 2 th m c root ng d ng web v t 1 ng d n c /META-INF/public-web-resources/ trong b t k file jar trn classpath, tag s c ch nh nh sau:

12.5. mvc:default-servlet-handler - Th tag ny cho php mapping DispatcherServlet n "/" (theo nh cch ghi mapping c a Servlet m c nh), trong khi v n cho php cc yu c u static resource c x l b i cc Servlet m c nh. N c u hnh 1
0841048- 0841171 Trang 43

Bo Co Seminar- Spring MVC


DefaultServletHttpHandler v i URL mapping c a "/**". X l ny s chuy n t t c cc yu c u n Servlet m c nh. kch ho t tnh n ng ny th dng ci t m c nh, ch c n include tag trong form: - Thng bo tr m c nh nn c ghi "/" Servlet mapping l RequestDispatcher cho Servlet c l y theo tn h n l l y theo path. DefaultServletHttpHandler s

c g ng t ng detect cc Servlet m c nh cho cc container t i th i gian kh i ng, s d ng 1 danh sch cc tn c bi t n nh l h u h t cc container Servlet(bao g m Tomcat, Jetty, Glassfish, JBoss, Resin, WebLogic, v WebSphere). N u Servlet m c nh c ty ch nh c u hnh v i 1 tn khc nhau, ho c n u khc nhau Servlet d d ng n i m Sevlet m c nh Servlet ch a bi t, th tn servlet m c nh ph i c nu r rng nh sau:

III. Demo HelloSpringMVC 1. B c 1: T o Project

- Click the Configuration tab, ch

nh tn c a dispatcher servlet Spring

0841048- 0841171

Trang 44

Bo Co Seminar- Spring MVC

- Th vi n m r ng

- Nh n F6 ch y th project trong IDE


0841048- 0841171 Trang 45

Bo Co Seminar- Spring MVC

- N i dung c a trang (/WEB-INF/jsp/idex.jsp)

2. B

c 2: T o Service

3. B

c 3: T o Controller

0841048- 0841171

Trang 46

Bo Co Seminar- Spring MVC

- T o class HelloController

0841048- 0841171

Trang 47

Bo Co Seminar- Spring MVC

- T o class Name v i n i dung

4. B c 4: T o View - T o helloView

- T o nameView
0841048- 0841171 Trang 48

Bo Co Seminar- Spring MVC

- Run Project

- Nh p tn, helloView hi n th :

5. B c 5: C u hnh - Thi t l p c u hnh trong file applicationContext.xml

- Thi t l p c u hnh trong file dispatcher-servlet.xml


0841048- 0841171 Trang 49

Bo Co Seminar- Spring MVC

IV. ng D ng: n Java L thuy t: Ch L n- Gia D ng V. Tham Kh o - nh km trong ti li u tham kh o

0841048- 0841171

Trang 50

You might also like