该用户从未签到
|
struts2
+ C; @( L# L0 _3 a1.了解Struts2发展史,与webwork框架关系
* l. T% G% X9 T1 \1 }) g) K3 F3 `3 i2.Struts2体系结构% \$ R1 q$ M5 ?) X" t
C控制器:FilterDisptacher(2.0,2.1版本),StrutsPrepareAndExecuteFilter(2.1.8,2.2版本), k+ | Y0 ?& k# C. E
M模型:Action:用于业务处理。(可以不用必须继承父类和实现框架接口)
7 k2 M3 ~" W2 b 拦截器:用于封装通用业务逻辑。
0 o, x5 }8 m0 t/ c- Q9 W V视图:Result(提供了各种类型的Result组件,用于实现不同类型的响应信息)、标签+OGNL; E( d6 o5 X% ]. `
3.Struts2框架的配置/ |0 E6 y; C$ H. B8 [* ]0 e
(1) struts-default.xml(jar包中自带的默认配置)
0 O1 r' i/ e- B; e3 [ 配置了一些拦截器、Result组件的定义。/ c; I+ ^) u: ?, v
(2) default.properties(jar包中自带的默认配置). i8 }3 ?# K8 s' g
配置了框架的一些系统参数,例如请求扩展名、字符编码等。
3 G+ ]8 u. x$ k9 J (3) struts.xml(开发者创建,默认在src下创建)
, J% d+ C5 F( Q) `: Y 用于配置Action组件、自定义拦截器组件、自定义的Result组件。
! {/ r7 }& z* } (4) struts.properties(开发者创建,默认在src下创建)
" l) {! U4 B2 d% l5 O1 E8 n; c 用于修改default.properties中的配置参数。8 C0 D+ ?- N5 `9 x- }* {" d1 D$ ?
4.Struts2开发入门9 X- D2 ?5 t" l. }& o- ^
(1)创建Web工程,引入开发包" i+ a# L% G+ R4 H# J
struts2-core-2.1.8.jar
+ p. [6 h6 p& I" R/ D xwork-core-2.1.6.jar
; G( l& J. c# P0 M freemarker-2.3.15.jar7 s0 G, H, y+ a6 Z! Y
ognl-2.7.3.jar
3 x9 f9 I5 R* V0 m! Z% s7 n7 w commons-fileupload-1.2.1.jar# S1 O% K! b* Z8 I
(2)配置控制器,并添加struts.xml配置文件
! ~+ M6 b& r& I- Y8 [* M (3)根据JSP请求编写Action组件; q1 J0 p2 ?6 g U
(4)编写struts.xml配置
5 a8 N9 p) |# K* P5.Struts2特点
& r4 _4 } g& p. m4 q7 h' l (1)Action摆脱了对框架API依赖,也摆脱了对ServletAPI B( A2 Z: h! A/ q( u% V+ ` g2 W
(2)Action可测性增强
M& T3 I+ y7 Z. u! t9 y7 j (3)提供了各种类型的Result,可以完成各种形式的响应% Z. ^! w. t j$ h
(4)易于扩展和整合其他技术
9 B' K7 y6 S$ x6 z+ ?- { (5)提供了拦截器和拦截器栈机制; t- j, c( [6 W. ?3 J1 P9 L3 r
(6)Struts1中的Action使用了单例,Struts2是一个请求一个Action对象1 [- z: O* M7 K" K4 l
6.如何使用Session、Request、Application等对象 c8 S1 T; X2 W- ~8 \. _/ [
(1)Struts2对原有session、request、application做了封装,可以通过Map结构使用。使用方式如下( p$ a( S% d* ?
Map session = ActionContext.getContext().getSession();2 |# B+ U7 I" s$ w9 l% Y# Y
Map application = ActionContext.getContext().getApplication();- l4 s% }; ?: L, }! E( s
Map request = (Map)ActionContext.getContext().get("request");
# u/ X- r8 z7 @, f- } (2)封装原理
; g, h H, V2 d public class SessionMap extends AbstractMap{( s2 V- Z! v4 f; H
HttpSession session; }1 g) {/ w v2 {
public SessionMap(HttpSession session){' I/ B% `3 O; p. d# D0 D- V% `
this.session = session;8 R5 ~8 E' t+ M' U* i! F
}
^7 s# r% O5 W' }3 F! n' [9 W 9 o% g3 @0 F/ c
public void put(Object key,Object value){
0 {1 f3 f! r( F& }' g session.setAttribute(key.toString,value);" a9 r% U: D6 f' v
}
( t* l& o* m8 P# `
5 J( p& q7 a2 n. Z: W7 s) m public Object get(Object key){
! u% _9 ?$ k9 q, B+ }9 l$ W return session.getAttribute(key.toString());
' U0 y7 s0 R" q% y }. z$ V4 S& c7 C2 a" `5 U
}
$ K9 ?9 `$ S) u6 ?% f# x 4 {* u4 C, ~2 r
(3)如果需要使用原有Servlet API类型,可以通过ServletActionContext获取
" [/ ?; w) p$ m! A l/ G/ G* N( G- u
7.Action相关配置
# v% b* {& T0 c, |( Q (1)<package>元素的namespace属性,命名空间,默认值为/9 q) L% X, T+ [9 M9 N; L
对应请求是/工程/namespace/请求名.action
; L6 X, [9 j6 P( c5 D (2)<action>元素的method属性,业务方法名,默认execute% Q4 i6 C; q' T* E+ a! _/ i8 N
可以指定Action方法名当做业务方法。
' _# A8 V8 R- p5 n (3)<param>元素
/ f9 w1 O% i4 q& X 可以为父元素对象指定属性值。, }) m% T0 O& t" c5 u+ \
(4)通配符*的使用
: w; r+ X8 f& h) U# J/ W 在<action>元素的name属性中可以使用*,*表示任意字符9 Q) y( S7 j) _( ~
在<action>元素的其他属性中可以使用{1}、{2}等引用通配符代表的值
1 S) }) i2 \& w/ I 8.ValueStack作用及结构
9 O3 `9 Q2 N% O1 [7 j: C' w ValueStack存储了和请求处理相关的数据。包括session、request、action等。
& }4 a/ b. \* M7 W2 i8 G ValueStack包含root区和context区2 o6 m, N5 y! @2 T6 {1 z+ E+ q1 B
root区类型为CompoundRoot继承了ArrayList(栈结构),存储于请求对应的Action对象。
6 c' N4 p, ~+ l* {, m' l0 O context区类型为Map,用于存储session、request、appliation、action、parameters等变量信息.
' n& [+ E8 l# o8 ~$ c7 Q$ E 9.ValueStack与OGNL关系
8 F7 C0 H" p1 A; T5 G% _1 y OGNL:Object Graphic Navigation Language,对象图导航语言。2 \" x7 W0 Y4 Q3 O9 @ S: e% g
Struts2使用OGNL访问ValueStack数据,即对属性值设置和获取。
k. I5 Z+ ?. u( g2 F( r. Q+ |7 Q OGNL访问ValueStack数据的方法如下:* D) L9 g. A0 ?" x# c6 E# ]
访问root区属性:表达式为"属性名"
$ }) T( ^& H0 u1 q' f5 ?- X 访问context区变量:表达式为"#key",例如"#session.user"1 L1 e# R# @1 b# _% L) l9 X
10.Struts2提供了标签+OGNL表达式,用于访问ValueStack数据
. D# T9 [4 W3 Y8 I . j( H) s1 t' H0 c6 z3 f
' w; B7 N* q( M0 t |
|