|
该用户从未签到
|
struts2
- K/ p, [8 ~: n1.了解Struts2发展史,与webwork框架关系+ u; [# T: n: K/ A+ J* H8 T
2.Struts2体系结构9 p2 C3 ` X- ~: _$ [
C控制器:FilterDisptacher(2.0,2.1版本),StrutsPrepareAndExecuteFilter(2.1.8,2.2版本)
; R/ Z$ w/ C9 A/ t M模型:Action:用于业务处理。(可以不用必须继承父类和实现框架接口)6 U' ]: J4 a* p; ~! e- J
拦截器:用于封装通用业务逻辑。
4 p+ i* x- g1 o J$ u @9 Z# C V视图:Result(提供了各种类型的Result组件,用于实现不同类型的响应信息)、标签+OGNL
4 [0 i: l$ T1 C: @: H3.Struts2框架的配置5 D9 Q; S+ k0 W- c' i$ N0 R9 t
(1) struts-default.xml(jar包中自带的默认配置)
* J% S) @. @: q, [ 配置了一些拦截器、Result组件的定义。
/ k( Z' {7 k- x (2) default.properties(jar包中自带的默认配置)
! Y4 H' f, `5 G0 ?% J 配置了框架的一些系统参数,例如请求扩展名、字符编码等。8 d4 I v% |) w
(3) struts.xml(开发者创建,默认在src下创建)# {% K. k6 h. k' ]8 v3 J4 N
用于配置Action组件、自定义拦截器组件、自定义的Result组件。
0 U$ f/ L. @/ Q0 F/ I. H) k/ W (4) struts.properties(开发者创建,默认在src下创建)
, i a- M" F4 @& i4 J r, T5 _; m 用于修改default.properties中的配置参数。
, A z! X ~5 c2 C. c ?4.Struts2开发入门$ ?. `! |8 x2 E0 V+ f% n
(1)创建Web工程,引入开发包! t" a; y: ` \" ^9 S# ?* e
struts2-core-2.1.8.jar
9 ]' D0 B; d$ s- c3 _% z! D* \ xwork-core-2.1.6.jar) ^* K, K' k" L
freemarker-2.3.15.jar/ b0 y& M q4 P/ {$ S+ n+ U
ognl-2.7.3.jar5 N. N% O' y" t% ]2 H
commons-fileupload-1.2.1.jar: H; |' b/ b) r E. ]
(2)配置控制器,并添加struts.xml配置文件
; _6 K- p9 v. V D# q# K2 f (3)根据JSP请求编写Action组件: y& F: q6 j6 t. z! q
(4)编写struts.xml配置! [% l0 r: _( b! i4 \
5.Struts2特点1 W1 b" r8 E2 V
(1)Action摆脱了对框架API依赖,也摆脱了对ServletAPI
$ I4 L( r( q6 h) \/ L, f O (2)Action可测性增强
8 r6 p$ z1 Y5 k' E3 a: v (3)提供了各种类型的Result,可以完成各种形式的响应 p2 j# h% Z( H! f. l
(4)易于扩展和整合其他技术2 }1 _' }( N/ @, E
(5)提供了拦截器和拦截器栈机制. k; H2 Z) K; f$ l# ?
(6)Struts1中的Action使用了单例,Struts2是一个请求一个Action对象
) Y) M9 M8 O, E5 W, k, d6.如何使用Session、Request、Application等对象
3 \9 a% A; _" k& Q9 i5 U+ J (1)Struts2对原有session、request、application做了封装,可以通过Map结构使用。使用方式如下
V% n Z: _4 l$ `" F7 m( t Map session = ActionContext.getContext().getSession();5 B5 a3 Y! k2 D0 S* }+ |, |8 P' A" F
Map application = ActionContext.getContext().getApplication();# f% n u1 v Z
Map request = (Map)ActionContext.getContext().get("request");" T6 C7 }- b5 z
(2)封装原理
; t' x- _, b7 Z2 j) J public class SessionMap extends AbstractMap{
* B- N# ?- H7 h2 B* c HttpSession session;
2 R& [% E7 L; u- l* ]7 A! B3 P public SessionMap(HttpSession session){- g' w O) R' [( n! L
this.session = session;
5 B9 H" u+ H# N- w8 V3 r }9 m# A4 A3 R! W, {2 d
- K" U9 R4 Y4 [ }# w u6 i
public void put(Object key,Object value){
, _3 l# i( ?/ I" U5 x, O8 V1 | session.setAttribute(key.toString,value);- N8 t; i9 ]% H& Q* _3 X
}
+ B$ n& U2 l7 Z- {- ]" q! ^
6 \4 p+ `0 J- Y- r2 r* y4 d) O/ f- { public Object get(Object key){
1 A2 o& C$ d b& `! q8 @ return session.getAttribute(key.toString());0 z1 ~% c5 y$ O$ |5 q! |/ ~
}
4 V+ m1 g1 ?% b# ], ?4 N }
' w& ]: V9 ^0 l4 U c8 G X, v* q . P# \1 N' N# W" c6 |0 W2 n
(3)如果需要使用原有Servlet API类型,可以通过ServletActionContext获取
! U+ H) S$ `2 f3 B ; A9 ~5 H% F5 T2 `6 Q% r% g
7.Action相关配置
' E) m3 V5 p+ P5 O3 F9 p6 h (1)<package>元素的namespace属性,命名空间,默认值为/
+ Y% a7 A2 s3 R4 v3 _0 C 对应请求是/工程/namespace/请求名.action
1 }5 l1 a2 @- L9 \ (2)<action>元素的method属性,业务方法名,默认execute
l: X5 v' J r 可以指定Action方法名当做业务方法。
: J$ g0 Y( O8 P$ Y3 r! i7 v" \ (3)<param>元素+ X- R* J/ Y; ]: U3 N
可以为父元素对象指定属性值。1 k1 r3 F5 I. L! W6 _
(4)通配符*的使用
( p1 x. W5 V7 m! a 在<action>元素的name属性中可以使用*,*表示任意字符
9 A6 i4 h; V. }# p% K8 ?$ I, B; C# M 在<action>元素的其他属性中可以使用{1}、{2}等引用通配符代表的值. L) b2 p" x6 s- O+ M. W7 _' f
8.ValueStack作用及结构
0 |6 ?: s4 H3 u: E ValueStack存储了和请求处理相关的数据。包括session、request、action等。
/ t& K5 Y9 c. q! P( T) W ValueStack包含root区和context区* ^$ E: x; b, m% i. g
root区类型为CompoundRoot继承了ArrayList(栈结构),存储于请求对应的Action对象。
& j' l8 ^# T* ~ context区类型为Map,用于存储session、request、appliation、action、parameters等变量信息.
) B7 G w" @ I- J0 q 9.ValueStack与OGNL关系
5 R% `1 K# `$ S- c: n# o OGNL:Object Graphic Navigation Language,对象图导航语言。
: z# z& b6 |! g/ v: U4 s Struts2使用OGNL访问ValueStack数据,即对属性值设置和获取。$ p4 z! S* L# N- V5 m
OGNL访问ValueStack数据的方法如下:
7 z. u1 Y* _3 }) ?; d2 q+ Q7 w 访问root区属性:表达式为"属性名") y/ y& t: r2 u! b
访问context区变量:表达式为"#key",例如"#session.user"7 a& a) o9 A" e _; { m
10.Struts2提供了标签+OGNL表达式,用于访问ValueStack数据4 r) [8 ?+ ` y; }8 K* k$ o' {. e& |
0 C% V2 w* q: I7 d. s- K
' ?4 c5 V& F& d- f
|
|