该用户从未签到
|
struts2
6 \' q: ~' T0 k# g2 g$ M# Y1.了解Struts2发展史,与webwork框架关系! A+ s* ^& j/ L6 V6 M1 F
2.Struts2体系结构
6 u n3 {, Y# l C控制器:FilterDisptacher(2.0,2.1版本),StrutsPrepareAndExecuteFilter(2.1.8,2.2版本)
0 Q" c0 x1 m! H3 ~ M模型:Action:用于业务处理。(可以不用必须继承父类和实现框架接口)
: N( ~' d4 D& I2 J- C% Q 拦截器:用于封装通用业务逻辑。
& e) b; k6 K4 [" q: v V视图:Result(提供了各种类型的Result组件,用于实现不同类型的响应信息)、标签+OGNL
) {$ U/ @8 C$ S `1 v# g4 |3.Struts2框架的配置
. P9 Q; }3 s5 V: T5 R9 W (1) struts-default.xml(jar包中自带的默认配置)
/ r5 s# X+ _( [& W, ` 配置了一些拦截器、Result组件的定义。
, w. T8 g) X8 s z2 y5 S (2) default.properties(jar包中自带的默认配置)! \+ e5 _+ W: Q: |7 H" j3 L
配置了框架的一些系统参数,例如请求扩展名、字符编码等。
, n+ ]# n) @8 m& u- s: v6 J+ n (3) struts.xml(开发者创建,默认在src下创建)1 c1 R9 C4 M8 _
用于配置Action组件、自定义拦截器组件、自定义的Result组件。
3 I* S2 T, k1 I$ v1 N (4) struts.properties(开发者创建,默认在src下创建)
" u6 ^. H( }" u5 d6 e 用于修改default.properties中的配置参数。$ p+ n4 U7 t$ l9 a0 @3 [
4.Struts2开发入门
/ G+ E+ ?7 Q/ `0 b' Q (1)创建Web工程,引入开发包
/ i" n6 c0 X- J- F+ O' z4 M struts2-core-2.1.8.jar
6 f8 F9 x' e7 o' A# y' |# H xwork-core-2.1.6.jar# `3 f/ d0 Z" N
freemarker-2.3.15.jar
2 X7 }$ A% p6 D) l f7 ]3 q ognl-2.7.3.jar
9 L, S8 S# A' S, N commons-fileupload-1.2.1.jar
% l* `. X4 M% Y' b8 b! I7 v (2)配置控制器,并添加struts.xml配置文件
: q8 }2 [( B) J+ X1 a2 x5 k' M- T (3)根据JSP请求编写Action组件
- a# `5 }0 \6 t$ }+ ? (4)编写struts.xml配置
6 a1 G/ d6 U0 d* z; f+ d& ?5.Struts2特点
9 J0 n1 c/ M/ p1 A# B3 ?7 X2 A (1)Action摆脱了对框架API依赖,也摆脱了对ServletAPI
: D( H0 k8 c, K0 G2 j! N (2)Action可测性增强
+ x' n! k: \) K0 u4 J- s8 t (3)提供了各种类型的Result,可以完成各种形式的响应
2 o3 f- q; o8 ^; C$ Z# v (4)易于扩展和整合其他技术
- _) D4 q( n1 p6 Z (5)提供了拦截器和拦截器栈机制
$ V) B& C0 d: }: [! I (6)Struts1中的Action使用了单例,Struts2是一个请求一个Action对象( D2 b% H0 m9 k: p( [
6.如何使用Session、Request、Application等对象9 y' a% r; |4 o ?, b: q. s6 u
(1)Struts2对原有session、request、application做了封装,可以通过Map结构使用。使用方式如下" k) P9 P" U+ k, o7 g
Map session = ActionContext.getContext().getSession();
6 o8 ^( e9 Y. P7 d Map application = ActionContext.getContext().getApplication();
/ M7 U) U$ T! G8 N- Y Map request = (Map)ActionContext.getContext().get("request");# z. }# ?* F! k& m( Y
(2)封装原理
1 l; u5 q$ U9 ]. h/ Z3 E( E public class SessionMap extends AbstractMap{2 m* @# p1 U$ C% I) o) l
HttpSession session;
Z9 f3 f1 q6 q4 z" I3 [ public SessionMap(HttpSession session){
- O/ E: ?1 X/ a9 T0 e( w0 B( r" V, } this.session = session;
' Q2 m G ?% p# t }8 ~8 o* d! N9 B8 ]( |% q
$ K( v# A( |6 W9 b* J public void put(Object key,Object value){: l% \$ j4 ^9 j. K6 m- c) Y
session.setAttribute(key.toString,value);
% {9 C4 d& q& A8 |' N2 v1 [ }
' o$ t' R- V" @+ J4 B3 ?. l# {8 v6 A * {' v% e) ]( A8 l7 }4 ?
public Object get(Object key){
1 O) |- V; \+ \7 F( } return session.getAttribute(key.toString());
( q' U/ {- G7 v3 L5 u! Z3 c }
4 @2 `6 u4 v& H4 V% J8 z }" c+ N& P6 d/ G5 H8 v6 X
! g- e1 W" |( z' l" Y. z# \9 s
(3)如果需要使用原有Servlet API类型,可以通过ServletActionContext获取- p& `2 j# q' o7 b5 V T* I: @# o$ M
, f: n3 x$ w% R, ]) N( F
7.Action相关配置
3 D. @3 O8 `" H (1)<package>元素的namespace属性,命名空间,默认值为/
/ g$ |1 K7 B) @/ a! h& G 对应请求是/工程/namespace/请求名.action
. E0 P3 S* P# c' U1 l (2)<action>元素的method属性,业务方法名,默认execute+ g9 U8 G+ A9 h8 O9 w, @3 U
可以指定Action方法名当做业务方法。
X i4 \* F: J8 ?" N (3)<param>元素
4 H. y9 W( [- w$ y4 L 可以为父元素对象指定属性值。. t* A# J; q N$ S2 J
(4)通配符*的使用; m2 ~9 |- p6 P% _
在<action>元素的name属性中可以使用*,*表示任意字符) E1 u8 j% u4 L+ f+ l7 F
在<action>元素的其他属性中可以使用{1}、{2}等引用通配符代表的值1 n( {/ d1 K" {: [# r+ Y- U
8.ValueStack作用及结构
! e2 Q% _) ~/ n: w0 m( W ValueStack存储了和请求处理相关的数据。包括session、request、action等。0 n0 e+ a8 c S. H W! r6 h
ValueStack包含root区和context区. M2 Z6 Q# l* ]' x7 K; h
root区类型为CompoundRoot继承了ArrayList(栈结构),存储于请求对应的Action对象。
4 w: X, b0 x' b1 p5 a context区类型为Map,用于存储session、request、appliation、action、parameters等变量信息.
; u% [7 N: ?' j 9.ValueStack与OGNL关系
# v* F3 w d2 f" g9 ^9 m OGNL:Object Graphic Navigation Language,对象图导航语言。3 |: m8 F! m3 V2 c# |! n
Struts2使用OGNL访问ValueStack数据,即对属性值设置和获取。& f5 B# E5 O2 \0 C/ y
OGNL访问ValueStack数据的方法如下: X# S; O% ~2 U
访问root区属性:表达式为"属性名"
& }9 D( b u; [9 J 访问context区变量:表达式为"#key",例如"#session.user"6 p$ }8 z3 w* C+ _* R+ O: |1 |$ ?
10.Struts2提供了标签+OGNL表达式,用于访问ValueStack数据
1 W7 q, I) b7 C# x 7 X2 i- |3 [' K/ k: m1 B- C
& u) b2 b1 ?4 O9 k _& \: y- @ |
|