|
该用户从未签到
|
struts2
/ }0 o `! w5 K4 G/ p. W$ j1.了解Struts2发展史,与webwork框架关系7 B% `$ X9 H4 w t7 [5 I: T6 @" W
2.Struts2体系结构* n# } y6 i+ C" E! V2 L- u8 ?3 U" p
C控制器:FilterDisptacher(2.0,2.1版本),StrutsPrepareAndExecuteFilter(2.1.8,2.2版本)
, R! |; H' [/ O/ n/ P6 ^ M模型:Action:用于业务处理。(可以不用必须继承父类和实现框架接口)- e9 F0 m; o, e% Z% P$ E3 n
拦截器:用于封装通用业务逻辑。0 }" E9 O. N* f; x2 M4 { H
V视图:Result(提供了各种类型的Result组件,用于实现不同类型的响应信息)、标签+OGNL9 F) r0 X- P) J; O4 m* c9 S
3.Struts2框架的配置( @, C4 S8 G. M- I4 o
(1) struts-default.xml(jar包中自带的默认配置)5 |% ~4 S' e7 l
配置了一些拦截器、Result组件的定义。
4 J. d u% \* Z: k( k2 { (2) default.properties(jar包中自带的默认配置)7 t) t- V5 G/ y1 O
配置了框架的一些系统参数,例如请求扩展名、字符编码等。
, V! U- f/ V2 N (3) struts.xml(开发者创建,默认在src下创建)
' h) N/ x0 m0 \% z3 a 用于配置Action组件、自定义拦截器组件、自定义的Result组件。
8 ^* ^1 t' k; h) G7 K5 n8 L3 j2 I$ w (4) struts.properties(开发者创建,默认在src下创建)
0 B" ~. X7 t" L/ n. V) N 用于修改default.properties中的配置参数。, Y9 Y+ D$ w" X7 u# L
4.Struts2开发入门7 W* u w& @( t1 f8 n* n/ A2 C& T
(1)创建Web工程,引入开发包
( V3 K- M& |# Q/ h struts2-core-2.1.8.jar
3 t5 B1 z# C1 k& H xwork-core-2.1.6.jar
) S0 h1 ]! |; Z3 e freemarker-2.3.15.jar" Q |, [6 w* I3 T' g. ~
ognl-2.7.3.jar
% N6 m( d9 F t( k- { commons-fileupload-1.2.1.jar
7 v( |# |7 I! K) ^! G: y$ ]4 U& u (2)配置控制器,并添加struts.xml配置文件
% P @( \' c) a# x/ X2 M/ x (3)根据JSP请求编写Action组件" _; W6 ?! r' l6 u B
(4)编写struts.xml配置
5 \; Y3 g/ h8 i) Y5.Struts2特点( [4 v: y5 D4 \8 H$ g1 K5 q
(1)Action摆脱了对框架API依赖,也摆脱了对ServletAPI
% R {8 b+ G7 B1 P2 I! B6 N5 A (2)Action可测性增强( a1 G% ^0 X7 o; T4 a# a1 ?
(3)提供了各种类型的Result,可以完成各种形式的响应
6 A C+ j- @' X* w (4)易于扩展和整合其他技术
0 w; U1 y: m9 z4 A. Y (5)提供了拦截器和拦截器栈机制5 m, N1 e: r d+ X1 {; D8 |; Y3 F, T
(6)Struts1中的Action使用了单例,Struts2是一个请求一个Action对象$ K0 ?' r' p9 `1 Q U
6.如何使用Session、Request、Application等对象
3 w9 O8 q$ F, u, |! j4 x. j: v5 X (1)Struts2对原有session、request、application做了封装,可以通过Map结构使用。使用方式如下& B: D* b2 ?. r$ f
Map session = ActionContext.getContext().getSession();
" m7 f- F* @( m9 _0 { Map application = ActionContext.getContext().getApplication();* _+ L$ D9 K# j
Map request = (Map)ActionContext.getContext().get("request");
2 x5 l' r) z3 Z" G6 d (2)封装原理/ g- G7 `$ j1 K3 G- j( i+ C, {" j
public class SessionMap extends AbstractMap{
2 \( d9 W' @/ C5 f0 N HttpSession session;
, C# z( S. j+ }( J public SessionMap(HttpSession session){
: m; Z$ T& y( i this.session = session;
1 d4 M0 d9 L9 v/ a# C }
" y9 ~, V( t6 x5 j( ]
7 z' e+ A" |4 z* d public void put(Object key,Object value){
$ ~5 Z4 C8 ?& d& Z4 } session.setAttribute(key.toString,value);
- _+ u* ^! i L0 T4 W! y! f }% m/ l+ [0 v/ j3 U$ U8 E2 r
8 m) Q6 C# C: A( @4 O# R3 b
public Object get(Object key){2 X- N. Q! A6 q$ ~+ x/ s
return session.getAttribute(key.toString());
7 w& Q/ G, O/ L. @; H- j. n }: |2 o2 ]9 j$ _5 U( n
}5 L' p6 i% L* f( V4 x2 m; p
- H5 r+ C1 k& L2 i: C; ^+ C, v$ O9 { (3)如果需要使用原有Servlet API类型,可以通过ServletActionContext获取6 T' g( J3 x: u, ?
% g, t8 u* ~0 S" @: S 7.Action相关配置
7 y5 P, t0 m! Z6 V/ { B (1)<package>元素的namespace属性,命名空间,默认值为/
* }8 @6 M+ r! j6 g% R8 e" L 对应请求是/工程/namespace/请求名.action
0 j* u1 R# ]1 D' k% d& ^ (2)<action>元素的method属性,业务方法名,默认execute" i8 R: C+ G2 A6 V; l" g8 t
可以指定Action方法名当做业务方法。 t/ t+ Y: _% ^% J1 W$ o
(3)<param>元素2 Q6 ^4 D( \+ }, a
可以为父元素对象指定属性值。: O) J$ h/ T+ G
(4)通配符*的使用
$ m8 t" v0 @9 t# E6 U9 N 在<action>元素的name属性中可以使用*,*表示任意字符% }) n+ ?* X. \: k2 J
在<action>元素的其他属性中可以使用{1}、{2}等引用通配符代表的值6 O$ m @3 G! n2 l9 T$ d
8.ValueStack作用及结构
% w c% x( Q, Q ValueStack存储了和请求处理相关的数据。包括session、request、action等。
, f' V% `2 j9 w4 R- _. s ValueStack包含root区和context区! Q4 Q; ^! ~9 n0 \2 `
root区类型为CompoundRoot继承了ArrayList(栈结构),存储于请求对应的Action对象。
! `! Y6 Z2 \( l: c2 i' ?& H context区类型为Map,用于存储session、request、appliation、action、parameters等变量信息.
: |$ n, l4 Q/ ^ 9.ValueStack与OGNL关系" I+ u2 N5 V) G; ` m
OGNL:Object Graphic Navigation Language,对象图导航语言。
% E p7 d1 J( e2 D% j. q9 S Struts2使用OGNL访问ValueStack数据,即对属性值设置和获取。8 o& C4 b) H5 V2 N1 `
OGNL访问ValueStack数据的方法如下:! D; }$ a3 o8 R
访问root区属性:表达式为"属性名"# k0 }4 ]! a5 p& h5 P
访问context区变量:表达式为"#key",例如"#session.user"
3 [) T. y; J m 10.Struts2提供了标签+OGNL表达式,用于访问ValueStack数据
+ u4 s8 | ]9 \: \6 Y, f$ Y 3 |* L, J$ a9 A% |" [
/ d* M" I+ X0 |) X1 K( ~ |
|