|
一:struts2的配置文件有哪些,相对应的作用是什么? Web.xml:包含所有必须的框架组件的web部署描述符.Struts2主要加载前端控制器及初始化参数.
/ _& j4 M" f5 zStruts.xml:定义应用自身使用的action映射,拦截器及常量,result/view定义.
+ Y0 a" G! Z$ Y5 OStruts-default.xml:定义框架自身用的action映射及result , Q& U% r0 k( t
Struts-plugin.xml:struts插件使用的配置文件
. b0 P+ V7 t6 K& I1 R, d' S. I9 UStruts.properties:定义框架自身的全局变量及框架属性. 8 v) [' P* Q y
! p. C' ?( Q1 V* y% `- s二:配置文件的加载顺序
4 V1 Z c, A5 G0 D6 T. ]. H. hStruts-default.xml-->struts-plugin.xml-->struts.xml-->struts.properties-->web.xml
& Y1 n7 ~( Q% {4 I x注:若之前的配置文件设置过某一属性,则以后加载的配置文件对于相同的属性的设置,会覆盖之前的配置 三:Struts2常量的具体用法实例Xml代码 - <font color="rgb(0, 0, 0)"><font face="SimSun"><font size="2"><b><?xml version="1.0" encoding="UTF-8" ?>
8 i9 K0 M8 V4 z% z" I - <!DOCTYPE struts PUBLIC $ W" G2 X, E r2 C7 \
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" - y4 o A4 `; D" g
- "http://struts.apache.org/dtds/struts-2.0.dtd"> ' |2 W+ e2 r0 _9 W1 s# l
-
) ~2 C. K/ k0 K% ?1 [0 P - <struts> 4 y; {' {6 N3 \; F) U
- <!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
' L6 s: |- W+ y6 ] p! v* F - <constant name="struts.i18n.encoding" value="UTF-8" />
7 |; Q( L- B2 _3 |8 O1 B - : c7 }% J. @6 S0 R8 |- y$ |
- <!--
6 {& h; `7 E+ f5 O - 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。 ' p8 p7 l% V/ K5 ~0 e1 I
- 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。
$ r0 @2 f2 Q+ r" k3 {* l - -->
& o# Q& s$ q5 \' s f - <constant name="struts.action.extension" value="do" />
) m) h2 f! ^7 C# \# z - 5 `' m X- l, D
- <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 --> " l$ _# k9 ^) w
- <constant name="struts.serve.static.browserCache" value="false" /> # ?$ }% @* d" }& u( O+ h8 ~* e, |
- , T9 Y' n/ |! Q }6 |- `
- <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 --> " n8 f |9 Y) X/ h# R
- <constant name="struts.configuration.xml.reload" value="true" /> + n' m/ R7 h1 o- w' F5 W& a! |
-
8 Y! p: t) S( | W - <!-- 开发模式下使用,这样可以打印出更详细的错误信息 --> , ], l/ }. ?7 M7 T" e( J
- <constant name="struts.devMode" value="true" /> 5 f( H( [6 B, Y, u! J% [% {0 e/ u
- , i+ P! a7 u1 _) S, I
- <!-- 默认的视图主题 --> 2 n- ?3 d( i; o/ L3 G7 m; n
- <constant name="struts.ui.theme" value="simple" />
9 Q8 t$ R* \3 N# m: B9 X( H -
9 {2 o ]1 d" `$ z' u1 s - <!-- spring 托管 -->
5 g0 H# C; T* s5 B - <constant name="struts.objectFactory" value="spring" /> & n' d/ c7 i6 G: `4 {
- - a7 x% ^+ a/ q
- <!-- 4 Y U8 P$ A3 T8 d
- 指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration 2 Q; L' M. |$ t A8 ^
- 开发者可以自定义配置文件管理器,该类要实现Configuration接口,可以自动加载struts2配置文件。
* D6 r7 V: P" ^- w - -->
% X! O' ?3 ~1 Z" Y) M- d+ c4 w - <constant name="struts.configuration" 4 `) z+ V5 q* W
- value="org.apache.struts2.config.DefaultConfiguration" />
' a) c+ r* {1 Q& w* ^% Z& e! j' E - / ^: F. r+ _. T, D( S( z3 s8 d
- <!-- 设置默认的locale和字符编码 --> : ^( H' @. X( x4 V& }
- <constant name="struts.locale" value="zh_CN" /> 7 y7 o5 v/ O& _" e: ^
- <constant name="struts.i18n.encoding" value="GBK" />
, B3 c$ W& w S8 a/ J - * X. f5 ~& W! k3 H
- <!-- 指定Struts的工厂类 -->
' h( ^3 O! N! I3 ?4 C- j - <constant name="struts.objectFactory" value="spring"></constant> : u) F) a0 a x
- , M; s' D4 A# L: r" G
- <!-- / m; f2 I) z! ]6 }7 N$ u; P
- 指定spring框架的装配模式,装配方式有: name, type, auto, and constructor (name / g5 Z3 Y7 @! n) e
- 是默认装配模式) H: Y" U1 F% i5 N w
- --> # q& ]9 [5 ?/ ]% J* o% d- W Q
- <constant name="struts.objectFactory.spring.autoWire" value="name" /> " a( u! y# C. k6 q
- 9 c" U6 ~$ N4 @5 P2 K8 r; S
- <!-- 该属性指定整合spring时,是否对bean进行缓存,值为true or false,默认为true --> x& M2 o9 X% s+ A. x
- <cosntant name="struts.objectFactory.spring.useClassCache" /> 6 L' O5 G; j) f8 a4 S
-
c3 D8 ^) }0 s' A. e" @, h3 i - <!-- 指定类型检查,包含tiger和notiger --> % G! [8 _# Y) F
- <cosntant name="struts.objectTypeDeterminer" value="tiger" />
( r, w7 @# _0 H6 a; r( U1 ^ - $ ~( p8 `" r1 n/ c, t" `
- <!-- 该属性指定处理 MIME-type multipart/form-data,文件上传 -->
% g5 k' V7 W+ Q - <constant name="struts.multipart.parser" value="cos" /> 4 l* |8 B _5 k
- <constant name="struts.multipart.parser" value="pell" /> $ i( k2 q7 u2 {- n: F2 \1 H
- <constant name="struts.multipart.parser" value="jakarta" /> $ r# H; ]: w( G1 E$ Z' v
- ( i2 A* o# k; Y3 N9 i1 V6 E5 l
- <!-- 指定上传文件时的临时目录,默认使用 javax.servlet.context.tempdir --> , _- D+ C9 q# t- N4 A. C
- <constant name="struts.multipart.saveDir" value="/tmpuploadfiles" />
1 E3 E# f* ]; t+ s9 \ -
4 H/ d I" D: K( K; S1 I& Z, J8 e - <!-- 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 -->
1 N+ Q0 g0 c$ [$ p - <constant name="struts.multipart.maxSize" value="2097152" />
. @5 y# Z6 m- l4 |: Q6 t -
5 M! I4 c" z" `' `5 g - <!-- - `) S3 i- y3 D
- 该属性指定Struts2应用加载用户自定义的属性文件,该自定义属性文件指定的属性不会覆盖 1 ?* ^2 P R- ?# J7 E* |
- struts.properties文件中指定的属性。如果需要加载多个自定义属性文件,多个自定义属性文 r/ K3 t$ Q3 l/ Y7 N
- 件的文件名以英文逗号(,)隔开。(也就是说不要改写struts.properties!)
( D! |* d- J O% l' _ - -->
' O/ X- F4 P z- G3 U1 Q8 L, ? - <constant name="struts.custom.properties"
$ Y4 b! I( y1 T3 D9 f( E2 @- R - value="application,org/apache/struts2/extension/custom" /> - i* A. O" S- i2 P
- 6 y& z5 R; A, `( O+ y) G6 k
- <!-- 指定请求url与action映射器,默认为org.apache.struts2.dispatcher.mapper.DefaultActionMapper -->
3 @* L# y5 @9 _9 i" b/ t3 O9 d! _ - <constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" />
& n% D' A4 N" i: f% n0 C -
( D& @& O9 G9 p6 |0 P8 c - <!-- 指定action的后缀,默认为action -->
v3 ~7 k4 H0 J - <constant name="struts.action.extension" value="do" /> 6 K2 C# h9 h3 ^! a" {; D
- * x7 k3 Y+ Z# O" F1 i
- <!-- 被 FilterDispatcher使用指定浏览器是否缓存静态内容,测试阶段设置为false,发布阶段设置为true. -->
( _3 A8 f" j6 c, l: ] - <constant name="struts.serve.static.browserCache" value="true" /> + B$ J+ O, o" A7 k
- 3 ^( l; J8 B6 ^- O* S0 T
- <!-- 设置是否支持动态方法调用,true为支持,false不支持. --> + ^" N( m5 [! h3 H: G
- <constant name="struts.enable.DynamicMethodInvocation" value="true" /> $ s! B) q" `. i
-
) H, n9 Z X* k1 [# Y' e - <!-- 设置是否可以在action中使用斜线,默认为false不可以,想使用需设置为true. -->
2 M7 A! M7 a4 c8 C* Z! { - <constant name="struts.enable.SlashesInActionNames" value="true" /> - U6 O E( q& Q& \; e
- ) Q+ |% ]" T; D1 O
- <!-- 是否允许使用表达式语法,默认为true. --> 5 S9 E, p$ }' l/ L
- <constant name="struts.tag.altSyntax" value="true" /> 0 }5 e* I' g$ [: \
-
4 z* F1 v6 @6 j& A - <!-- 设置当struts.xml文件改动时,是否重新加载 --> 1 T* i$ t6 @& Q5 d
- <cosntant name="struts.configuration.xml.reload" value="true" />
3 z6 o) z7 h& b. G( ^$ A3 B- ~ - . x) z% U F7 E" v9 u3 C6 _! Y
- <!-- 设置struts是否为开发模式,默认为false,测试阶段一般设为true. -->
) P6 g: T4 |' M - <cosntant name="struts.devMode" value="true" />
; l3 f; `; k3 b+ f, o) Q9 k - 9 X' f0 I- X' Y, l' Q
- <!-- 设置是否每次请求,都重新加载资源文件,默认值为false. -->
9 G# P7 A- _7 b. _- R S" T0 z - <cosntant name="struts.i18n.reload" value="false" />
4 y# m2 t2 j5 t$ b) \+ o" C - % m5 [' b& {/ J1 l. [& h9 q
- <!-- 标准的UI主题,默认的UI主题为xhtml,可以为simple,xhtml或ajax -->
8 x" r1 j) J7 W - <cosntant name="struts.ui.theme" value="xhtml" />
9 {" G5 P7 r' a0 K - + Y2 c! f% f2 l* [: S; B. A
- <!-- 模板目录 -->
! \- W( N+ C1 H1 L0 J - <cosntant name="struts.ui.templateDir" value="template" /> ; V7 S; Y8 X( a7 ~7 S
-
* U0 \( ^9 z+ w( V9 Q0 G - <!-- 设置模板类型. 可以为 ftl, vm, or jsp --> $ j1 Z, @( c$ O% V
- <cosntant name="struts.ui.templateSuffix" value="ftl" />
: d! i( R7 _) |$ C2 h, b$ Y - 3 z8 L4 E( A/ i8 h3 g( R% u, Z* E
- <!-- 定位velocity.properties 文件. 默认velocity.properties --> 5 ~$ e( X1 n4 U' P! t3 z
- <cosntant name="struts.velocity.configfile" value="velocity.properties" /> 8 `" a. f k6 s+ n2 t S
-
% T- O+ H. L8 `. g( [# F. Q - <!-- 设置velocity的context. -->
, Y% `% M7 k3 {1 R - <cosntant name="struts.velocity.contexts" value="...." />
$ m g) ^! b- z6 @( T - ) N+ ?2 y, }$ u: t* K) f3 V
- <!-- 定位toolbox -->
% s4 O j3 F7 ~' ]" t4 E0 c& T - <cosntant name="struts.velocity.toolboxlocation" value="...." />
# h/ c# c: B& ^! R, n1 t - 4 t2 d" j" z, l" N. ~
- <!-- 指定web应用的端口 --> 9 l1 N& i/ I1 a
- <cosntant name="struts.url.http.port" value="80" />
: o+ H' g' h! {. `/ N# A P -
# W$ S, x4 u* w' ^ - <!-- 指定加密端口 --> ; _- w8 Q( e7 F+ w% P
- <cosntant name="struts.url.https.port" value="443" />
7 T% T* P; b( {+ K0 M7 v -
* H8 g2 }) P, `! E' D - <!-- 设置生成url时,是否包含参数.值可以为: none,get or all --> ' A$ j( ~+ J6 S8 g" c' i* ^
- <cosntant name="struts.url.includeParams" value="get" /> & v0 j. r! b, @7 e; [, M& S, A
-
7 v3 o+ ~4 H3 E1 x% N% S - <!-- 设置要加载的国际化资源文件,以逗号分隔. --> g, ?9 H, K4 B6 K# p
- <cosntant name="struts.custom.i18n.resources" value="application" />
' ~* p) [3 i" f% P% o6 ~' m - ) K" _6 ]: j5 a- D$ ~
- <!-- 对于一些web应用服务器不能处理HttpServletRequest.getParameterMap(), 8 X* x+ a. B) o- M* F
- 像 WebLogic,Orion, and OC4J等,须设置成true,默认为false. --> 2 ~& A, F1 C' O7 P! W* W
- <cosntant name="struts.dispatcher.parametersWorkaround" value="false" /> 0 I" w: f: \% `% X" V7 r
- 9 o; V2 n- J* E# E3 S* q
- <!-- 指定freemarker管理器 --> 3 S( _! `& d: _
- <cosntant name="struts.freemarker.manager.classname" value="org.apache.struts2.views.freemarker.FreemarkerManager" />
, V. ~6 a0 ~" r, O+ p/ X -
6 x+ W2 @& `: _9 X3 `+ X - <!-- 设置是否对freemarker的模板设置缓存,效果相当于把template拷贝到 WEB_APP/templates. -->
* H0 j7 r' u# T5 C. D( o - <cosntant name="struts.freemarker.templatesCache" value="false" />
, T+ O& Q c1 z8 c X7 {& I$ \7 g6 W$ L - " X9 y8 L, w( P0 K2 _. G6 k
- <!-- 通常不需要修改此属性. --> , Q/ g4 |; f# v; L# z" ^, C7 U
- <cosntant name="struts.freemarker.wrapper.altMap" value="true" />
+ n( L1 Y7 P4 a, C, ?& Y0 X -
% r# a+ \1 K* o1 e/ h D - <!-- 指定xslt result是否使用样式表缓存.开发阶段设为true,发布阶段设为false. -->
z. P: z8 s4 m' _8 I d$ b - <cosntant name="struts.xslt.nocache" value="false" />
4 m4 K6 o+ q4 X4 d( R -
, {* G* P5 r( `! f - <!-- 设置struts自动加载的文件列表. --> $ C# G7 r0 J. ^
- <cosntant name="struts.configuration.files" value="struts-default.xml,struts-plugin.xml,struts.xml" /> ; u7 o7 ~0 `1 ]% Z% o
-
% |4 M4 |; P2 ~! a# n Z - <!-- 设定是否一直在最后一个slash之前的任何位置选定namespace. --> 7 C' T. `: a8 n8 P: z" V/ F- a1 Q* }: _
- <cosntant name="struts.mapper.alwaysSelectFullNamespace" value="false" />
/ F/ B* X( p- z- U3 l. h7 u$ J - </struts>
3 c5 j/ c4 B7 S- C -
c' S$ r; R& n" t$ k1 ?2 f J - . v! I4 z% K& H; g6 e- ^8 Y2 I
- ) N$ Q4 L3 ]! _9 N
- <struts> & `0 p$ R9 z/ s. y4 I1 I4 H
- 0 c0 C" v# e6 g
- <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 -->
( ~0 u( d" N2 E7 e/ Y f1 ] - <include file="struts-default.xml"></include>
; ]& q( {: k- D2 }5 j1 u; k$ {( b* O6 Y -
) a4 i9 A2 q; X: B2 t -
5 ~& e- w2 }7 Z' \" s, _- N b - <!-- package提供了将多个Action组织为一个模块的方式 4 i5 A: S) S0 V7 }) C, u
- package的名字必须是唯一的 package可以扩展 当一个package扩展自
6 ]) J6 ] i N6 k1 |. Y% O - 另一个package时该package会在本身配置的基础上加入扩展的package
( v& V% g* V2 y) s; P% A/ U# w - 的配置 父package必须在子package前配置
0 y3 u: J4 O# I - name:package名称
: o& {4 N7 \& u& e - extends:继承的父package名称
{4 ~& }) r# d: b0 O - abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false ' P! ]" {& K E% ^& ^( X! q! i
- namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
0 |. {9 y4 L2 Q3 G5 l - -->
6 J" \2 X( L. H" ?0 z, g/ G) _ - <package name="com.kay.struts2" extends="struts-default" namespace="/test">
! f' J/ R Z7 g1 Y7 N. G - <interceptors>
: N1 ~+ }! y$ E" r/ A - <!-- 定义拦截器 & H# T5 O+ S1 Q! N% s* s
- name:拦截器名称
# y3 ^/ p3 H4 c+ b% n - class:拦截器类路径 , s+ \9 l! ^7 U: I. D2 a' _
- -->
- z. j8 E! n, Z2 {) d# @ - <interceptor name="timer" class="com.kay.timer"></interceptor>
6 V ~6 E* C! ^7 y8 g3 Y) a+ | - <interceptor name="logger" class="com.kay.logger"></interceptor> : D% a+ Q& u( B: t$ h
- <!-- 定义拦截器栈 --> : P: s" G0 }$ a- d
- <interceptor-stack name="mystack">
. R% {2 i S9 ~+ P5 o3 C% q - <interceptor-ref name="timer"></interceptor-ref> + b% L3 q6 p6 z$ Z K3 G' k- X: n4 w
- <interceptor-ref name="logger"></interceptor-ref> - k" v @% A0 D
- </interceptor-stack>
; R; T( G8 E: m2 J; {) J- @ - </interceptors>
* }/ u8 l( u& \* w) G1 F% W -
/ p& Q: C% m9 }+ ^# y- K- r - <!-- 定义默认的拦截器 每个Action都会自动引用 * o& a/ J5 C; m% i) i# d- ^
- 如果Action中引用了其它的拦截器 默认的拦截器将无效 --> , @& N, a+ _5 H6 t& w
- <default-interceptor-ref name="mystack"></default-interceptor-ref> # _( K6 r! Q! U$ t+ r
-
; ^6 l3 b+ ? [1 E. K' S# B - 6 l4 g4 c0 ?$ k& O$ E
- <!-- 全局results配置 -->
/ e6 q! @5 {" m; w7 I" v" ^; F - <global-results>
) Z3 k1 ]) ~8 e6 E - <result name="input">/error.jsp</result> 7 M8 t+ x. k, V% W9 F% g5 m* e
- </global-results>
; J! U* p- t% z- ]( _ - : z6 `) ~6 p N4 ^5 c; [
- <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同)
5 G" V- C: T& ]) ^2 I - name:action名称
) m2 }* x: y0 e2 ^; G5 |8 W' n H - class: 对应的类的路径
5 V# g2 S+ D- L - method: 调用Action中的方法名 & P2 N( Y) ?/ y/ @
- -->
}1 F" v, q0 w' U/ h' V( o - <action name="hello" class="com.kay.struts2.Action.LoginAction">
1 y" t$ ^; s5 H! w! d - <!-- 引用拦截器
1 Z A7 x# Q# m7 G - name:拦截器名称或拦截器栈名称 5 O: H* G; m0 w& X) r+ ]
- -->
+ K- g$ Q$ m T+ U4 D* z* { - <interceptor-ref name="timer"></interceptor-ref>
1 L: g# I0 G k -
9 Z A, u5 i1 N/ a9 ] - <!-- 节点配置 & u# l( e t% @1 p8 [8 d
- name : result名称 和Action中返回的值相同 5 ^. g$ x4 O' J4 f
- type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher
7 H; o1 |; \! U, }5 E) x: ` - --> 6 B! P$ J I( O! l
- <result name="success" type="dispatcher">/talk.jsp</result> . S9 \, z7 n& j1 k: g$ s: a- u
- <!-- 参数设置
5 D, |4 J* x$ Y! Q7 r7 F7 E1 Z - name:对应Action中的get/set方法
. k8 o0 f$ R: F) ~0 G( {" w K; \ - -->
/ H! F4 F/ }7 E/ w6 U - <param name="url">http://www.sina.com</param> 3 P- z# C1 d9 f# y4 E
- </action> $ a1 B, v, E3 h4 {
- </package> 7 F$ C$ m3 L2 d" V y
- </struts></b></font></font></font>
复制代码 这些是常用的struts配置文件常量,如果想把struts用好,就要懂得每个配置是怎么一回事.不光光需要学习技术,更要学习好理论知识.技术的高度是由理论知识的深度决定的. ) i6 q# b$ s, d* k
, `# [( A' Y" P% q2 j |