一:struts2的配置文件有哪些,相对应的作用是什么? Web.xml:包含所有必须的框架组件的web部署描述符.Struts2主要加载前端控制器及初始化参数. 4 f+ n3 J+ v5 I) V' L1 r( M; ?
Struts.xml:定义应用自身使用的action映射,拦截器及常量,result/view定义. ' T Z+ g; G0 o& t( I9 R- }
Struts-default.xml:定义框架自身用的action映射及result ) v o, y0 |( ?, E c! S2 Z7 K
Struts-plugin.xml:struts插件使用的配置文件
; Z) K6 A; d8 |' Z. J3 f5 }& rStruts.properties:定义框架自身的全局变量及框架属性.
5 g, q# ~0 x% u, I! c3 |4 j% B% e$ \7 l5 n# D
二:配置文件的加载顺序
$ l3 E6 C4 Q {" w2 D7 A$ z$ DStruts-default.xml-->struts-plugin.xml-->struts.xml-->struts.properties-->web.xml , p/ l- q; R% S) X/ f. L" F
注:若之前的配置文件设置过某一属性,则以后加载的配置文件对于相同的属性的设置,会覆盖之前的配置 三:Struts2常量的具体用法实例Xml代码 - <font color="rgb(0, 0, 0)"><font face="SimSun"><font size="2"><b><?xml version="1.0" encoding="UTF-8" ?>
2 e) C% ^, ^5 D" u' n9 |! {; T# L - <!DOCTYPE struts PUBLIC 6 y7 v; N- [1 q
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 7 A' O& }! j6 V3 l2 d
- "http://struts.apache.org/dtds/struts-2.0.dtd"> # c+ D- E3 Y9 Z, t ~ r2 o! l& D
-
. b( z( N( H2 u/ `# L2 | - <struts>
5 c, Q& y) t! v C - <!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
; f N/ X0 t4 l& I( N" Y - <constant name="struts.i18n.encoding" value="UTF-8" /> 7 A% w( ?% F, r+ F7 S! u' ~# C
-
# |, x. Q) ^. T) z. E$ y& x - <!-- 4 T1 j+ Y$ a8 _) }9 @# |# l
- 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
* |/ y( u4 V; j; \ - 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。
, q) r3 h% W( }1 ?6 }( n i - -->
# L6 s' {3 `9 e3 _7 s - <constant name="struts.action.extension" value="do" /> 3 c# B, z7 r5 J9 H3 { p/ M
-
2 o6 w A3 l& ]& k* b- o8 w - <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
* B- U; s1 ^2 c( W3 h% C. n$ B - <constant name="struts.serve.static.browserCache" value="false" />
) G! B5 _/ L8 P1 R" ~8 f2 ~4 @ -
: U$ m/ L6 d0 X, a: W, B! J% M, Z& X - <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 --> ( f* O1 \% g8 L- y
- <constant name="struts.configuration.xml.reload" value="true" />
% W/ Y0 F% P# P5 w, L -
m z. |, ~. w# V3 b4 [ \- \ - <!-- 开发模式下使用,这样可以打印出更详细的错误信息 --> : J2 d* l8 G9 O) X: |
- <constant name="struts.devMode" value="true" />
/ y; |! P& J9 p9 b9 @3 d" a -
! @. q! |% c; k# g - <!-- 默认的视图主题 --> ! \ j6 E0 x9 \: S; D
- <constant name="struts.ui.theme" value="simple" /> # K4 y% ~. ?3 A1 \9 L8 d
- : D1 l0 N" `- K2 H$ Y
- <!-- spring 托管 -->
3 b- D# ]/ q6 @ - <constant name="struts.objectFactory" value="spring" /> 9 y7 M1 Y" p0 x
- ! o6 G- T4 D- n
- <!-- $ q% e5 h" P L" [4 k3 W: C, o
- 指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration % J# M S, `9 Y
- 开发者可以自定义配置文件管理器,该类要实现Configuration接口,可以自动加载struts2配置文件。 6 Q' f" L1 c6 I4 A( ^4 U z
- -->
, D! L+ |! }, _. @2 V: L - <constant name="struts.configuration"
5 n- _/ o& T5 q0 F8 k9 D2 P - value="org.apache.struts2.config.DefaultConfiguration" /> , t- L' O! v8 o0 @& k1 h: z
- $ o! y0 a0 n- d) m2 X8 w J$ _, {
- <!-- 设置默认的locale和字符编码 -->
Q3 Y: n1 Y7 t v - <constant name="struts.locale" value="zh_CN" /> ! E6 v" I d. d; ?* r" ~
- <constant name="struts.i18n.encoding" value="GBK" /> q7 t; [) v( W, B# j' \6 c
- # I& g$ Q7 L, R
- <!-- 指定Struts的工厂类 -->
3 ^9 `, h5 c2 ~: K: w% } - <constant name="struts.objectFactory" value="spring"></constant>
2 K$ b" C4 a0 F9 o) F) r -
0 S0 i1 ^( `3 P* P% J. ] - <!--
) U8 b, `$ r# G( L8 g/ E - 指定spring框架的装配模式,装配方式有: name, type, auto, and constructor (name 2 K' ?% w z% m3 J0 b' |; ~) e4 k
- 是默认装配模式)
6 F4 f+ S" B- \. V& ~$ C - --> - p( r* u/ N; ?7 T
- <constant name="struts.objectFactory.spring.autoWire" value="name" />
' S) a1 H- p5 [4 l - 9 v6 j' i: t+ G) c. M5 q
- <!-- 该属性指定整合spring时,是否对bean进行缓存,值为true or false,默认为true -->
7 n' ^6 A( f$ @ - <cosntant name="struts.objectFactory.spring.useClassCache" />
- A) | w3 H0 M/ j - ; T; H4 ~4 \0 L! [* s5 ^2 n: w+ A
- <!-- 指定类型检查,包含tiger和notiger -->
) z6 J' q5 u+ I7 j5 m6 m/ r+ v' I - <cosntant name="struts.objectTypeDeterminer" value="tiger" /> / e$ e; j0 U2 S; s5 Z/ |
- ' e4 E% D: U5 n; g) t
- <!-- 该属性指定处理 MIME-type multipart/form-data,文件上传 --> : K. R" j4 b1 x
- <constant name="struts.multipart.parser" value="cos" />
8 \' q1 C" Q; X" `; _. f - <constant name="struts.multipart.parser" value="pell" />
! d" i1 e$ Q3 | - <constant name="struts.multipart.parser" value="jakarta" /> 3 ^8 ?; _5 o3 P9 k( }
- # F- D# c' X% J- _1 h
- <!-- 指定上传文件时的临时目录,默认使用 javax.servlet.context.tempdir -->
J0 _& x& |2 p& l# B& S# y - <constant name="struts.multipart.saveDir" value="/tmpuploadfiles" />
$ n: o- P u6 d6 {+ ]: V2 t; i* R6 S -
* B$ z" j/ T. w8 C/ w; _2 O - <!-- 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 --> # B+ i- v/ s6 t
- <constant name="struts.multipart.maxSize" value="2097152" />
. P$ @$ p$ ]+ r2 }0 @5 y3 E/ W - ( o+ K1 Z, A8 X# Z# q
- <!-- * p3 H; T. s+ X6 t) v8 k
- 该属性指定Struts2应用加载用户自定义的属性文件,该自定义属性文件指定的属性不会覆盖
* p2 h- x$ @- U1 c: w/ C - struts.properties文件中指定的属性。如果需要加载多个自定义属性文件,多个自定义属性文
- z0 ^/ V3 c& o9 ^ - 件的文件名以英文逗号(,)隔开。(也就是说不要改写struts.properties!)
8 Y% M+ n3 K8 W* C - --> 0 M" @5 E5 P: S8 j1 \
- <constant name="struts.custom.properties" + r& ~2 U" c* Z7 ^6 T; r) F
- value="application,org/apache/struts2/extension/custom" />
% C! C8 u, _6 R, l7 ~# t9 ~ -
4 J& H% ?7 l6 _) U - <!-- 指定请求url与action映射器,默认为org.apache.struts2.dispatcher.mapper.DefaultActionMapper -->
) I; Q- {% d- c! y0 J - <constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" /> : k- A9 b; w4 O( k8 I; z4 `
-
5 w q* c5 T) ] - <!-- 指定action的后缀,默认为action -->
' {0 Y2 [/ |4 P8 w - <constant name="struts.action.extension" value="do" /> L# k7 U, O: {# L
- ( e0 ?7 X0 F' |8 v* z: W6 c2 q
- <!-- 被 FilterDispatcher使用指定浏览器是否缓存静态内容,测试阶段设置为false,发布阶段设置为true. --> 0 Q/ T0 P7 I/ A0 U; K7 A+ V7 `
- <constant name="struts.serve.static.browserCache" value="true" />
# P$ W, o, C, V" K -
4 W7 h5 m% s+ {+ Y - <!-- 设置是否支持动态方法调用,true为支持,false不支持. --> 3 q+ I* ], D& H
- <constant name="struts.enable.DynamicMethodInvocation" value="true" />
* M/ h" V; ]! D/ P/ R }1 H - 1 S2 b5 d! k _1 P- }
- <!-- 设置是否可以在action中使用斜线,默认为false不可以,想使用需设置为true. --> , A' y$ _, O8 Z+ g5 R
- <constant name="struts.enable.SlashesInActionNames" value="true" /> ! B( @! U) ?! p
-
# o4 z/ ]$ j/ m4 g - <!-- 是否允许使用表达式语法,默认为true. -->
1 V1 S' c7 y" a; R2 j5 A& [9 L - <constant name="struts.tag.altSyntax" value="true" /> 3 j, ^- U% f1 P
- , H9 Z1 ]/ P$ m5 ]+ ^6 ~0 I
- <!-- 设置当struts.xml文件改动时,是否重新加载 -->
& b' J& D- @3 s1 T. y, a) U - <cosntant name="struts.configuration.xml.reload" value="true" /> ) |" C' V0 d4 x% \; z; _) {* @) e
- 5 K9 {! L2 s% Q# @, q/ R5 o
- <!-- 设置struts是否为开发模式,默认为false,测试阶段一般设为true. -->
, }! A/ a I# U* g6 { - <cosntant name="struts.devMode" value="true" />
+ K% S; S0 T% d& D; C& t) V -
; v. C! a' a+ h: K - <!-- 设置是否每次请求,都重新加载资源文件,默认值为false. --> * |7 s, A" Z# `" t
- <cosntant name="struts.i18n.reload" value="false" /> 0 w7 q& }$ J, f7 R/ V& k5 k7 S
-
9 n1 K& m. b0 }0 P& N7 ] - <!-- 标准的UI主题,默认的UI主题为xhtml,可以为simple,xhtml或ajax --> ( m% x9 e/ L0 M
- <cosntant name="struts.ui.theme" value="xhtml" /> 3 m" s1 _0 ?0 n1 m! p X7 Z
-
4 d' q6 k9 w: @! b. Z4 F& C - <!-- 模板目录 --> 9 Y: n8 q7 r) f4 L& d; t
- <cosntant name="struts.ui.templateDir" value="template" /> w! d& O4 q) i2 V2 i, Z
- , ^- r) B) H1 A
- <!-- 设置模板类型. 可以为 ftl, vm, or jsp --> r( B u+ T0 k( K
- <cosntant name="struts.ui.templateSuffix" value="ftl" /> 5 |5 m9 M& N! Q: {% l& \% |
-
" l* \" _# n0 T T0 [& i - <!-- 定位velocity.properties 文件. 默认velocity.properties -->
7 c' T5 @! |8 R* W- G) f* G - <cosntant name="struts.velocity.configfile" value="velocity.properties" /> / V" L, P* o1 j5 v
-
2 l! {* g0 X; [5 d3 L) ~: k9 D( h - <!-- 设置velocity的context. -->
2 _& n% r* D! O) I0 T5 ? - <cosntant name="struts.velocity.contexts" value="...." />
' `) [/ V. L: s2 V9 }# w$ A - - U0 I& _% v8 r- z* S
- <!-- 定位toolbox --> " K( ]) T! ?3 i& \- {
- <cosntant name="struts.velocity.toolboxlocation" value="...." /> / B) f& W6 G1 F8 k1 w4 Z4 _* G
-
9 _# @" J* P# p7 P2 T - <!-- 指定web应用的端口 -->
+ @- _/ D2 h4 W - <cosntant name="struts.url.http.port" value="80" /> / L9 u5 {- a5 t
-
) N- a5 D- {' B - <!-- 指定加密端口 --> - R) x8 @& h8 O6 J2 b
- <cosntant name="struts.url.https.port" value="443" /> - w7 D) m3 Y+ S! G! }: Q
- % N. i; S) a$ p
- <!-- 设置生成url时,是否包含参数.值可以为: none,get or all -->
5 \+ b; K# a& d8 @; T/ r) q2 V, z, { - <cosntant name="struts.url.includeParams" value="get" /> * M3 [8 e4 x1 G. M8 E
- 1 P+ z& i' _8 ~3 m1 Q' t
- <!-- 设置要加载的国际化资源文件,以逗号分隔. -->
6 C& ? l7 X, y! O( S7 i" P0 I - <cosntant name="struts.custom.i18n.resources" value="application" /> 7 G# l3 f) o0 c- K" G1 ]
- 8 c8 s3 Z" Z8 y& O. \9 C' Y
- <!-- 对于一些web应用服务器不能处理HttpServletRequest.getParameterMap(), / U1 h& E$ ^' f& O* M
- 像 WebLogic,Orion, and OC4J等,须设置成true,默认为false. --> 2 @2 G- @5 H& L8 G" i) P
- <cosntant name="struts.dispatcher.parametersWorkaround" value="false" /> 0 E$ E" S+ ]* n
-
7 j! q$ U$ i3 j - <!-- 指定freemarker管理器 -->
2 E1 L8 z/ P, Z# R$ l - <cosntant name="struts.freemarker.manager.classname" value="org.apache.struts2.views.freemarker.FreemarkerManager" /> 0 k7 x& z x: _" i: m& z) i
-
) O( H6 y4 x+ T9 n - <!-- 设置是否对freemarker的模板设置缓存,效果相当于把template拷贝到 WEB_APP/templates. -->
% L8 i- c T: v - <cosntant name="struts.freemarker.templatesCache" value="false" />
. N2 w2 z$ v! y; R+ x* K! N: J% v - 0 L* R, v/ t* r- r. \- w+ }
- <!-- 通常不需要修改此属性. -->
/ T: O3 k0 t$ o1 k+ w2 } - <cosntant name="struts.freemarker.wrapper.altMap" value="true" />
- _5 ]/ p: |5 O6 G: M - 2 s5 g6 k7 q& b
- <!-- 指定xslt result是否使用样式表缓存.开发阶段设为true,发布阶段设为false. --> 0 E4 N. L; j% ~- Q7 i, k' p4 d
- <cosntant name="struts.xslt.nocache" value="false" />
$ A$ o* W: `2 {+ [# ?4 m -
' P2 f- S- n- X/ g$ S - <!-- 设置struts自动加载的文件列表. --> 4 H' L, W' P1 Y- y$ a
- <cosntant name="struts.configuration.files" value="struts-default.xml,struts-plugin.xml,struts.xml" /> + N- T& N! |% d O/ ?
-
- g. f! V- i5 c" ?/ @ - <!-- 设定是否一直在最后一个slash之前的任何位置选定namespace. --> * T" J) Z5 u$ m1 y
- <cosntant name="struts.mapper.alwaysSelectFullNamespace" value="false" /> * j O9 \4 \- `8 d
- </struts> + V% X, r0 d( U" N
-
# R( I0 A7 y7 I+ K% Y -
Z" v$ I; s/ ~* \6 Q -
8 q9 F' m5 t+ e |; ?% }. }* K7 Q$ c - <struts> ) r8 ]7 E3 L" J) Z
-
# s. u, A1 U2 B K5 a - <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 --> 4 }) y3 y1 y8 O9 I
- <include file="struts-default.xml"></include> 9 @( g) S* S8 e8 u1 Q
-
: ]$ u- p4 }, P0 G. G" O5 r3 } - ! I m& y+ U4 _& H3 {) c7 B6 G- k& c
- <!-- package提供了将多个Action组织为一个模块的方式
2 c5 A2 C8 t5 Z, ~) }3 K3 V! w - package的名字必须是唯一的 package可以扩展 当一个package扩展自 + Y" C! @$ R% i" e
- 另一个package时该package会在本身配置的基础上加入扩展的package
- C/ K' i; J# ^+ z h, R$ l - 的配置 父package必须在子package前配置
9 c6 |( H7 @8 {- E g - name:package名称
3 t+ _: j; D/ H$ y - extends:继承的父package名称
7 @9 C& ~6 W# @, P+ ^; _ - abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false n2 m) |- ~1 G& z, T
- namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action v4 a. o; x2 w; [ H; f
- -->
& y. ^; _8 i( h - <package name="com.kay.struts2" extends="struts-default" namespace="/test"> * }' ]( O% N: z9 ]2 c5 K! O
- <interceptors>
- f2 d) l; W1 J+ N! G - <!-- 定义拦截器
* |" z, @5 z. u( Z) P m' T - name:拦截器名称
" A: x* @$ T! a) H; O - class:拦截器类路径
2 L# L# E% z6 N7 V0 q0 d1 P( O, W( s - --> 5 s. T# d) m4 i7 p( O4 z
- <interceptor name="timer" class="com.kay.timer"></interceptor>
5 E& I0 i) j2 V8 `7 z - <interceptor name="logger" class="com.kay.logger"></interceptor> 9 s) j) L0 H+ K
- <!-- 定义拦截器栈 --> 2 l, [* ^! H. T$ y& P- x
- <interceptor-stack name="mystack"> ' w( I' b2 G V/ v
- <interceptor-ref name="timer"></interceptor-ref>
; F& o$ C: w1 x: Z - <interceptor-ref name="logger"></interceptor-ref> , g( ^0 Q+ i) F
- </interceptor-stack>
" G Z! F D9 H8 X( G0 G - </interceptors> 6 ?: G1 ]# s0 R. C: |) E6 Y
- 8 ^ i6 V# C% {) O8 J0 v! F
- <!-- 定义默认的拦截器 每个Action都会自动引用
% L1 o7 x% L$ _* i$ r3 f, K1 E% _ - 如果Action中引用了其它的拦截器 默认的拦截器将无效 --> 9 C1 j+ B. o4 r5 A# c/ l3 m
- <default-interceptor-ref name="mystack"></default-interceptor-ref> ) u" h$ r+ \( Q
- * v! I$ G2 K' g4 l
- $ y% b' }0 _9 O# R/ Y0 V. u0 B
- <!-- 全局results配置 --> ) ~5 h: G2 k" o" L4 n
- <global-results>
1 s+ n* F; T! }& |2 k: M - <result name="input">/error.jsp</result>
: [' t7 N3 ?4 h. v2 {0 f% q X - </global-results> 8 t0 U1 {' s) U& B8 s
- : W* S: ~2 x( q5 d
- <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同) 2 J* j2 Z/ S4 l* }" g
- name:action名称 4 N; o, `' E8 n G8 ~0 C
- class: 对应的类的路径
& w/ w) x" X# k. i$ _# h - method: 调用Action中的方法名
; `# B; D7 W2 }6 ~ - -->
6 p6 x9 ^9 j! p - <action name="hello" class="com.kay.struts2.Action.LoginAction">
3 c; D! f; D4 h - <!-- 引用拦截器 9 ^. y; W& x. [" }' `& q* f
- name:拦截器名称或拦截器栈名称
- `3 X- l- R! W; ~3 }! c& b* d) t - --> % d) t# ?/ u. s+ K5 o a$ G
- <interceptor-ref name="timer"></interceptor-ref>
& u3 o% p* a2 _" E( d3 p& }9 l - 7 v$ P5 Y7 w; Y/ |
- <!-- 节点配置
% N: N2 }* }6 \ - name : result名称 和Action中返回的值相同
# d1 h) U# Y7 }" k- _6 k3 U3 r - type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher
1 y7 @# h7 \8 C3 a* Y- `7 E - -->
' L& W/ i- T' ]* p! B& } - <result name="success" type="dispatcher">/talk.jsp</result>
) Q! W9 o8 {3 D+ g X, L - <!-- 参数设置 ! R7 e! t! k7 g) ~+ G
- name:对应Action中的get/set方法
) q+ X# A. O) h - -->
: T L3 q; ^& R/ E/ P - <param name="url">http://www.sina.com</param> . ?* a! B* J0 _, {6 N6 b
- </action> 9 Q& v* K8 Z$ g: F4 t
- </package> 3 R! c2 o6 b5 |) g
- </struts></b></font></font></font>
复制代码 这些是常用的struts配置文件常量,如果想把struts用好,就要懂得每个配置是怎么一回事.不光光需要学习技术,更要学习好理论知识.技术的高度是由理论知识的深度决定的.
: e" a5 k9 x) H" m
0 M, y0 }" L4 q, Z |