一:struts2的配置文件有哪些,相对应的作用是什么? Web.xml:包含所有必须的框架组件的web部署描述符.Struts2主要加载前端控制器及初始化参数.
( g7 N( h n! }8 Y' h* y) pStruts.xml:定义应用自身使用的action映射,拦截器及常量,result/view定义. 5 P0 H$ d v% F& j8 T$ n
Struts-default.xml:定义框架自身用的action映射及result / J2 a) M" X+ E% U3 l+ Q
Struts-plugin.xml:struts插件使用的配置文件 + U# m5 \9 D4 W, c8 p/ P. G3 U
Struts.properties:定义框架自身的全局变量及框架属性.
9 V% h+ s+ O! Z1 ~+ ^6 F# }* J5 J- ~. [2 s( t8 Y1 ?
二:配置文件的加载顺序 ) O, E* }+ ?- I) d6 E8 J; B
Struts-default.xml-->struts-plugin.xml-->struts.xml-->struts.properties-->web.xml $ e2 v; d G ^# e8 m
注:若之前的配置文件设置过某一属性,则以后加载的配置文件对于相同的属性的设置,会覆盖之前的配置 三:Struts2常量的具体用法实例Xml代码 - <font color="rgb(0, 0, 0)"><font face="SimSun"><font size="2"><b><?xml version="1.0" encoding="UTF-8" ?> / ^) a: a. `6 t
- <!DOCTYPE struts PUBLIC
4 Y+ x8 e* S% P; j% t- |4 v8 H ?. ` - "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" % r( b- |# ~; D/ N3 C5 H
- "http://struts.apache.org/dtds/struts-2.0.dtd">
% X- B9 m$ E. R - / _" T7 q) z7 D7 o' \
- <struts>
0 J4 d0 S/ m, o1 e- t. l2 ] - <!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
/ T8 E1 _; i" g3 N - <constant name="struts.i18n.encoding" value="UTF-8" /> ) M/ g9 \! M; L5 u
- 5 M5 x9 [ j; h! S% h" Z
- <!--
6 N1 g6 H4 E4 | - 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。 3 m6 Y4 U0 v5 f t- c" }- S
- 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。
, l, a. c m+ ~9 @8 W - --> - G& y! H0 A9 V, s+ d7 r
- <constant name="struts.action.extension" value="do" /> 6 ^+ `( n/ r, K w/ r- K6 _
- + N- J. L( e! A- M7 A) ~
- <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
d+ G8 x, H6 n, b; j - <constant name="struts.serve.static.browserCache" value="false" /> ' _9 ?8 h4 X) b4 C! Q
- # i$ W" p3 K0 m" W
- <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 --> : a% o: `: Q" | V2 P
- <constant name="struts.configuration.xml.reload" value="true" /> ' {3 H F$ V( b* C( E
- # M% X+ ]; Z% y' D4 |2 F
- <!-- 开发模式下使用,这样可以打印出更详细的错误信息 --> 6 u. u( N4 }; Y! m8 h
- <constant name="struts.devMode" value="true" />
1 }" M) G9 v: U - ' Z3 B1 u @- w! B& j
- <!-- 默认的视图主题 -->
( {. h7 Q, Q; ? - <constant name="struts.ui.theme" value="simple" /> " a& _4 D4 l6 \
- 1 V& C9 R1 p9 \- G3 O
- <!-- spring 托管 --> : I0 M1 Z N' B: [
- <constant name="struts.objectFactory" value="spring" /> ' `: }' l; m( I- g2 u( W* B
-
8 G' U) }* i( I1 \. o3 i5 o# | - <!--
; _) u/ n2 i; L( s1 X8 t. ` - 指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration $ O, W8 _) y" ]0 A
- 开发者可以自定义配置文件管理器,该类要实现Configuration接口,可以自动加载struts2配置文件。
. n: g" O. ~1 [. H6 c5 ?: h - --> 4 J1 A, @2 I. X" |) U' n9 U. U* k
- <constant name="struts.configuration" ) L% b. R- \0 G
- value="org.apache.struts2.config.DefaultConfiguration" />
% E" K4 @( U! X, N: ]( J! q6 | - 0 }- A, E% M$ u
- <!-- 设置默认的locale和字符编码 -->
4 Z" L; O; V7 a% Y* K - <constant name="struts.locale" value="zh_CN" /> - _ N; N- S3 _- O: B1 }" d3 ?$ o
- <constant name="struts.i18n.encoding" value="GBK" />
5 X4 u. B% S! P3 N$ p) @ -
E8 ~* Z7 u) C& {4 O( t1 Q+ [8 j - <!-- 指定Struts的工厂类 -->
) O H3 h- u* E/ I0 g - <constant name="struts.objectFactory" value="spring"></constant>
1 V- [3 d1 ]+ C6 k/ a0 G8 R - & ^% p; H# P# y _2 ^. ~7 o7 @
- <!--
) E: e% Y, P6 U4 ]% A/ M& X - 指定spring框架的装配模式,装配方式有: name, type, auto, and constructor (name # s4 T6 l% z f8 q$ [ v7 n
- 是默认装配模式) ' c1 Z! I) u u+ F7 e2 n
- --> / g( V6 \, h: ]& Y# Z1 E7 \0 v1 U
- <constant name="struts.objectFactory.spring.autoWire" value="name" />
4 Q9 g& W6 w5 ~7 m' q( B' I - 1 r' H3 Z. y, d ~
- <!-- 该属性指定整合spring时,是否对bean进行缓存,值为true or false,默认为true -->
' n. W5 k; e3 F( F: S5 m - <cosntant name="struts.objectFactory.spring.useClassCache" /> 6 Z" B/ Z4 l( W2 _* W7 m. x* V
- + J' Y- M0 J: O! q0 ]2 o- h- U
- <!-- 指定类型检查,包含tiger和notiger -->
+ a, @* \- v/ N, d4 I5 @# |/ q - <cosntant name="struts.objectTypeDeterminer" value="tiger" /> * n. j: s+ e* {: V+ N
- # T! c b8 L& e% \7 v- a1 \7 g9 k
- <!-- 该属性指定处理 MIME-type multipart/form-data,文件上传 --> # b' G- E1 \% s0 c
- <constant name="struts.multipart.parser" value="cos" /> : o: ]7 t3 k7 ~0 ^1 S
- <constant name="struts.multipart.parser" value="pell" />
) s& k1 L2 O9 w( h9 Q9 L& t! O - <constant name="struts.multipart.parser" value="jakarta" /> & ?( _! _5 N6 w& r: |. H
- % d" X- F; s7 F3 d& T
- <!-- 指定上传文件时的临时目录,默认使用 javax.servlet.context.tempdir -->
0 j5 D( e' B6 q( ^7 f - <constant name="struts.multipart.saveDir" value="/tmpuploadfiles" />
, O- t8 B" [& }/ s -
+ D. w- k) U( s% r# ` - <!-- 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 -->
) i1 K/ _# ?" g" A; @ - <constant name="struts.multipart.maxSize" value="2097152" /> : I4 J7 Z8 @5 r7 p% G8 j
- # H6 [2 e5 w, ?, r0 f
- <!-- & D* A }" i' [
- 该属性指定Struts2应用加载用户自定义的属性文件,该自定义属性文件指定的属性不会覆盖 A$ I! \; G' L0 O) r
- struts.properties文件中指定的属性。如果需要加载多个自定义属性文件,多个自定义属性文
. r) s8 f$ y# m) u- ~8 N - 件的文件名以英文逗号(,)隔开。(也就是说不要改写struts.properties!) $ l V7 A6 y9 u1 _5 D
- -->
3 ~+ [$ y# b* Z- `+ r' N - <constant name="struts.custom.properties"
( p7 z! S; C: l7 n: r - value="application,org/apache/struts2/extension/custom" /> ! u& I( Q* X2 {4 i
- / K0 p8 H' m6 }
- <!-- 指定请求url与action映射器,默认为org.apache.struts2.dispatcher.mapper.DefaultActionMapper -->
+ A9 m: ]% x4 F7 P+ M - <constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" /> . G8 B. c' N/ N* ~1 i) Y
- 8 ~1 c- m$ s& J" t7 { K0 q0 f
- <!-- 指定action的后缀,默认为action -->
7 ]. W' Q- O9 ?7 K8 P5 b - <constant name="struts.action.extension" value="do" />
; N/ |' j" \* @( t6 R3 I( @ -
: s, [7 ]) P5 P" J5 K - <!-- 被 FilterDispatcher使用指定浏览器是否缓存静态内容,测试阶段设置为false,发布阶段设置为true. -->
2 `: Z0 y) w) H, h0 b# t - <constant name="struts.serve.static.browserCache" value="true" />
$ S' A$ h5 Q S/ `# p2 `" H" w -
) x- L* W7 b0 _, H" I - <!-- 设置是否支持动态方法调用,true为支持,false不支持. -->
5 B8 b& X( T2 T% b. V+ u - <constant name="struts.enable.DynamicMethodInvocation" value="true" />
& S+ X \9 b. z - 9 W! i* S6 d* R9 {" o
- <!-- 设置是否可以在action中使用斜线,默认为false不可以,想使用需设置为true. -->
9 X+ F4 s F; @' J2 t* I9 N. @ - <constant name="struts.enable.SlashesInActionNames" value="true" />
; Q( `, G0 Z8 r7 k. }' k$ H - ' v3 z* H: w$ B& [- i
- <!-- 是否允许使用表达式语法,默认为true. --> / G. l, _* q' j5 H+ I3 O
- <constant name="struts.tag.altSyntax" value="true" />
% i8 A# J/ ?( N7 @ -
+ {4 K: Z9 p7 J* |/ U' b1 y. X% ~ - <!-- 设置当struts.xml文件改动时,是否重新加载 -->
T8 i: M# P- k' g& s* D* X& @) ?8 r* z - <cosntant name="struts.configuration.xml.reload" value="true" />
0 D* }5 o, ~+ R$ Q' Z$ w; M - . B4 n; Z4 f6 n3 w; T# `2 U
- <!-- 设置struts是否为开发模式,默认为false,测试阶段一般设为true. --> 9 N; c6 k: u) t \
- <cosntant name="struts.devMode" value="true" />
% s8 _) F2 f1 U! ?8 b) ~' J9 U -
. x" Q- c) o( d, F3 t - <!-- 设置是否每次请求,都重新加载资源文件,默认值为false. --> 4 |. H; [# o9 T0 g8 V
- <cosntant name="struts.i18n.reload" value="false" />
% k0 }" `/ Q' j5 A7 ?' q4 P -
9 J0 f* Z9 S1 J3 X4 A - <!-- 标准的UI主题,默认的UI主题为xhtml,可以为simple,xhtml或ajax --> . p5 S5 i, u4 D" {0 }/ H
- <cosntant name="struts.ui.theme" value="xhtml" />
* f' R1 b# h2 M2 f9 ] - & C: u: L! R9 ~8 F+ W
- <!-- 模板目录 -->
0 P. S- K4 a. ]3 Q$ x - <cosntant name="struts.ui.templateDir" value="template" /> `. j8 S. H- C" u% L& ?
-
6 f0 u0 j, s2 q! x, }5 S - <!-- 设置模板类型. 可以为 ftl, vm, or jsp -->
# }1 t, S( Z! q0 S% } - <cosntant name="struts.ui.templateSuffix" value="ftl" />
% E# X! }2 q3 ^4 Q - ; }2 O, H. J3 J, t1 r0 ~$ t6 i3 A
- <!-- 定位velocity.properties 文件. 默认velocity.properties --> + _7 F& Y: Z2 ?- I5 e4 ?4 d2 N
- <cosntant name="struts.velocity.configfile" value="velocity.properties" /> , ?' ?+ ~: b" H- P7 X, y) S
-
2 f% |5 ~- p8 m - <!-- 设置velocity的context. --> 7 k. N; p0 m8 U5 g5 L
- <cosntant name="struts.velocity.contexts" value="...." /> 2 q# j9 Z& q T( \
- 7 s; U: P, N/ [
- <!-- 定位toolbox -->
" |8 B3 {( A$ T - <cosntant name="struts.velocity.toolboxlocation" value="...." /> / [% ~& X7 |4 R3 a Q
- 9 G' c/ s2 Y8 ~: c3 g. a
- <!-- 指定web应用的端口 -->
- t! ~, ^4 N1 L! t" C. | - <cosntant name="struts.url.http.port" value="80" /> z$ _* x. ?, B) Z# A, ]5 i* ~/ z+ {
-
2 J0 ?7 h& \% q( y4 Z3 q - <!-- 指定加密端口 -->
$ E! O- j+ U! ~: \) ?6 t - <cosntant name="struts.url.https.port" value="443" /> 8 d5 a/ _" V. @& U6 `% ^0 ?; }
- & W8 `9 P) |: A9 z2 Z
- <!-- 设置生成url时,是否包含参数.值可以为: none,get or all -->
) Z6 q& w! q6 r& x" \0 Q4 C5 j - <cosntant name="struts.url.includeParams" value="get" />
$ |( M- g2 i8 m/ W. A -
! S; [, L# ^* X; b2 v: ?2 e - <!-- 设置要加载的国际化资源文件,以逗号分隔. -->
2 A" v% T! e4 B9 P- E - <cosntant name="struts.custom.i18n.resources" value="application" />
" \5 t! F& O7 P - ! b; \. F3 g! Z0 u0 i* e5 l
- <!-- 对于一些web应用服务器不能处理HttpServletRequest.getParameterMap(),
$ o6 A/ S7 ~, G+ g - 像 WebLogic,Orion, and OC4J等,须设置成true,默认为false. -->
F. L" a& {+ m# f' P' `2 T# t - <cosntant name="struts.dispatcher.parametersWorkaround" value="false" />
) g$ \* p8 V" y4 g! }, G/ i - 0 Z0 |! l# \$ Y a8 d
- <!-- 指定freemarker管理器 --> 2 |1 ^$ F$ n4 H( ^" S" @
- <cosntant name="struts.freemarker.manager.classname" value="org.apache.struts2.views.freemarker.FreemarkerManager" /> ) ~: F P7 M M& E, |! x* U! i/ u
-
( `2 D9 y4 I0 M- l: c' ` - <!-- 设置是否对freemarker的模板设置缓存,效果相当于把template拷贝到 WEB_APP/templates. --> % \- ?. ]# `% w- Q4 v
- <cosntant name="struts.freemarker.templatesCache" value="false" /> - d9 a# d5 e- g1 p
-
' ~3 p8 m: f6 K2 c" {' T - <!-- 通常不需要修改此属性. --> / }2 F) P7 t8 z; c: y2 x, D
- <cosntant name="struts.freemarker.wrapper.altMap" value="true" /> " l7 C% ^1 s0 ]4 A
- ( R/ I+ N0 B/ h8 x0 K* R1 F
- <!-- 指定xslt result是否使用样式表缓存.开发阶段设为true,发布阶段设为false. -->
! g V/ K8 v+ Z+ o8 d- g - <cosntant name="struts.xslt.nocache" value="false" /> 7 d H2 ?* T% B) ]' |6 o
- 4 Z( ]" `) N* l% l5 S
- <!-- 设置struts自动加载的文件列表. -->
1 @# ^& F1 `" q4 e! M, v8 [ - <cosntant name="struts.configuration.files" value="struts-default.xml,struts-plugin.xml,struts.xml" /> - K. H) f+ x- h9 X. a* `4 D
-
' `( d& S/ F# Z - <!-- 设定是否一直在最后一个slash之前的任何位置选定namespace. --> # M- b3 X+ K, Z D: e
- <cosntant name="struts.mapper.alwaysSelectFullNamespace" value="false" /> 2 I5 U8 e& n- z7 G: q) K0 ]) r
- </struts>
: e5 v: \1 \. F8 R3 @- z) u8 g - + K" b% ~+ ?8 g3 q
- + S3 v- {& M3 C
- * `' v. M1 Y/ j9 L- a: `. T
- <struts>
2 ?. a# [* I5 f -
# V# W) W5 [' b. }. [ - <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 --> 4 n7 j+ ~; T) o: f# k
- <include file="struts-default.xml"></include> # }5 v3 t8 ?5 ` @0 q% L3 J
- ( K, V# B3 `1 {& j5 z
- 7 ?0 d* s+ V* [* S6 i8 h k9 A2 Q, ~
- <!-- package提供了将多个Action组织为一个模块的方式
% x. h1 y. f9 y( }# T9 R6 | N - package的名字必须是唯一的 package可以扩展 当一个package扩展自
$ Z! B8 u7 C9 X1 f" K/ F3 O - 另一个package时该package会在本身配置的基础上加入扩展的package 3 U2 A) f6 q9 X4 h1 P; C9 V
- 的配置 父package必须在子package前配置 5 x% ~% @, B+ b& y, D( E
- name:package名称
% o4 s* J! J5 L u! m2 b - extends:继承的父package名称 ! |6 p* z. f1 A @# T7 k, f9 H
- abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false 1 A& I7 p9 h! G, g% c C3 ~
- namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
+ {: ]9 `! X% O; ^- k) a - -->
$ G+ ~% Y% r. b, e* |! e; O. F! ^ - <package name="com.kay.struts2" extends="struts-default" namespace="/test"> ( I# M( M3 M, T) F4 j# T4 _
- <interceptors> ! {( A& E! ]$ T$ N& e
- <!-- 定义拦截器
, [/ @, m) ]3 l, s- a% W' B - name:拦截器名称 0 g$ G1 u6 |* _! T
- class:拦截器类路径
: l/ H, i" z# ] - -->
0 B1 l4 i2 O4 } {3 T - <interceptor name="timer" class="com.kay.timer"></interceptor> ; T# p. S( v: ~' x
- <interceptor name="logger" class="com.kay.logger"></interceptor>
4 J" q A4 y! w! m; d! |9 ^1 b0 N- } - <!-- 定义拦截器栈 --> ' o. a# H' \4 o* K2 j& S; c9 {
- <interceptor-stack name="mystack">
: o1 w: S& ]. T: n- {3 @& B - <interceptor-ref name="timer"></interceptor-ref>
( N1 {7 k6 Y1 a: v. } - <interceptor-ref name="logger"></interceptor-ref> / [" y, [* C) |7 P8 X: d
- </interceptor-stack>
: \8 o# ~2 i9 R* F - </interceptors>
2 u2 F6 X; E) ^$ Y' W7 { - 7 q6 J: G0 w+ Z) E
- <!-- 定义默认的拦截器 每个Action都会自动引用 2 E9 m3 ]( q7 E. e- o& b4 ]/ Z; z
- 如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
2 d; h- r9 s0 H5 I6 g3 Z - <default-interceptor-ref name="mystack"></default-interceptor-ref>
! P1 ~/ K( p5 h' z5 Z! R - * r5 z/ H$ J3 L' Y P$ J
-
' g |$ d D. d1 r2 g - <!-- 全局results配置 -->
+ U" [1 Z+ |# e! ^) E2 A - <global-results>
) j5 n; M7 U: R5 n - <result name="input">/error.jsp</result>
% A/ G- Y/ X+ x+ t# J5 X' m: O - </global-results>
: b+ k9 W& Z+ j2 ^ - # ~9 u% Z f9 \0 o0 K' M
- <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同)
) \# Y9 [9 A, j7 {( N - name:action名称 . A/ b& R! m3 k6 n2 F; P* r
- class: 对应的类的路径 $ Z: b. Y; o) Y5 C0 U+ V, \ p# W% F$ w! c
- method: 调用Action中的方法名
, e0 x) w$ {2 ?5 Y) _( X - --> , M& W: A0 Z" N' ^) S5 J$ H9 x
- <action name="hello" class="com.kay.struts2.Action.LoginAction"> 2 b+ @% @; Z1 A- |- G0 e, w
- <!-- 引用拦截器 : H( a" f$ u$ }
- name:拦截器名称或拦截器栈名称
+ v4 U$ n" g4 _1 u, b) a6 A - -->
0 Q3 @9 t+ k/ k, \3 a) a9 ?: }7 @ - <interceptor-ref name="timer"></interceptor-ref>
; J$ h- w/ F% L3 T$ ?. Z$ _; Z6 V" v - . T8 s* e5 l+ Z( A5 e: ?
- <!-- 节点配置
" g/ B) y" [: t$ Z$ { - name : result名称 和Action中返回的值相同 5 D( W6 z% r/ G6 i
- type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher $ O6 D G+ l+ n# i: W
- -->
' D' R0 {+ d8 s1 a% f$ _! k - <result name="success" type="dispatcher">/talk.jsp</result>
/ @. x) Y$ r t - <!-- 参数设置 9 E3 O/ ?7 G# q1 @
- name:对应Action中的get/set方法 4 d5 M# J8 x6 m& L8 Z
- --> & s0 [! k4 Z( {. o O! M" j
- <param name="url">http://www.sina.com</param> ) v. | j/ o$ _
- </action> 7 o. z3 [% Z# U1 D4 H
- </package>
" J/ X7 e) L3 Q6 }6 `5 C) q6 k - </struts></b></font></font></font>
复制代码 这些是常用的struts配置文件常量,如果想把struts用好,就要懂得每个配置是怎么一回事.不光光需要学习技术,更要学习好理论知识.技术的高度是由理论知识的深度决定的.
4 n9 F( Y/ ~* t9 O1 }- z% T2 W* H8 T# R ^8 O9 a
|