该用户从未签到
|
struts2
* C" U! j- K c. Y1.了解Struts2发展史,与webwork框架关系+ }. [7 e0 ^1 u4 m8 K" s
2.Struts2体系结构7 F+ j& Y; @$ e: p# O6 }6 \
C控制器:FilterDisptacher(2.0,2.1版本),StrutsPrepareAndExecuteFilter(2.1.8,2.2版本)+ G5 Q" J Z; g
M模型:Action:用于业务处理。(可以不用必须继承父类和实现框架接口): I3 |' V2 J7 S; l6 q! A) H
拦截器:用于封装通用业务逻辑。9 T: S1 e6 x& F# @& N
V视图:Result(提供了各种类型的Result组件,用于实现不同类型的响应信息)、标签+OGNL5 F, {! R1 X1 P( Y. A3 o) R
3.Struts2框架的配置
3 x$ w+ _6 Z. u% R (1) struts-default.xml(jar包中自带的默认配置)" w: Q- u' W6 N. q5 G, B& F r
配置了一些拦截器、Result组件的定义。; g: z5 K# C9 _3 Y) D
(2) default.properties(jar包中自带的默认配置)
6 ]: C, j' p2 }! ^7 h 配置了框架的一些系统参数,例如请求扩展名、字符编码等。9 o9 r" T! C$ c e
(3) struts.xml(开发者创建,默认在src下创建)
* c6 h5 u( p& S/ k# S 用于配置Action组件、自定义拦截器组件、自定义的Result组件。! X" b7 U& V# \ l j) P& ?
(4) struts.properties(开发者创建,默认在src下创建)
$ [& @% u1 m0 Y1 D5 H4 `/ Z 用于修改default.properties中的配置参数。
_( e2 v2 ]/ I9 ~2 D9 C" `4.Struts2开发入门, W; T; t+ o) f* O/ m
(1)创建Web工程,引入开发包$ ]9 g' L: w2 L" b& s8 A! a
struts2-core-2.1.8.jar
3 y) g( u. c; v* Q7 q& Y xwork-core-2.1.6.jar% V; X h2 `+ {* ^6 h1 `
freemarker-2.3.15.jar- T- R) _( C9 |( Z
ognl-2.7.3.jar6 M# _7 k- E. s! l# n4 O9 A% A
commons-fileupload-1.2.1.jar# {, u- m( S! e
(2)配置控制器,并添加struts.xml配置文件# | |" }7 j# H& \/ x' M* t+ t! i0 v
(3)根据JSP请求编写Action组件
8 l' ^- [$ i% a (4)编写struts.xml配置* R$ `9 d' P s4 l8 ^2 H3 u, M
5.Struts2特点
$ a( S# x7 e& O3 Z& ]1 f (1)Action摆脱了对框架API依赖,也摆脱了对ServletAPI
0 G6 m6 F; U4 v (2)Action可测性增强0 L0 x8 u. B9 i+ X0 i6 ]
(3)提供了各种类型的Result,可以完成各种形式的响应+ {( C: R: \/ V1 P" ?
(4)易于扩展和整合其他技术" [4 B8 X! i* t x4 i8 [4 K, V2 a
(5)提供了拦截器和拦截器栈机制
4 m- |% L9 j. C- L* K (6)Struts1中的Action使用了单例,Struts2是一个请求一个Action对象
, X0 i* e2 `3 s$ d {. r8 r$ p6.如何使用Session、Request、Application等对象' \# v6 t6 K6 @/ ^( I# P- |
(1)Struts2对原有session、request、application做了封装,可以通过Map结构使用。使用方式如下+ f. i6 p7 ~8 ^- Q- H
Map session = ActionContext.getContext().getSession();. r2 R& r% `, r5 ?+ L- t
Map application = ActionContext.getContext().getApplication();# S0 F3 P( g& O! k
Map request = (Map)ActionContext.getContext().get("request");
q( C& M& a9 r: l( r i) X6 Y0 ? (2)封装原理
% q2 R2 D3 B v, J9 W6 W public class SessionMap extends AbstractMap{
9 G* Y( q% s" r. C' c2 W! Q3 h9 U HttpSession session;% @2 u/ _* k8 C( Y% X2 \
public SessionMap(HttpSession session){
8 u; B5 f- C' R this.session = session;) r* g* T& j8 z) g6 @4 B
}" F# y( G' M9 [6 O
, S$ O( U- Q# L0 ?
public void put(Object key,Object value){1 x, V# q8 D9 }& A) ?
session.setAttribute(key.toString,value);7 D, J4 a/ s p
}+ G* Y" q+ o5 p6 h
9 s; v N3 y+ K6 B0 \, D* @
public Object get(Object key){
1 X, d- Q8 W; Z, Y1 O, C! h return session.getAttribute(key.toString());' Z% @3 M' |" }; a
}
; L4 I; c+ F7 b* Y' Q0 y q' I7 Z }
0 S; `# `9 n% P) j; @, s , N2 l$ X$ S7 M
(3)如果需要使用原有Servlet API类型,可以通过ServletActionContext获取8 k9 j( D) a6 [/ W. ~1 V/ d3 r
5 n! W8 L& J* O' I% t 7.Action相关配置/ |+ O4 K: O1 M, G. f
(1)<package>元素的namespace属性,命名空间,默认值为/
7 H5 c8 k5 L2 d2 y2 Q |2 o 对应请求是/工程/namespace/请求名.action' T# |3 ]& V2 C j( Q. i0 E Z
(2)<action>元素的method属性,业务方法名,默认execute
6 O( d6 e1 ]7 `' R8 L 可以指定Action方法名当做业务方法。
" X5 v4 O& x( B+ e& O2 D0 H, l5 w# s (3)<param>元素
4 B4 `" ] [- X6 Z( W 可以为父元素对象指定属性值。1 e+ e: b1 s9 H) D& R* c' Y1 R
(4)通配符*的使用
* y, p9 V9 G. _$ r 在<action>元素的name属性中可以使用*,*表示任意字符0 U( K& E6 B2 l8 ?: \8 n' t" O
在<action>元素的其他属性中可以使用{1}、{2}等引用通配符代表的值
$ r6 } V+ K& S' |4 n, c 8.ValueStack作用及结构& Y" x, Z3 q4 T6 s
ValueStack存储了和请求处理相关的数据。包括session、request、action等。8 R4 C! E: z0 v; {# ]+ f! d2 m
ValueStack包含root区和context区
# l% T# n( u1 j- h8 V9 g root区类型为CompoundRoot继承了ArrayList(栈结构),存储于请求对应的Action对象。
# o$ V0 J+ C) j+ \5 Y context区类型为Map,用于存储session、request、appliation、action、parameters等变量信息.$ j7 J, b: x& U# @9 e o
9.ValueStack与OGNL关系' m' t/ @! T6 n9 u& o
OGNL:Object Graphic Navigation Language,对象图导航语言。9 e* i3 ?' K m$ c/ D
Struts2使用OGNL访问ValueStack数据,即对属性值设置和获取。7 o3 x; M# q, V& N2 @
OGNL访问ValueStack数据的方法如下:
! {: W3 p( Q3 j+ t; ] 访问root区属性:表达式为"属性名"7 Y$ t" {6 h2 L4 s. Z' Q: g
访问context区变量:表达式为"#key",例如"#session.user"
0 l% U; s% c. b. S; H 10.Struts2提供了标签+OGNL表达式,用于访问ValueStack数据
( S# H" ?4 a8 L/ u
' s% G# s2 b2 H( @; E5 w: F) }/ K# h- n
|
|