该用户从未签到
|
struts21 K& M; F- Y, ^$ O9 O4 D
1.了解Struts2发展史,与webwork框架关系" }; c+ D6 Y$ ^( f0 Q. p
2.Struts2体系结构
! g/ r# E, P, ?: s6 v# O& Q) ~ C控制器:FilterDisptacher(2.0,2.1版本),StrutsPrepareAndExecuteFilter(2.1.8,2.2版本)3 c( `7 _& B9 W/ m& ^
M模型:Action:用于业务处理。(可以不用必须继承父类和实现框架接口)
& O: Y1 y0 B9 h0 _9 w5 H 拦截器:用于封装通用业务逻辑。. A) h. `0 p9 d
V视图:Result(提供了各种类型的Result组件,用于实现不同类型的响应信息)、标签+OGNL1 _( `' w% G9 m: Z) k
3.Struts2框架的配置. i' U, N% ~3 w" [# ?) I: l
(1) struts-default.xml(jar包中自带的默认配置)
" r3 ~! M5 T2 |5 k3 T 配置了一些拦截器、Result组件的定义。/ N7 ?0 G0 o& D: l/ C6 x
(2) default.properties(jar包中自带的默认配置). x( F3 Z* h& k9 D( I0 M8 H" S
配置了框架的一些系统参数,例如请求扩展名、字符编码等。4 \4 D" j4 n( t7 D, P- n7 t
(3) struts.xml(开发者创建,默认在src下创建)
( x( z2 Y! m6 a 用于配置Action组件、自定义拦截器组件、自定义的Result组件。
0 d$ w: [% [# k# F (4) struts.properties(开发者创建,默认在src下创建)8 ^4 z$ U* f6 s y$ Z
用于修改default.properties中的配置参数。
! c2 n( f, m ~6 s# D( A( ]9 T4.Struts2开发入门0 _9 s+ Z: v1 M1 K, w
(1)创建Web工程,引入开发包) ~, o, d$ r: t% a
struts2-core-2.1.8.jar6 h+ L& Q# U* x3 g0 r7 Q p
xwork-core-2.1.6.jar
7 n/ J4 F$ |5 S9 z3 \6 ? freemarker-2.3.15.jar# l0 F5 p" I7 x7 m1 M* a- S( {
ognl-2.7.3.jar
0 T) P+ F& z7 B! u commons-fileupload-1.2.1.jar
/ H' U) J7 s6 }1 S" H5 K0 } (2)配置控制器,并添加struts.xml配置文件
5 k2 Q2 T& f# R8 Q3 I" p4 A! u# B/ P (3)根据JSP请求编写Action组件
' F1 p `" N5 b0 [ (4)编写struts.xml配置- {- J9 e) |" O
5.Struts2特点, h) l n. r( @; q9 |; a" B1 Z0 ]4 m
(1)Action摆脱了对框架API依赖,也摆脱了对ServletAPI
; F Q1 }! S& @$ H, l l3 g3 S (2)Action可测性增强
r( |/ r x/ `7 ? (3)提供了各种类型的Result,可以完成各种形式的响应
$ a9 m$ Q' S2 P E# V: f7 d (4)易于扩展和整合其他技术
$ Y4 e p. X& I2 J3 Z @4 z7 K (5)提供了拦截器和拦截器栈机制+ ^, U' c |, k
(6)Struts1中的Action使用了单例,Struts2是一个请求一个Action对象
" {/ F2 m. M& A& l- Q6.如何使用Session、Request、Application等对象
8 q+ ?# a- ?6 L1 z8 y (1)Struts2对原有session、request、application做了封装,可以通过Map结构使用。使用方式如下
3 o0 D( d- q1 h2 d; M Map session = ActionContext.getContext().getSession();
6 V# G" x5 |# N# k& i0 E. h. v( w Map application = ActionContext.getContext().getApplication();6 J: s4 o- b- ?
Map request = (Map)ActionContext.getContext().get("request");
# t, Q5 G( s( T8 d5 _& q (2)封装原理
; [4 C. c. R5 }2 w public class SessionMap extends AbstractMap{
( k" P1 `6 M E$ e HttpSession session;7 Q" K' ~* D" `- y
public SessionMap(HttpSession session){; v8 ~4 `$ I/ Q( D6 s
this.session = session;
2 m9 q& c" K6 d$ R }) D! j" p; ?; [2 x+ e; N. t Q
3 u9 q! j; v: e2 ~# { public void put(Object key,Object value){2 W; m9 K% z5 k" N1 g
session.setAttribute(key.toString,value);( |/ F% R1 ^9 o% m$ h* d+ G
} [( Z+ `; d7 P7 w: C1 L& \
6 z# b- H) B2 n; n/ @6 [$ D
public Object get(Object key){
0 t6 \3 h% W% c, }; y% u return session.getAttribute(key.toString());, u/ w! q( q% Z& T5 I- ?
}9 T7 B1 n5 ~2 t0 J
}$ A. e+ y$ O0 l& w# e
& K, S2 ^* L. f2 k5 d (3)如果需要使用原有Servlet API类型,可以通过ServletActionContext获取8 x9 ^! s* y6 Y m. H
" B f# F: b8 G. f7 r% t, ^
7.Action相关配置
N9 d) R6 y, _2 [- F (1)<package>元素的namespace属性,命名空间,默认值为/
, m4 S( K( i% N0 D5 j1 R 对应请求是/工程/namespace/请求名.action
4 [7 l+ r. G5 K0 |8 |/ m" F (2)<action>元素的method属性,业务方法名,默认execute
" B/ ?3 s2 X2 B 可以指定Action方法名当做业务方法。
* i7 D# X/ O* Z' U! X+ G (3)<param>元素5 H$ s4 ^% E# L: J: N1 C
可以为父元素对象指定属性值。
# D5 Q, z* C. F6 [ (4)通配符*的使用
8 ^. f+ s0 |6 g7 K" z 在<action>元素的name属性中可以使用*,*表示任意字符2 m y3 T- \& E) o, V2 {1 f
在<action>元素的其他属性中可以使用{1}、{2}等引用通配符代表的值
0 s: S# U6 i; T( h 8.ValueStack作用及结构
+ F; q( A# e7 t0 ]( F* P3 O ValueStack存储了和请求处理相关的数据。包括session、request、action等。
) c/ Y; v7 Q3 ^' ]6 m4 z ValueStack包含root区和context区
, j' b" ^% {. F: d3 c: B root区类型为CompoundRoot继承了ArrayList(栈结构),存储于请求对应的Action对象。7 O ^& y) n$ |# w' `! P
context区类型为Map,用于存储session、request、appliation、action、parameters等变量信息.) @& b4 H: U+ N! ?7 A: W g
9.ValueStack与OGNL关系- v9 e6 M m, u, N
OGNL:Object Graphic Navigation Language,对象图导航语言。 x }& S4 O! g7 j) v! m
Struts2使用OGNL访问ValueStack数据,即对属性值设置和获取。, }, l' n8 x& h0 w" V# i; `
OGNL访问ValueStack数据的方法如下:
1 _( f1 p! [9 u3 }$ [0 o 访问root区属性:表达式为"属性名"6 s5 i2 B% |2 y+ l3 w+ G
访问context区变量:表达式为"#key",例如"#session.user"+ m) Y! S U) Z' K3 l( E/ g$ ~
10.Struts2提供了标签+OGNL表达式,用于访问ValueStack数据# i' j7 v) a7 z9 H: \0 s4 l
: C: A6 E7 Z) M+ v" o( B
1 v2 g7 r) i$ c& c! ^ |
|