|
一:struts2的配置文件有哪些,相对应的作用是什么? Web.xml:包含所有必须的框架组件的web部署描述符.Struts2主要加载前端控制器及初始化参数. & k. a. h! C/ b5 }" u/ t$ }. y
Struts.xml:定义应用自身使用的action映射,拦截器及常量,result/view定义.
3 R. d" ^3 k7 s/ d0 A6 N3 lStruts-default.xml:定义框架自身用的action映射及result 7 R8 ?2 G) y* ~ G/ b
Struts-plugin.xml:struts插件使用的配置文件 , i8 y" S$ s* N
Struts.properties:定义框架自身的全局变量及框架属性.
3 w' b( K5 @; N$ t) L) i9 \% K0 H; l/ ]0 ?6 r& ~; k& U& x
二:配置文件的加载顺序
, q/ s% r" U+ ?+ k+ P/ P( @7 FStruts-default.xml-->struts-plugin.xml-->struts.xml-->struts.properties-->web.xml
' F0 _1 E0 |* y4 ~注:若之前的配置文件设置过某一属性,则以后加载的配置文件对于相同的属性的设置,会覆盖之前的配置 三:Struts2常量的具体用法实例Xml代码 - <font color="rgb(0, 0, 0)"><font face="SimSun"><font size="2"><b><?xml version="1.0" encoding="UTF-8" ?>
; A0 g% |5 O6 e$ l# w3 r' U1 v5 Z - <!DOCTYPE struts PUBLIC
& ?3 v# I3 l- g. ~* A1 @ - "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
+ o4 J* o. J2 `' |4 s- w0 \ - "http://struts.apache.org/dtds/struts-2.0.dtd"> . V: W1 K* L3 f! d- r
-
2 ~2 h$ }: Z, g - <struts> ) b9 o# \! j3 i3 F* D& U- ?+ x
- <!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
: ~% A- W5 G" l, u" E- u - <constant name="struts.i18n.encoding" value="UTF-8" />
) s% F! ~2 W# n! {; h: O5 g+ z -
! r/ h1 t! s( o9 Z8 G - <!--
- b6 F6 T! {- o/ u - 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
! C$ E6 p, f |; p - 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 9 ?; g/ q" o9 ]$ w8 L; P& v4 x
- --> 1 y) Z1 A& N" H; H
- <constant name="struts.action.extension" value="do" />
" X y* B2 F6 Z7 _ b - 5 `% n: ]8 x+ L" r
- <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 --> * k1 O) F0 Q4 ?& l( q/ J+ g
- <constant name="struts.serve.static.browserCache" value="false" />
/ v9 ^ z5 Y0 v2 ` - + w5 |: B0 G' }. |2 K- {4 B
- <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 --> * W- [( v; o8 m; Y8 R3 U; b
- <constant name="struts.configuration.xml.reload" value="true" />
0 f7 X4 @8 `: p: ^. T# z - 6 C8 p+ |' a0 R+ g K6 f
- <!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
( u* G: d# W' a, `! v" ^9 q - <constant name="struts.devMode" value="true" />
) l9 J/ [/ g4 `+ \: c" l, l -
: b9 v8 F# ~+ f - <!-- 默认的视图主题 --> 3 N+ Y) d# \. Z
- <constant name="struts.ui.theme" value="simple" />
( `: X9 P5 Z( m) m- r6 m9 C& U( y - 4 v. W. S L$ P9 o# F2 x J
- <!-- spring 托管 --> 8 M8 J% S5 a3 U1 p
- <constant name="struts.objectFactory" value="spring" /> ; {+ ~! s' J% B1 A1 }
-
: N8 v! t, V9 u; C4 a8 t - <!-- ' c0 M- U/ d$ N2 k3 y/ r6 E) O' a
- 指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration 2 |9 \; m# M$ N1 A
- 开发者可以自定义配置文件管理器,该类要实现Configuration接口,可以自动加载struts2配置文件。 " H* i% `9 g+ R- A# ]$ Z
- --> 2 Q* k6 Y; ] E' G O3 R2 b+ J( |/ r
- <constant name="struts.configuration"
- N. N9 T {; Z6 p/ r6 K- \ - value="org.apache.struts2.config.DefaultConfiguration" /> # f6 L3 ]% |( d; r7 k/ \
- - U3 o7 F! N$ w
- <!-- 设置默认的locale和字符编码 -->
! m6 P& G, {9 B% u. X" m - <constant name="struts.locale" value="zh_CN" />
% X: Q1 @ w7 T" ] - <constant name="struts.i18n.encoding" value="GBK" /> ( K$ y" a* b& X" l
-
* t, _$ D! q( g" j k4 K2 ?$ Q4 m. \3 r - <!-- 指定Struts的工厂类 -->
, }3 E9 y( T' u - <constant name="struts.objectFactory" value="spring"></constant>
, Z" @9 Q' y7 C# ? - / F' v6 _$ G2 L' `6 I5 U5 N) X$ x& R: a
- <!-- ) J8 ~5 Y6 L- T8 c7 ^! Q4 b; C
- 指定spring框架的装配模式,装配方式有: name, type, auto, and constructor (name
7 a! G1 G! n5 Q0 J - 是默认装配模式) ! B# T5 Y O6 C3 N
- -->
- g! Q& Z4 g! S9 e2 d- H+ r - <constant name="struts.objectFactory.spring.autoWire" value="name" />
, T( i8 k- t F" f: U) C - 5 C2 {4 E7 S/ h/ k
- <!-- 该属性指定整合spring时,是否对bean进行缓存,值为true or false,默认为true -->
3 b2 k$ C# Z0 ^" l - <cosntant name="struts.objectFactory.spring.useClassCache" />
7 `" ?: M8 y" R3 g5 ] -
1 P; C. E; Y$ N+ p7 W2 P7 X8 }$ k' v4 E - <!-- 指定类型检查,包含tiger和notiger --> ; q/ S9 `/ {% ~$ O
- <cosntant name="struts.objectTypeDeterminer" value="tiger" />
) v; P6 X7 o. t% k -
' r, f" z' q: |5 C - <!-- 该属性指定处理 MIME-type multipart/form-data,文件上传 -->
2 m9 F8 w4 q7 z$ @ S - <constant name="struts.multipart.parser" value="cos" /> 0 C* C% _9 w) m
- <constant name="struts.multipart.parser" value="pell" />
7 D1 h# L: r* U/ {. o- r2 w - <constant name="struts.multipart.parser" value="jakarta" />
5 ]7 h* S/ z6 p7 Z3 q- } - * C' h# b+ a' o$ u0 M
- <!-- 指定上传文件时的临时目录,默认使用 javax.servlet.context.tempdir -->
2 I/ V8 c" O; Q - <constant name="struts.multipart.saveDir" value="/tmpuploadfiles" /> + x6 d/ A1 g: a
-
2 X4 R7 P7 I0 Q) o9 f - <!-- 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 --> 8 ]4 r: a- l/ \1 p/ T7 x
- <constant name="struts.multipart.maxSize" value="2097152" /> 4 y1 @+ R& E+ N5 @7 y6 {6 ^ A* A* K
- ( j* y8 N5 w' K2 D4 Q; |+ B3 }
- <!-- " m- E. J0 c& k/ M" ^: I. @
- 该属性指定Struts2应用加载用户自定义的属性文件,该自定义属性文件指定的属性不会覆盖
1 Z- `% S( ` w - struts.properties文件中指定的属性。如果需要加载多个自定义属性文件,多个自定义属性文 7 ~) u+ `8 B" e) T, T6 [
- 件的文件名以英文逗号(,)隔开。(也就是说不要改写struts.properties!) ! L/ E$ x% `4 u. I
- --> ) r4 @- J# U( r1 x7 \9 G, t
- <constant name="struts.custom.properties" - X: K. D% U* S4 @. B
- value="application,org/apache/struts2/extension/custom" /> * d6 t! L8 C- D
- & H- T, T" Y ^
- <!-- 指定请求url与action映射器,默认为org.apache.struts2.dispatcher.mapper.DefaultActionMapper --> ) [+ r+ @5 Z1 O& G3 H. F6 z
- <constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" />
2 G- x% L7 S( [6 E3 w5 _& Y; R -
. A, S, z' y0 w6 m9 Y - <!-- 指定action的后缀,默认为action --> 8 G3 H% k0 _5 E& H' T$ \; D
- <constant name="struts.action.extension" value="do" /> 3 B; E" B& P% S+ I
- 4 |$ P# h9 |" l
- <!-- 被 FilterDispatcher使用指定浏览器是否缓存静态内容,测试阶段设置为false,发布阶段设置为true. --> . |# @. Z5 V, ]: l s
- <constant name="struts.serve.static.browserCache" value="true" />
- \; m5 r5 Y/ Q& d/ h -
1 s9 W9 Y& b! H - <!-- 设置是否支持动态方法调用,true为支持,false不支持. --> % d9 N' E1 d5 a
- <constant name="struts.enable.DynamicMethodInvocation" value="true" />
0 G) w7 y, C, P3 } -
: n! @+ O7 N/ [! X" r- F - <!-- 设置是否可以在action中使用斜线,默认为false不可以,想使用需设置为true. --> : x7 J4 l' A: j6 e4 u7 M
- <constant name="struts.enable.SlashesInActionNames" value="true" /> + G, X6 T. z4 h6 }2 N4 _, y
-
$ B' V3 L- o t, v6 c6 | D - <!-- 是否允许使用表达式语法,默认为true. --> 5 _2 Q' r# r7 V4 s) M/ g6 g
- <constant name="struts.tag.altSyntax" value="true" />
0 w* E3 j" p" z -
' E, e& k& S( L7 `2 Q, P - <!-- 设置当struts.xml文件改动时,是否重新加载 --> 4 B- n( X. B3 b$ w
- <cosntant name="struts.configuration.xml.reload" value="true" />
7 z* ~( r7 p' A$ U1 V( _5 ~; u -
w7 P" p p. a; _' c - <!-- 设置struts是否为开发模式,默认为false,测试阶段一般设为true. -->
k" W' ? p- P _9 V: Y, I - <cosntant name="struts.devMode" value="true" />
, ?1 c4 b6 s- N c, I# h: N7 k -
1 M9 L. A1 b# }: C" V& g: ^7 q - <!-- 设置是否每次请求,都重新加载资源文件,默认值为false. -->
# l" p6 x3 k6 E/ T1 C+ @1 a - <cosntant name="struts.i18n.reload" value="false" />
9 f8 D, X7 t2 A, f4 J y0 T5 G -
4 i- ?1 e" k" H# D9 n - <!-- 标准的UI主题,默认的UI主题为xhtml,可以为simple,xhtml或ajax --> # t. `/ g4 E0 o
- <cosntant name="struts.ui.theme" value="xhtml" /> 5 |3 `+ c5 p8 J4 l
-
4 e( e; o$ f9 h8 j/ Z; O/ Q3 J - <!-- 模板目录 --> 9 b& i2 U; j( V3 s
- <cosntant name="struts.ui.templateDir" value="template" />
5 F* @& ~3 {2 |' c7 N -
' R3 d! k& K. C9 S" V: t - <!-- 设置模板类型. 可以为 ftl, vm, or jsp -->
* v* {6 Z7 v+ K' T+ H - <cosntant name="struts.ui.templateSuffix" value="ftl" /> 8 ^7 G" p5 D* F: P* L# u5 L% x( K
- $ k [) O( B: f& P2 Z
- <!-- 定位velocity.properties 文件. 默认velocity.properties --> 2 ?# j" O/ A2 r3 B2 ? b6 D7 [
- <cosntant name="struts.velocity.configfile" value="velocity.properties" />
: ^9 G8 g0 Q- p5 }9 y+ T$ ?7 D - , r9 W. Q/ K, y; q5 D
- <!-- 设置velocity的context. -->
. s% C9 ^) F) Q- {( }4 l, x - <cosntant name="struts.velocity.contexts" value="...." />
: @5 X4 j3 K$ M' {. ^ -
/ D0 S4 Z, l* w) P - <!-- 定位toolbox --> 7 |6 t; m0 N8 w2 g+ S' h; ~ Q' R
- <cosntant name="struts.velocity.toolboxlocation" value="...." />
+ |; A& G! x# ^' R4 e" `3 X -
9 j& @: T! G5 a - <!-- 指定web应用的端口 -->
o" W2 j$ o" b8 e1 t4 J - <cosntant name="struts.url.http.port" value="80" />
7 _- r# I$ J% f0 N" a1 Q) @7 A: q -
4 Z: Z. h" c/ K# ~5 G$ N - <!-- 指定加密端口 --> 5 c3 C& i0 I' P1 e6 W T
- <cosntant name="struts.url.https.port" value="443" />
2 u9 A* M" g! i7 ~4 q# r$ x -
o1 `5 j6 S0 g( p8 G- Z# R; o" ` - <!-- 设置生成url时,是否包含参数.值可以为: none,get or all --> 5 H* _* Y; |2 W7 r2 K' r
- <cosntant name="struts.url.includeParams" value="get" /> . ]* p3 F1 X1 ~3 K& D. L9 s
- ! l* E7 Q4 B" l- U; S
- <!-- 设置要加载的国际化资源文件,以逗号分隔. -->
; P1 r5 W6 H# ?5 w. y - <cosntant name="struts.custom.i18n.resources" value="application" /> 0 {+ H1 ]( Z) d- G8 B4 a
-
' e: C K8 F0 p" U4 H- h' X+ c - <!-- 对于一些web应用服务器不能处理HttpServletRequest.getParameterMap(), " J* i; J" ^8 V( K: ?
- 像 WebLogic,Orion, and OC4J等,须设置成true,默认为false. --> 9 V) f9 z, o3 b% m0 ]# S
- <cosntant name="struts.dispatcher.parametersWorkaround" value="false" />
0 t% f c! Q. v -
# G. H! B2 r) G* e - <!-- 指定freemarker管理器 -->
; D i) h- H8 I0 k! Z- B# u1 U - <cosntant name="struts.freemarker.manager.classname" value="org.apache.struts2.views.freemarker.FreemarkerManager" />
/ N' ?1 F9 ]+ x6 B - " N" |5 ~" n5 ]- @5 ~6 o+ J
- <!-- 设置是否对freemarker的模板设置缓存,效果相当于把template拷贝到 WEB_APP/templates. --> " k# X5 g* S- m
- <cosntant name="struts.freemarker.templatesCache" value="false" /> 2 U$ P9 c5 [) k: a, V" r
-
$ `5 n3 i8 v+ H - <!-- 通常不需要修改此属性. -->
) X- H) j& Z; d/ ~' B5 E - <cosntant name="struts.freemarker.wrapper.altMap" value="true" /> 0 ~$ x. o$ ]" ~! i3 o% a
-
D9 U; k9 ]/ i2 T- m - <!-- 指定xslt result是否使用样式表缓存.开发阶段设为true,发布阶段设为false. -->
9 P9 I. B% E5 ? - <cosntant name="struts.xslt.nocache" value="false" />
' K5 _& r, P$ ^9 S5 X -
# k s$ r ^: R' U* _ - <!-- 设置struts自动加载的文件列表. --> : o/ u! I' @' G9 j4 a
- <cosntant name="struts.configuration.files" value="struts-default.xml,struts-plugin.xml,struts.xml" /> + L/ C* H4 C6 k0 K& {% @: p
-
7 @2 x) d9 P8 i, R) } - <!-- 设定是否一直在最后一个slash之前的任何位置选定namespace. --> + O! z/ G" B T0 k* w/ \ U
- <cosntant name="struts.mapper.alwaysSelectFullNamespace" value="false" />
# N/ p0 s" x, ]; N. A# A/ P% ` - </struts>
/ N* M8 d: \" |+ c - ( j) M# C6 K g# F, q) t
-
7 O! {0 j' d+ f8 l' x -
3 p3 ? x- n: c - <struts>
, I" E8 H1 W) n% Y+ C* \8 h$ r# S - , I6 M4 L. H8 Q9 Q+ \" q+ w5 o' C, X
- <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 --> 7 Y+ K& v# a3 h! u
- <include file="struts-default.xml"></include>
5 z- ]1 @5 }1 M. K - / F) Y( G0 W# X& O1 z# P' b; v+ V$ k2 t9 b
-
: w- h7 _4 o% Q( U/ i - <!-- package提供了将多个Action组织为一个模块的方式 / E5 L) s! a% m* `2 j" E+ A
- package的名字必须是唯一的 package可以扩展 当一个package扩展自
4 t, q7 N8 w v6 N - 另一个package时该package会在本身配置的基础上加入扩展的package
! m; }: n$ h8 L* J - 的配置 父package必须在子package前配置 . q' u8 x2 N8 h0 }
- name:package名称
& `. k0 z7 l6 c3 b& w: { - extends:继承的父package名称
* D' g+ n0 n/ i - abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
7 w" m; ]6 w& T$ A; e - namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action * F- M y6 Z4 v' u6 h8 }* U. Y0 ~
- --> , i, b- y' G! t8 Y" u( s) {' F
- <package name="com.kay.struts2" extends="struts-default" namespace="/test">
: O4 s7 [! L$ j: z# c5 w: K - <interceptors>
; d7 f9 ~9 I- }- K) U! R - <!-- 定义拦截器
+ i5 k, R, ^1 Y G$ @ - name:拦截器名称
2 w9 \( k. o$ t - class:拦截器类路径 / V' X, M) d& y' S; m5 t8 }5 E; _
- --> / v4 ?/ q# s/ {8 d5 G' ?
- <interceptor name="timer" class="com.kay.timer"></interceptor>
: Q- ~2 T) C) i6 N$ M0 Q - <interceptor name="logger" class="com.kay.logger"></interceptor>
7 ^8 h4 J; h+ Y p( z# O - <!-- 定义拦截器栈 -->
7 f- n- Z& w; L6 u - <interceptor-stack name="mystack">
9 y8 G' N& U7 W9 u4 ~) V$ m - <interceptor-ref name="timer"></interceptor-ref> 5 l# A, {6 Y0 a8 h7 z% J9 _: Q; `5 G
- <interceptor-ref name="logger"></interceptor-ref> 7 H/ H( f, K, O( x5 v7 U3 D* K
- </interceptor-stack> . Q! y, r" g6 D$ U; Q
- </interceptors> ( D( c- ]4 w7 R; [$ d
-
. l# ?0 }! {& Z - <!-- 定义默认的拦截器 每个Action都会自动引用 0 @4 G$ ?8 V: R7 f) d G$ ^+ z
- 如果Action中引用了其它的拦截器 默认的拦截器将无效 --> / a: N6 {0 l- ~
- <default-interceptor-ref name="mystack"></default-interceptor-ref> 8 O9 _; C X3 w0 Y, Z1 m; r+ |, O
- 9 o7 ?3 C7 m0 e
-
/ X, z/ @1 a. U2 [; G3 N5 x. o1 d) K - <!-- 全局results配置 -->
4 H: x( ]% M, Y) x7 L - <global-results> ' v* Z$ ]* f! q6 w
- <result name="input">/error.jsp</result> ]/ R a0 w1 N7 u% \
- </global-results>
/ O& V# n+ E1 K. t& ?/ ~ -
* g. v9 w' I# `$ | - <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同) ! U, Z' D) w8 }: ^
- name:action名称 ; `9 _* S! M5 k, @$ A9 T
- class: 对应的类的路径 5 W* R& r6 D8 J, v9 R
- method: 调用Action中的方法名
% L; p+ y8 f; f2 y. |2 P( } - --> " z: F7 X1 l+ b6 V& J. G
- <action name="hello" class="com.kay.struts2.Action.LoginAction"> " T# [/ P* ]; ~( y
- <!-- 引用拦截器 ( @& v4 s$ V/ G: t$ t
- name:拦截器名称或拦截器栈名称
9 l/ _6 P G3 \& j3 `! _# z* f - --> % V$ {8 \/ Q0 \) w$ b y
- <interceptor-ref name="timer"></interceptor-ref> ) r$ M" {5 L4 ^) U/ @
-
) D: t g9 C$ h - <!-- 节点配置 6 c1 W0 b1 m; [4 d- }. I# e; A& z
- name : result名称 和Action中返回的值相同 4 t8 r, F1 V" U- U9 p# F* W) W
- type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher ) a, h; u; t: U) V" ?
- -->
3 B9 ?/ B _* l - <result name="success" type="dispatcher">/talk.jsp</result>
: E* t1 h/ W) W4 ]7 \2 k9 ? - <!-- 参数设置
, q; i5 r6 U9 |0 q - name:对应Action中的get/set方法
" I0 i" ~1 K8 w# v7 T - -->
" }2 c! q$ g; L- T G% l; H - <param name="url">http://www.sina.com</param>
. n7 o' J; \# ~9 |$ R - </action> , ^( ~: ]( X0 n1 C
- </package>
% A* D8 e! {9 q6 T - </struts></b></font></font></font>
复制代码 这些是常用的struts配置文件常量,如果想把struts用好,就要懂得每个配置是怎么一回事.不光光需要学习技术,更要学习好理论知识.技术的高度是由理论知识的深度决定的.
. e6 u( X% s i" q. w5 v
: u! k% O, y7 E: k) T |