该用户从未签到
|
struts2: s" G* N( J4 \3 F
1.了解Struts2发展史,与webwork框架关系
1 m1 R3 {2 {, a; f/ H- R6 K4 n2.Struts2体系结构
4 R5 F+ J) d7 R' ]9 A" p C控制器:FilterDisptacher(2.0,2.1版本),StrutsPrepareAndExecuteFilter(2.1.8,2.2版本)
& ?8 n! X/ j$ u) Q. {( { M模型:Action:用于业务处理。(可以不用必须继承父类和实现框架接口)
9 p% N. l6 L/ L2 t3 O 拦截器:用于封装通用业务逻辑。
' O8 n( V5 [! \! | V视图:Result(提供了各种类型的Result组件,用于实现不同类型的响应信息)、标签+OGNL9 `: Y* O9 k2 ~3 R3 |
3.Struts2框架的配置7 S% ]4 ~$ p: X7 D# ]7 s
(1) struts-default.xml(jar包中自带的默认配置)
. h9 \4 I- H1 u% E) s7 r$ g 配置了一些拦截器、Result组件的定义。
7 L" k: c7 V Q. t (2) default.properties(jar包中自带的默认配置)! u1 J7 L: p5 g5 D6 Q
配置了框架的一些系统参数,例如请求扩展名、字符编码等。/ h/ ]( a& J4 f# A& Q* t
(3) struts.xml(开发者创建,默认在src下创建)
' V+ a4 L% y+ K: a" J+ i9 W 用于配置Action组件、自定义拦截器组件、自定义的Result组件。4 q, j5 M6 V' C, a
(4) struts.properties(开发者创建,默认在src下创建)
' u8 k8 z" y) z) T 用于修改default.properties中的配置参数。
; S# L! G" |- U+ R8 t$ q( K( o* _4.Struts2开发入门
, T4 `: x8 e. B% ^, U0 {; K (1)创建Web工程,引入开发包0 z$ m( \$ M" c1 N; H
struts2-core-2.1.8.jar' h" x( M0 q0 \0 X+ N$ e
xwork-core-2.1.6.jar( X! C/ g4 ]* F0 D1 [7 y
freemarker-2.3.15.jar
" f! o" J; x. V/ f0 a, v: C ognl-2.7.3.jar& n$ f2 c; d5 |
commons-fileupload-1.2.1.jar2 V7 `6 l' n) N" ]1 K
(2)配置控制器,并添加struts.xml配置文件* u* `1 a7 B: J
(3)根据JSP请求编写Action组件
# K1 ^4 b6 Y" I8 g+ p! _- z (4)编写struts.xml配置" c" |2 x' \+ B
5.Struts2特点; k' _9 N8 t+ @! H* \, D' T* q
(1)Action摆脱了对框架API依赖,也摆脱了对ServletAPI: e4 ^- w2 ~4 x/ y* x/ l0 V! h
(2)Action可测性增强9 n; x+ F- s$ b) _2 B' ~
(3)提供了各种类型的Result,可以完成各种形式的响应
9 Z5 W' i9 g( P# W4 g (4)易于扩展和整合其他技术* v K/ \+ }5 I6 O, D+ l! X& |
(5)提供了拦截器和拦截器栈机制
c w# e9 M( o4 c$ y9 \ (6)Struts1中的Action使用了单例,Struts2是一个请求一个Action对象/ y& V' I4 W7 ]
6.如何使用Session、Request、Application等对象
" v, O$ S$ I5 B# e' Q- F- W (1)Struts2对原有session、request、application做了封装,可以通过Map结构使用。使用方式如下4 _! W; E/ o4 d8 s$ l8 Y
Map session = ActionContext.getContext().getSession();
8 V8 w) y2 r6 U; R Map application = ActionContext.getContext().getApplication();
6 H. X0 `5 a$ U8 k/ C, W6 r Map request = (Map)ActionContext.getContext().get("request");
9 P5 K( d& K! _0 }5 Z8 r (2)封装原理6 q0 {, @( A6 m; H: N* Q! Q5 p% x
public class SessionMap extends AbstractMap{
: s% Q/ ]$ s4 B# ]& t HttpSession session;
7 c+ _; D4 Z8 \+ C public SessionMap(HttpSession session){
0 L9 q) k# }' D" G9 @ this.session = session;, X3 x R% `3 k% f- T; B
}" E, D# r* H' j
! Q# W$ H4 s. L, _2 R9 ^
public void put(Object key,Object value){8 N1 j' O. Q+ D7 ? X: a
session.setAttribute(key.toString,value);$ w; l! E8 j* ^1 s+ L! h* j3 `
}. W& w9 ^7 f5 v. F+ G* n# m
0 h$ M% b( T$ t
public Object get(Object key){' x+ `( ^: K2 i: v7 x4 M" [: h! V
return session.getAttribute(key.toString());
8 c9 ^9 C! i9 N3 M }
* W" X9 @+ {2 @3 { }
4 Z, R; r9 `/ K) h
* V5 p- F9 n* ] (3)如果需要使用原有Servlet API类型,可以通过ServletActionContext获取. u/ t0 M/ u, U: v
6 ?# |; S3 i6 z t7 t. k3 ?; V, f
7.Action相关配置1 L" y1 J, g& L
(1)<package>元素的namespace属性,命名空间,默认值为/# a; g- ~5 j1 q
对应请求是/工程/namespace/请求名.action1 J x4 R! n0 \/ ^9 j: l" w
(2)<action>元素的method属性,业务方法名,默认execute
' G V" [+ v0 @3 f U3 O' e8 M 可以指定Action方法名当做业务方法。
% o8 m, k, r: Y (3)<param>元素! f9 k) y/ N4 X, y! y4 L; v
可以为父元素对象指定属性值。9 D& p2 W( \: t/ f" K3 i. e5 D
(4)通配符*的使用
) U% w2 R7 P* H1 A# u/ X 在<action>元素的name属性中可以使用*,*表示任意字符1 M; b$ O: o7 p5 h* J' ~7 ]
在<action>元素的其他属性中可以使用{1}、{2}等引用通配符代表的值/ _) N) _' G9 U# R* X
8.ValueStack作用及结构5 J6 v) p7 e7 e+ f) ^
ValueStack存储了和请求处理相关的数据。包括session、request、action等。
* t4 e6 }7 T1 ~. I7 k+ v ValueStack包含root区和context区2 I6 i) ?+ X+ q( [% A6 ~" U! r
root区类型为CompoundRoot继承了ArrayList(栈结构),存储于请求对应的Action对象。( J3 [* N0 X" W8 z. w/ Q; z& n/ n
context区类型为Map,用于存储session、request、appliation、action、parameters等变量信息.
/ E% |4 o6 x7 ~2 L& O 9.ValueStack与OGNL关系
# M# {+ s- Z9 M. Z: o' j+ S- U9 Q OGNL:Object Graphic Navigation Language,对象图导航语言。4 E6 d( f& B8 i/ [! H7 B+ D
Struts2使用OGNL访问ValueStack数据,即对属性值设置和获取。
& h- s% k* P& P" @+ m OGNL访问ValueStack数据的方法如下:' v8 X2 T1 K: o- D
访问root区属性:表达式为"属性名"
: G4 r: N: D% s# o1 q 访问context区变量:表达式为"#key",例如"#session.user"* g j1 G* t$ J! K
10.Struts2提供了标签+OGNL表达式,用于访问ValueStack数据
, Y4 f9 Q; p, \1 ]& y' A# H 0 D" p# Q1 Z6 P' z# B$ m: K* M
$ t" J8 ~2 B( g2 F
|
|