该用户从未签到
|
struts2' x8 F- _* V6 Y" f# X
1.了解Struts2发展史,与webwork框架关系
9 {' r7 p# S/ h, t3 v' s2.Struts2体系结构
! p+ ^ ]2 {# ^' N6 J; o C控制器:FilterDisptacher(2.0,2.1版本),StrutsPrepareAndExecuteFilter(2.1.8,2.2版本)
7 d6 ]4 O5 W) d M模型:Action:用于业务处理。(可以不用必须继承父类和实现框架接口)
6 f# T+ }. E: j! v, H 拦截器:用于封装通用业务逻辑。8 G. ^, ]+ ^7 N2 ? z; r# O
V视图:Result(提供了各种类型的Result组件,用于实现不同类型的响应信息)、标签+OGNL
" \* Y) e6 f9 L4 q6 m* j# w3.Struts2框架的配置. p# `# [( N# M" e9 ~* l4 T
(1) struts-default.xml(jar包中自带的默认配置)0 Q* R, c# b! K/ y
配置了一些拦截器、Result组件的定义。
) [; @, h7 ]# z, N; b% Q, X (2) default.properties(jar包中自带的默认配置)
& R" ~% b+ i; D& t# ~4 \ 配置了框架的一些系统参数,例如请求扩展名、字符编码等。& V3 X# g$ Y0 d ^9 K/ N9 v% k! g& I
(3) struts.xml(开发者创建,默认在src下创建)
. K9 l/ m( Z7 Q; h* [5 w! l0 I 用于配置Action组件、自定义拦截器组件、自定义的Result组件。* x4 a( ]: E) f! s
(4) struts.properties(开发者创建,默认在src下创建)- F3 A0 U6 D9 _2 ~1 y! F
用于修改default.properties中的配置参数。2 v: D- J4 E! R" i" i5 J8 C
4.Struts2开发入门
. O0 y$ c. O: E7 W2 n: P) G, W8 N (1)创建Web工程,引入开发包
3 u( l- f6 \- A" |* h struts2-core-2.1.8.jar5 _4 p1 O. k+ t8 y' w$ ]: ^$ d
xwork-core-2.1.6.jar7 e" |% W# g$ Q- o& @9 M
freemarker-2.3.15.jar9 a, W% g4 V) C3 ?4 O5 Z$ ~# R. j; a
ognl-2.7.3.jar; g3 Y) k( q* X2 h5 Y a
commons-fileupload-1.2.1.jar2 j3 a) @' {7 _1 L2 V T9 g/ z
(2)配置控制器,并添加struts.xml配置文件
1 Y, r1 L3 i6 u+ C4 o (3)根据JSP请求编写Action组件* W% `4 U+ ?5 a( O0 p; y( p
(4)编写struts.xml配置* a; K% }( Y8 w; |$ E
5.Struts2特点8 |7 y$ k K4 s" N/ A0 q
(1)Action摆脱了对框架API依赖,也摆脱了对ServletAPI
% G. Q) c6 w& Z7 {/ r9 l ?& F! ` (2)Action可测性增强
5 v2 E# \9 j7 ?/ l( T (3)提供了各种类型的Result,可以完成各种形式的响应, {4 W# }+ l( _: h+ t$ `$ c/ |
(4)易于扩展和整合其他技术7 h4 U% E9 Y5 |; t4 x
(5)提供了拦截器和拦截器栈机制0 m f0 {0 j x1 O% D
(6)Struts1中的Action使用了单例,Struts2是一个请求一个Action对象
5 K& ^* Z4 ~9 u6.如何使用Session、Request、Application等对象
. |) f* x- D! G/ A' k4 w( Z (1)Struts2对原有session、request、application做了封装,可以通过Map结构使用。使用方式如下
$ {: S2 S [1 ~$ t1 O5 e9 I9 V6 @ Map session = ActionContext.getContext().getSession();4 `- S+ @; J1 c$ D" l
Map application = ActionContext.getContext().getApplication();& x: s0 H( I7 g/ a+ e4 J& A
Map request = (Map)ActionContext.getContext().get("request");
$ B& ~* ?1 n! R2 m# d& D+ X8 A (2)封装原理
/ k* e. I9 i0 |7 _2 [4 ] public class SessionMap extends AbstractMap{1 o. O) J4 [- s6 Q
HttpSession session;
- V9 D5 ]6 x2 z/ x/ G; \; |* C public SessionMap(HttpSession session){: y$ [6 ]) f2 h+ {. u9 [
this.session = session;9 A# e, w2 H. \/ y$ Y4 L& G2 l$ @) T
} i2 D8 I# X9 N* g9 D e
; F4 ^ Y0 ~. z/ [( |
public void put(Object key,Object value){8 `9 C' I+ g2 A8 s$ o
session.setAttribute(key.toString,value);
1 G5 [6 j) {3 Q @ }; @. I4 J/ R0 n) n- u
' Y# h* j# l& O public Object get(Object key){$ T& V: F) E h& r* @% @0 x! h
return session.getAttribute(key.toString());
; G" z( N/ D" X1 o }
2 i4 I8 @2 o+ Y5 X, d }
; t% L# N$ J$ n. k5 ?( v # B3 ^3 w8 ]2 ^/ N; t& H9 H
(3)如果需要使用原有Servlet API类型,可以通过ServletActionContext获取1 d( A+ |/ k0 q. @# A/ P
# b( E0 n. P4 g, D
7.Action相关配置' F- A/ [( Q7 @
(1)<package>元素的namespace属性,命名空间,默认值为/
7 ?$ T' Z2 Q5 T, {9 R. Q1 L 对应请求是/工程/namespace/请求名.action: D- f3 E) J/ d9 v
(2)<action>元素的method属性,业务方法名,默认execute' l1 o& ]7 L6 v) H7 ~
可以指定Action方法名当做业务方法。
0 g0 D( Y- Z+ g) o+ Z (3)<param>元素; B# s2 T/ U7 f$ k/ Y
可以为父元素对象指定属性值。
4 X, `; m1 s+ @5 @$ d (4)通配符*的使用# f" j7 c# Y+ E8 n9 f
在<action>元素的name属性中可以使用*,*表示任意字符, p, B9 K" d4 p' _; U
在<action>元素的其他属性中可以使用{1}、{2}等引用通配符代表的值4 c& D7 ~. r/ H
8.ValueStack作用及结构
7 B2 p- k g4 h/ h, F ValueStack存储了和请求处理相关的数据。包括session、request、action等。
: i. k, o# c1 `( f ValueStack包含root区和context区
: S- t7 j8 @! X5 w, a) u root区类型为CompoundRoot继承了ArrayList(栈结构),存储于请求对应的Action对象。
5 p. a A" [8 G& z context区类型为Map,用于存储session、request、appliation、action、parameters等变量信息.
( R6 v& k$ s' n8 O- S0 r6 Y) _) n 9.ValueStack与OGNL关系3 y# y9 K) C* v5 Q, ~' M
OGNL:Object Graphic Navigation Language,对象图导航语言。
( w) S" h6 @- E Struts2使用OGNL访问ValueStack数据,即对属性值设置和获取。
# S4 E5 |% q% H l& [& W. g4 I. R OGNL访问ValueStack数据的方法如下:# h, f: [$ k1 [2 B
访问root区属性:表达式为"属性名"3 @2 I2 i7 }& @5 X( y; k, n$ x
访问context区变量:表达式为"#key",例如"#session.user"
: L! M) o% ~* n Q5 f 10.Struts2提供了标签+OGNL表达式,用于访问ValueStack数据
; d Z- ~' p1 b 7 z) O$ c- @# W: `. i$ ?) A
2 i+ M' I! e" m9 V8 D x3 H( Z
|
|