该用户从未签到
|
struts2
" Z# z" |# u1 y* r1.了解Struts2发展史,与webwork框架关系3 V+ f% C8 |/ F a! l
2.Struts2体系结构
0 [4 f2 Q: I$ h+ i6 R' w C控制器:FilterDisptacher(2.0,2.1版本),StrutsPrepareAndExecuteFilter(2.1.8,2.2版本), ?9 C' ]2 @( |$ l( L- L. q
M模型:Action:用于业务处理。(可以不用必须继承父类和实现框架接口)
1 h" }: J; g2 r9 }% ? 拦截器:用于封装通用业务逻辑。
2 e C* `9 g- A' f9 w V视图:Result(提供了各种类型的Result组件,用于实现不同类型的响应信息)、标签+OGNL4 s% z7 L, i! B0 o* A- ]5 B
3.Struts2框架的配置5 m& z. W) x5 f' y+ h
(1) struts-default.xml(jar包中自带的默认配置)
4 X: a" I# X3 S# e 配置了一些拦截器、Result组件的定义。
4 F0 S; g8 r! | (2) default.properties(jar包中自带的默认配置)
! _$ x3 k z; C I 配置了框架的一些系统参数,例如请求扩展名、字符编码等。
$ ^2 D: f8 K7 { (3) struts.xml(开发者创建,默认在src下创建)
7 c4 v( q, G, z: }9 B' F 用于配置Action组件、自定义拦截器组件、自定义的Result组件。
: i' x1 q, _2 t# [+ K0 m5 i5 k C (4) struts.properties(开发者创建,默认在src下创建)
# y) X0 D. `! g, k5 p* C$ Y6 P2 k 用于修改default.properties中的配置参数。
/ a2 S# Q9 I; A' l: }$ u% N4.Struts2开发入门
- @( e) X9 \5 z( n3 ] (1)创建Web工程,引入开发包' k4 p' X4 \# V- h$ A( d$ o
struts2-core-2.1.8.jar
: g( j1 `# {9 i4 j# b D; | xwork-core-2.1.6.jar2 w1 } W/ P; ^" D- { E- q
freemarker-2.3.15.jar: k0 C; O3 ]- X+ n* q# G0 {
ognl-2.7.3.jar
) M* P+ D8 \9 @4 ?/ o2 x* \1 | commons-fileupload-1.2.1.jar. N: q3 |4 b, v
(2)配置控制器,并添加struts.xml配置文件
7 D) n3 e6 ^3 d (3)根据JSP请求编写Action组件
) H; r5 D# S; v. Z5 g' F (4)编写struts.xml配置0 X2 A+ g6 C- W, r" k" K
5.Struts2特点
+ v$ R; i8 A( u1 j1 w; l' E (1)Action摆脱了对框架API依赖,也摆脱了对ServletAPI
4 J. v2 R0 {+ y. p% V: N (2)Action可测性增强 M. }( a# f# n, A' F
(3)提供了各种类型的Result,可以完成各种形式的响应' h# j9 d* q: c) Z0 Q. X# p
(4)易于扩展和整合其他技术
. V8 S* H( X) k+ s (5)提供了拦截器和拦截器栈机制1 d0 h) A- [/ Z) ?/ h; G
(6)Struts1中的Action使用了单例,Struts2是一个请求一个Action对象. Y* H6 D! x; X9 [5 z( Q( ^- K) l8 D
6.如何使用Session、Request、Application等对象, t7 n' {# ~# G, C: i' Q) N
(1)Struts2对原有session、request、application做了封装,可以通过Map结构使用。使用方式如下7 ^0 G+ ~: k, C1 U" c
Map session = ActionContext.getContext().getSession();) x) U& t. z, ^# T6 E: V
Map application = ActionContext.getContext().getApplication();! a8 q: V F8 t$ E' C# f/ _
Map request = (Map)ActionContext.getContext().get("request");- j/ W! g4 u; [( ~" z$ n
(2)封装原理2 B, {# ^+ Y+ B) i q! o
public class SessionMap extends AbstractMap{4 z4 t/ w2 a- y; d, F5 M
HttpSession session;1 V/ B" O$ w- ^4 X7 ]8 j* R
public SessionMap(HttpSession session){1 i3 G, W' l$ e; \; ]+ R% Z' F
this.session = session;
! @" ?9 _4 |" c& V: F$ D8 U }
! b2 @- ^% }. p
5 \+ z! Z9 t; o t: w& L# k4 @ public void put(Object key,Object value){
9 ~$ W3 C0 o# i/ Z session.setAttribute(key.toString,value);
" E6 ~8 K @" D L. \3 e; P9 K }
" Q8 p s4 |; F* F
9 ~* a! H1 E. ^6 ?" w public Object get(Object key){5 ?/ V% e, f2 {* {) T6 Y1 g. O+ O0 x9 ]
return session.getAttribute(key.toString());- c4 K! x0 U8 ?* i
}
/ q2 ?8 {; Z- V. S: o }" l# `- b% }% T* A- V
. z7 V7 z. Y7 J; Q6 K (3)如果需要使用原有Servlet API类型,可以通过ServletActionContext获取
8 P1 R3 ^* x3 @+ P! d
( s7 ~( s% z" Q% _" m# V2 x, R7 P 7.Action相关配置. f0 p$ @, ?! }* w6 Y& L' }$ ]
(1)<package>元素的namespace属性,命名空间,默认值为/; ]% n7 i Y! x# g
对应请求是/工程/namespace/请求名.action
& I* q2 ~1 R, {4 s M$ n/ ` (2)<action>元素的method属性,业务方法名,默认execute8 n; m$ c' Z0 }- S
可以指定Action方法名当做业务方法。1 d0 P+ L( ?* @# t* Y
(3)<param>元素
4 H! s* F/ j6 D- B 可以为父元素对象指定属性值。1 G' I! x, L# Y
(4)通配符*的使用
g8 ]$ s g9 q. z0 Z% N( Z 在<action>元素的name属性中可以使用*,*表示任意字符
3 C. V0 K8 U% R# Z; V, i9 s9 _ 在<action>元素的其他属性中可以使用{1}、{2}等引用通配符代表的值0 l8 _! j% f. a
8.ValueStack作用及结构4 Z8 \$ K* d; I% B: L7 C7 i* r
ValueStack存储了和请求处理相关的数据。包括session、request、action等。
! s. R- U6 q8 s5 o0 j5 @& `7 U ValueStack包含root区和context区5 d0 U4 e- U; y8 a6 _" ?
root区类型为CompoundRoot继承了ArrayList(栈结构),存储于请求对应的Action对象。; B8 p" L7 t$ l' g
context区类型为Map,用于存储session、request、appliation、action、parameters等变量信息.
# H8 s1 c, @7 H. ^' E) ~/ _5 I0 d s, l 9.ValueStack与OGNL关系
# j, T7 B3 T( b OGNL:Object Graphic Navigation Language,对象图导航语言。& t" r8 d$ w5 ?
Struts2使用OGNL访问ValueStack数据,即对属性值设置和获取。
- {) T9 c9 R- }$ Y! V1 W; O" J* D2 a OGNL访问ValueStack数据的方法如下:
( T" V" Y9 ~) @9 c8 y8 F 访问root区属性:表达式为"属性名"
9 _7 t- ~. ?1 |% {3 h! d 访问context区变量:表达式为"#key",例如"#session.user"
2 x$ B6 T: h* e( ^ 10.Struts2提供了标签+OGNL表达式,用于访问ValueStack数据% t( [: z0 Q& C0 j+ G6 ]
1 ^; o9 }9 a, E# r) S0 r1 h3 E
/ c* e$ K. b2 M5 \. N |
|