struts2 2 B6 A! o5 a) J1.了解Struts2发展史,与webwork框架关系 / u. S3 ~$ ~/ q( r# W# r2.Struts2体系结构 7 v. F: F# T+ P$ [- C* A/ c C控制器:FilterDisptacher(2.0,2.1版本),StrutsPrepareAndExecuteFilter(2.1.8,2.2版本)$ k. U% e& E" t/ ~9 z8 J. U2 r( u
M模型:Action:用于业务处理。(可以不用必须继承父类和实现框架接口)5 E, E) h1 D+ q+ v$ u H6 j
拦截器:用于封装通用业务逻辑。2 D/ f/ W ], k6 D( c2 ~7 f/ G @
V视图:Result(提供了各种类型的Result组件,用于实现不同类型的响应信息)、标签+OGNL 6 m$ `5 [6 s! q3.Struts2框架的配置8 m4 h+ L. _9 |( w
(1) struts-default.xml(jar包中自带的默认配置) - J$ O }0 g2 g% ~ 配置了一些拦截器、Result组件的定义。 7 t' |. N9 c( G% p (2) default.properties(jar包中自带的默认配置): }2 a0 h4 N4 H; P/ |, [& h! V
配置了框架的一些系统参数,例如请求扩展名、字符编码等。 ' K/ _2 _) [! m& r- ^2 K (3) struts.xml(开发者创建,默认在src下创建)4 G8 Q( j; ~* q+ _( ]# v( X5 l7 O
用于配置Action组件、自定义拦截器组件、自定义的Result组件。 ; J. C$ b3 X1 c, m (4) struts.properties(开发者创建,默认在src下创建), D2 T. K, Y1 M7 u$ | s; Z5 c& m
用于修改default.properties中的配置参数。 1 _, s5 u3 d- c& O2 h( E. }, L4.Struts2开发入门1 y- y5 u- r5 N1 m4 }. r! i
(1)创建Web工程,引入开发包 - L; e+ Q+ ?/ j _' l% q struts2-core-2.1.8.jar7 Y& w1 a8 C: `% S W% V2 X
xwork-core-2.1.6.jar; d) _: ~% B, i+ t, B: E) _
freemarker-2.3.15.jar 7 f2 [' S% S" |" H% n) U ognl-2.7.3.jar & ~& S, L2 m0 i) I# F0 G commons-fileupload-1.2.1.jar2 N3 J$ S+ D( z+ }9 G
(2)配置控制器,并添加struts.xml配置文件 ; j, O' o6 b- M. |& H3 f7 l2 w (3)根据JSP请求编写Action组件6 c; H: ^9 w. b b* V
(4)编写struts.xml配置 : X( g8 ^* b' W5.Struts2特点3 C3 k7 }8 D% A
(1)Action摆脱了对框架API依赖,也摆脱了对ServletAPI5 R; r2 Q) d& M% Q0 T% W% C/ @4 a# T
(2)Action可测性增强, @, j2 ]% f+ `+ W
(3)提供了各种类型的Result,可以完成各种形式的响应 5 H% a( S6 q6 e, U/ x' P1 Y (4)易于扩展和整合其他技术 $ Q2 ~3 N. r6 Z: V4 b! |% ~ ^ (5)提供了拦截器和拦截器栈机制 / o/ o' c5 t' ^2 ? (6)Struts1中的Action使用了单例,Struts2是一个请求一个Action对象 + T/ V3 x4 w1 Q9 e( L7 t6.如何使用Session、Request、Application等对象3 M. L% {) G t, z- X- z6 R/ n
(1)Struts2对原有session、request、application做了封装,可以通过Map结构使用。使用方式如下! i; k, E7 e. A+ r0 f" s. e
Map session = ActionContext.getContext().getSession();9 t; w; y+ \) R; J
Map application = ActionContext.getContext().getApplication(); + d% e" W' T3 ^ Map request = (Map)ActionContext.getContext().get("request");0 H3 H4 I+ u9 r) x8 s, m
(2)封装原理, U$ Y8 h. ~0 l) i
public class SessionMap extends AbstractMap{, b' u0 Z0 u$ X: X- c
HttpSession session;8 y' C% |5 `9 N1 w& f" a
public SessionMap(HttpSession session){ 5 g$ i& p# x p3 T8 C this.session = session; W/ ^8 L$ J4 e M5 |- o, M
}' n" D: n; [9 t0 [5 ?* M
+ W. J+ b7 M. B- p( v2 ^" D public void put(Object key,Object value){! P* e) C; S( L% B. e- t; Y( S: E, C
session.setAttribute(key.toString,value); 3 S5 a, V+ h& P5 k }0 g* c/ K* j) a) o" G" J: \
$ g7 d; j3 H) | public Object get(Object key){ 1 ]& d O; ~8 W return session.getAttribute(key.toString()); l V [9 K, `
}5 w* a7 U2 S( h9 ~+ e
} % z! d4 e* B% _, N1 n 0 D3 F7 L; L9 K8 q2 i (3)如果需要使用原有Servlet API类型,可以通过ServletActionContext获取1 z+ q6 z( X3 {7 o1 [0 f
T% o; q& ~/ ? D! d$ c' h 7.Action相关配置/ U7 `2 V! B l4 |! ~
(1)<package>元素的namespace属性,命名空间,默认值为/: x0 j8 j0 o& k9 V. q
对应请求是/工程/namespace/请求名.action 6 W, I# C9 \& @4 j (2)<action>元素的method属性,业务方法名,默认execute0 j7 \1 g& y. g# Y' T5 K$ W
可以指定Action方法名当做业务方法。3 k- _# @. _5 R/ R
(3)<param>元素 ) A* [- v# ]1 L& C 可以为父元素对象指定属性值。& k* L! x) Q8 ~7 ^) u! x! T. S
(4)通配符*的使用- U8 R& H- [) m: n0 {' a5 l7 [6 c2 U* q
在<action>元素的name属性中可以使用*,*表示任意字符 7 {$ O( R/ N# W1 j) o& o3 H2 r 在<action>元素的其他属性中可以使用{1}、{2}等引用通配符代表的值 o3 p' p0 a& q4 X6 n% p5 I
8.ValueStack作用及结构9 V( O* t9 z z* M4 k! p8 L+ ]
ValueStack存储了和请求处理相关的数据。包括session、request、action等。 ( O# I8 [) U% ~+ Y ValueStack包含root区和context区 " X- ]( I _8 z: A' u root区类型为CompoundRoot继承了ArrayList(栈结构),存储于请求对应的Action对象。+ l, l/ Y( K5 c. Y; o, F
context区类型为Map,用于存储session、request、appliation、action、parameters等变量信息. : y: y1 J6 G; h4 p6 h% V 9.ValueStack与OGNL关系 " V' G1 Z' X5 X$ A w OGNL:Object Graphic Navigation Language,对象图导航语言。! h+ C" | Q. u4 u
Struts2使用OGNL访问ValueStack数据,即对属性值设置和获取。 $ S; t% K L& V2 i# z OGNL访问ValueStack数据的方法如下: 3 Y: d; f: W0 ?1 v, o# X 访问root区属性:表达式为"属性名"- t% G/ ?, {9 {2 ~. f p
访问context区变量:表达式为"#key",例如"#session.user", ]7 b* B5 }% h! |4 ~% F
10.Struts2提供了标签+OGNL表达式,用于访问ValueStack数据 ; R3 f( I, s0 w4 |+ g 5 ?8 N5 u1 D- R' @ 8 J2 Y! D4 m6 e- T7 A' O. i& |! z