一:struts2的配置文件有哪些,相对应的作用是什么? Web.xml:包含所有必须的框架组件的web部署描述符.Struts2主要加载前端控制器及初始化参数. % @& H! T% f! I4 i+ s2 L
Struts.xml:定义应用自身使用的action映射,拦截器及常量,result/view定义.
" S" _$ Q" ?$ JStruts-default.xml:定义框架自身用的action映射及result
; e. ^. Y, j/ y! L; O/ N. aStruts-plugin.xml:struts插件使用的配置文件
$ q/ P. b7 C# nStruts.properties:定义框架自身的全局变量及框架属性. : b6 i3 \& Y3 ?7 z x5 A
8 ~% X) _0 Z2 |二:配置文件的加载顺序 2 u+ `; W. h. b+ B- D1 W W
Struts-default.xml-->struts-plugin.xml-->struts.xml-->struts.properties-->web.xml
3 Q; R0 i/ [, n# O' |注:若之前的配置文件设置过某一属性,则以后加载的配置文件对于相同的属性的设置,会覆盖之前的配置 三:Struts2常量的具体用法实例Xml代码 - <font color="rgb(0, 0, 0)"><font face="SimSun"><font size="2"><b><?xml version="1.0" encoding="UTF-8" ?> 6 [$ V- K _' R, ~5 j2 c& w" Y
- <!DOCTYPE struts PUBLIC
+ g' d/ |1 t5 m! ?6 A - "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 7 W$ T! c5 }- m' |
- "http://struts.apache.org/dtds/struts-2.0.dtd">
; ]# J6 o) R3 H( v- P/ e4 \ -
4 l! W( b6 _6 T% |2 `- X$ L - <struts>
. g' W; ^) @' ~) w3 d - <!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
& y7 R) m, M) } - <constant name="struts.i18n.encoding" value="UTF-8" />
0 j% \+ _, f# } - 0 D$ M; N' _0 G h8 N
- <!-- ( a8 Q' N% ^$ q: u/ F
- 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。 / D8 V# g1 A" ` c8 m
- 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 , Z2 Z: T2 \$ Y8 b$ I/ D: a+ u
- --> 3 w4 Z: R# T+ [3 z, g
- <constant name="struts.action.extension" value="do" />
7 F: g( S. ]/ ` -
d1 a5 t+ t) f+ y) g0 A - <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 --> ( y' _' ?4 c$ U( [8 F! H$ a5 h
- <constant name="struts.serve.static.browserCache" value="false" /> $ S; P% W- \$ Y% S
- + k2 q& W5 w5 g
- <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
( Z4 q5 }) g' w - <constant name="struts.configuration.xml.reload" value="true" /> ' n' X& Z+ d: f- P2 |
- ; F+ ?# i- |; P l8 D
- <!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
% R0 j6 p, }/ k$ T - <constant name="struts.devMode" value="true" /> # o0 q2 i2 t |
- : j. B0 \) P$ _) [" v! Q
- <!-- 默认的视图主题 -->
, p1 r- @/ T: a - <constant name="struts.ui.theme" value="simple" /> ! V% T& Y4 R! _" T
-
' U4 h8 l0 h H9 ]: ` - <!-- spring 托管 --> 7 Z q4 o0 X; l& l3 n/ M# b2 c
- <constant name="struts.objectFactory" value="spring" />
0 N; s, s; W! g" E9 X -
, {, H5 K' T" t - <!-- ' u# ]5 M+ Q8 u, ?3 Z
- 指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration
; |, W# Y6 R3 X - 开发者可以自定义配置文件管理器,该类要实现Configuration接口,可以自动加载struts2配置文件。
% P( T7 U& b: [: @8 y - --> 2 a. t% y9 `, A' b q* O! r
- <constant name="struts.configuration"
# t- h/ }: @" D6 N0 [ - value="org.apache.struts2.config.DefaultConfiguration" />
& H( y; z) r. m* ~ e1 C - ! {. ^7 p/ ? x+ r& @! H/ b- N: I
- <!-- 设置默认的locale和字符编码 -->
2 [* r& T+ [$ t. b - <constant name="struts.locale" value="zh_CN" /> 0 d6 m& ~" ]* t+ I9 o. v5 `% |
- <constant name="struts.i18n.encoding" value="GBK" />
2 j) N n/ s9 z1 { -
! v6 p, b! ~/ D- D/ |/ T6 K - <!-- 指定Struts的工厂类 -->
6 k9 J# v$ f6 O- Q& s - <constant name="struts.objectFactory" value="spring"></constant>
& L, f5 S$ ], \7 C0 M - : l* R8 @9 D0 M- O6 g6 I
- <!-- 1 D( i% f7 p+ F6 f$ _, k9 p
- 指定spring框架的装配模式,装配方式有: name, type, auto, and constructor (name
: n3 |" }+ r( t2 Q, `& l, Q0 \( ~ - 是默认装配模式) 2 l/ e* f5 [, q- D- g
- --> ) e5 k4 |# a; Y6 T6 T; }2 r
- <constant name="struts.objectFactory.spring.autoWire" value="name" /> $ `1 J# d8 r4 n5 M8 Z s. A5 z, J
-
/ j6 h2 ~1 {! N - <!-- 该属性指定整合spring时,是否对bean进行缓存,值为true or false,默认为true --> + V) r" L7 G. O' P$ Y i
- <cosntant name="struts.objectFactory.spring.useClassCache" /> 7 e8 T7 u* N7 f& q0 k
-
: K! Z$ g/ X) W) i: z# z Q5 O1 }; y - <!-- 指定类型检查,包含tiger和notiger -->
0 {/ K9 r# }# p( q& } - <cosntant name="struts.objectTypeDeterminer" value="tiger" />
6 F0 x1 E# `+ }7 U6 h1 F, Q -
9 @: _. ?3 f, n- s - <!-- 该属性指定处理 MIME-type multipart/form-data,文件上传 --> # P' g, X; N( j1 N5 t
- <constant name="struts.multipart.parser" value="cos" />
8 L$ q9 N' j; _7 p8 M5 R N+ P - <constant name="struts.multipart.parser" value="pell" />
/ O0 f' K3 X3 Q - <constant name="struts.multipart.parser" value="jakarta" /> 4 {/ S: T% a G8 x, v# j# w. b( `
-
$ s' a6 k: h4 t$ ~) F- u( w - <!-- 指定上传文件时的临时目录,默认使用 javax.servlet.context.tempdir --> & `; L7 l5 V- U, {2 O
- <constant name="struts.multipart.saveDir" value="/tmpuploadfiles" />
) ~+ k" t* Y2 g- n6 @ - % t9 n3 Z l$ i/ M0 l6 q
- <!-- 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 -->
0 P! C; M2 L& j - <constant name="struts.multipart.maxSize" value="2097152" /> 3 v3 f L, }$ _. R
- ) }& A2 h* H3 g) k
- <!--
) Q! s4 p, {* ]5 U, `; U7 x1 y- J: W - 该属性指定Struts2应用加载用户自定义的属性文件,该自定义属性文件指定的属性不会覆盖 6 \" c4 ~& N# ]& f
- struts.properties文件中指定的属性。如果需要加载多个自定义属性文件,多个自定义属性文
; ` Y$ F. Y$ L/ G- c - 件的文件名以英文逗号(,)隔开。(也就是说不要改写struts.properties!) ( ~9 v. B9 @9 I. p
- --> ! r) S5 U' k" X% K8 I
- <constant name="struts.custom.properties" " P3 {/ Z, I r5 H0 E- T% ]0 d
- value="application,org/apache/struts2/extension/custom" />
! ]# f; G$ ^& g - 4 W9 W* G* ]' }6 ? H0 P
- <!-- 指定请求url与action映射器,默认为org.apache.struts2.dispatcher.mapper.DefaultActionMapper --> " w- x0 C! o# g7 m6 `: P' u
- <constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" /> & g1 y; Z, H8 u Q6 h2 r* x% _
-
$ k0 [4 d- B- y$ z, d; ?; r O - <!-- 指定action的后缀,默认为action -->
3 z' @# M: _ y. B0 P! h7 S3 B - <constant name="struts.action.extension" value="do" />
8 e! {4 Q9 u+ U+ W& c) T' u0 z -
7 j/ a, N, k& d/ J- V - <!-- 被 FilterDispatcher使用指定浏览器是否缓存静态内容,测试阶段设置为false,发布阶段设置为true. -->
# Z! O( r* K+ ]% P% o6 L. m - <constant name="struts.serve.static.browserCache" value="true" />
# v0 z$ r% s) Y. m) U- u - + ]. d* i7 g9 W
- <!-- 设置是否支持动态方法调用,true为支持,false不支持. --> ; A8 Z2 u: Y5 A& ]( U3 b4 m* {
- <constant name="struts.enable.DynamicMethodInvocation" value="true" />
! B5 Y" k* D7 e3 @ - 5 e5 r/ I+ t/ k0 s: I1 k2 a$ J
- <!-- 设置是否可以在action中使用斜线,默认为false不可以,想使用需设置为true. -->
2 V! ?$ L/ T* l" D# o& Z% Q1 n - <constant name="struts.enable.SlashesInActionNames" value="true" />
4 J. v3 C& m+ m* q$ p -
1 ] f1 o, X% B$ ?9 B: d - <!-- 是否允许使用表达式语法,默认为true. --> 9 r' D% C- V0 J* I8 l
- <constant name="struts.tag.altSyntax" value="true" /> ! W) h5 e' W6 N3 @* q
-
5 {% m1 C" E. K2 F5 n - <!-- 设置当struts.xml文件改动时,是否重新加载 -->
9 _3 y& h6 q3 x - <cosntant name="struts.configuration.xml.reload" value="true" />
# N8 J2 n* X8 r* a+ K - / m* g: A% m. V" F9 j
- <!-- 设置struts是否为开发模式,默认为false,测试阶段一般设为true. --> & r( o; ^; r$ a5 L! _ O* d8 U; ]9 k R9 j
- <cosntant name="struts.devMode" value="true" /> 2 c' k! Z% I. T) g9 t. Z- e
-
8 v9 L" l* p9 O - <!-- 设置是否每次请求,都重新加载资源文件,默认值为false. -->
6 H9 n& ?- ` m) ^3 Y - <cosntant name="struts.i18n.reload" value="false" /> 1 q! x5 d5 p) R/ m/ m
- M* h3 k, ]2 u# z
- <!-- 标准的UI主题,默认的UI主题为xhtml,可以为simple,xhtml或ajax --> : |9 q ^% A, K8 u8 w) s6 p
- <cosntant name="struts.ui.theme" value="xhtml" /> 7 i% ~) b# S) k$ c: U8 S
-
/ F, J, t3 C% G; r7 T l - <!-- 模板目录 --> # q: V" G4 T. f2 t9 {
- <cosntant name="struts.ui.templateDir" value="template" /> $ E) M9 Q0 T8 K; K3 i
- - r; Y2 l i2 x
- <!-- 设置模板类型. 可以为 ftl, vm, or jsp --> " J2 I- `8 K' U; S! Y
- <cosntant name="struts.ui.templateSuffix" value="ftl" /> 4 X7 N7 F% D9 h0 p( Z) D' J7 h2 K
-
7 P2 m2 z) G$ a( o$ \7 r0 g% j2 G0 Y - <!-- 定位velocity.properties 文件. 默认velocity.properties -->
: j. {5 A$ s/ Y - <cosntant name="struts.velocity.configfile" value="velocity.properties" /> ) Q5 s- X8 J4 p2 E4 s0 G
- & h* F- K# a+ @0 c' g! t/ T
- <!-- 设置velocity的context. --> & R* }/ s# i" v% G3 R
- <cosntant name="struts.velocity.contexts" value="...." />
7 d# F* r- B+ I0 {- H - 4 Q9 X3 H5 k2 v$ |; z! @. l: g
- <!-- 定位toolbox -->
L4 ?2 ~$ ^. E& Q: h# J - <cosntant name="struts.velocity.toolboxlocation" value="...." /> 8 ]3 U! S, c l0 @
- ' p: `6 v! V9 Y% B
- <!-- 指定web应用的端口 --> 3 A8 l3 x. h+ t1 u t
- <cosntant name="struts.url.http.port" value="80" />
2 ?$ O& S7 ]3 e9 G' u - $ o4 o5 }. V! S- M# A* a
- <!-- 指定加密端口 --> 5 p0 w" |/ ~) S
- <cosntant name="struts.url.https.port" value="443" /> % o' `9 W- g9 n# ^0 Z' H! H/ J
-
* E7 A1 J: D6 C1 M& P7 z - <!-- 设置生成url时,是否包含参数.值可以为: none,get or all --> 7 ~5 n2 i8 v6 @5 V
- <cosntant name="struts.url.includeParams" value="get" />
, C( y+ L6 h7 S/ u" K1 e - ) Z$ y2 x- P0 ~& c' q
- <!-- 设置要加载的国际化资源文件,以逗号分隔. --> : L/ |; ?1 H+ X3 \
- <cosntant name="struts.custom.i18n.resources" value="application" />
p& i( v7 @/ I4 V8 @ -
9 Q! N F5 A9 Q) h" h - <!-- 对于一些web应用服务器不能处理HttpServletRequest.getParameterMap(), ( E! N; e9 a' G+ B/ {: @! m. y
- 像 WebLogic,Orion, and OC4J等,须设置成true,默认为false. -->
9 ~ a; V8 n/ Y7 B4 l ~ - <cosntant name="struts.dispatcher.parametersWorkaround" value="false" /> 1 g9 T; ^ X6 v& W1 u
-
+ E. R1 q! C7 F( T+ j - <!-- 指定freemarker管理器 -->
. K0 `6 Q4 u3 R$ C - <cosntant name="struts.freemarker.manager.classname" value="org.apache.struts2.views.freemarker.FreemarkerManager" />
, [' a6 W$ _1 t \; B2 } - / ? B# S# T) v5 P. E
- <!-- 设置是否对freemarker的模板设置缓存,效果相当于把template拷贝到 WEB_APP/templates. --> ' N1 b( A2 A) o5 o* c3 G% K
- <cosntant name="struts.freemarker.templatesCache" value="false" />
* g* ]$ R" k& c9 M+ f6 b -
7 g+ i/ N K, y9 U - <!-- 通常不需要修改此属性. --> 6 m7 w- w1 t( ?% ~) D2 j* k
- <cosntant name="struts.freemarker.wrapper.altMap" value="true" />
' z- V4 T0 l4 f% Q - " b O4 c9 x, V
- <!-- 指定xslt result是否使用样式表缓存.开发阶段设为true,发布阶段设为false. --> ( z. V% _2 p# l& J/ d6 @' m
- <cosntant name="struts.xslt.nocache" value="false" />
# X9 }' G" c8 t - 8 U, v: g' N+ I3 C: I
- <!-- 设置struts自动加载的文件列表. --> ; F' X: R% n' ]2 J1 Z V1 w0 B6 c
- <cosntant name="struts.configuration.files" value="struts-default.xml,struts-plugin.xml,struts.xml" /> 5 o5 y+ m. [* f$ l! h' e0 [
-
2 B* e# R$ x; G* X - <!-- 设定是否一直在最后一个slash之前的任何位置选定namespace. -->
3 i8 t+ g+ G% H) U4 y7 h - <cosntant name="struts.mapper.alwaysSelectFullNamespace" value="false" />
[6 C$ o k8 s( O @/ N$ ^1 U - </struts>
! o' f6 o1 n: D - / a5 U1 `, L: S( d9 W) z
- ; i! ?+ R" r E& L: j
-
. [/ i- V5 @! F& R5 w- @9 t& O* e - <struts>
9 C) `4 M% y( ? - - H4 v* f$ P V& V
- <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 -->
5 d7 d& K/ [" K; i: x6 q - <include file="struts-default.xml"></include>
4 L% Y- q- r8 R$ G5 R) H - ) m- [8 d4 w' [1 h
- ! y. u( P2 _6 [ |! D( q
- <!-- package提供了将多个Action组织为一个模块的方式
% k h7 V1 r1 n# B1 _ - package的名字必须是唯一的 package可以扩展 当一个package扩展自 $ y4 g' a2 L" i( i4 y. x- C
- 另一个package时该package会在本身配置的基础上加入扩展的package , P% O, u3 X6 g
- 的配置 父package必须在子package前配置
; M# R8 w: F2 a - name:package名称
; {: p$ ^- X, k9 W! ~ - extends:继承的父package名称 " y2 r6 w) I( D+ L7 W, P) @4 N
- abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
+ i U/ v, x2 C" o7 @8 M5 w3 m - namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action 5 I$ g) F' j& i0 I( ~( \& b
- --> / P. O8 t6 P; b' l/ s% ? j
- <package name="com.kay.struts2" extends="struts-default" namespace="/test"> 9 C% z7 g# g+ p( T7 t
- <interceptors>
5 ?# l* l# x1 u, F4 a+ G" j - <!-- 定义拦截器 ' Z% f- \ f N
- name:拦截器名称
: @6 h" ] l @! G& b7 B$ ]% ^ - class:拦截器类路径
0 Q6 ~) V3 t! ^9 z+ N3 r - --> 9 [3 X- P& j# u6 ~0 ~
- <interceptor name="timer" class="com.kay.timer"></interceptor>
- }6 {+ x% U4 O; s- V, M - <interceptor name="logger" class="com.kay.logger"></interceptor>
# K6 ~0 }% E K2 g+ w - <!-- 定义拦截器栈 --> : z( V' }3 p8 h% r7 l7 V
- <interceptor-stack name="mystack"> 6 @4 V' R; P9 N. ?
- <interceptor-ref name="timer"></interceptor-ref>
# r) M- o- V% r& M - <interceptor-ref name="logger"></interceptor-ref>
) z8 X7 e" C* D) r2 r - </interceptor-stack> 3 f4 ^0 D6 j* N* h5 M0 b5 c
- </interceptors> , y/ }* h# W& M) C
-
2 T0 q$ `, D! E a6 l6 R$ S - <!-- 定义默认的拦截器 每个Action都会自动引用 * k5 |7 W- T) g2 @
- 如果Action中引用了其它的拦截器 默认的拦截器将无效 --> 4 [ k& @3 j8 @: Z
- <default-interceptor-ref name="mystack"></default-interceptor-ref> * k2 R/ c; O: H5 R5 _& Y( M
-
. P+ F% w- F' Z& s! u) D X -
B/ x+ B P4 Q7 ?# J, w. } - <!-- 全局results配置 -->
1 _6 G; M" A2 [6 \ - <global-results> 1 j0 O$ _+ `, l0 p# W0 N
- <result name="input">/error.jsp</result> 6 G4 a- G' N2 S% F& G' H
- </global-results>
3 v" X7 z5 \9 h; z/ o: V7 H -
' X1 M9 [4 F+ x( d - <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同)
4 S) A, I# Y! U9 m5 f8 {' Q L6 h! Q - name:action名称 " o; _ [) f8 R8 x+ w' ~; M* K
- class: 对应的类的路径
/ I5 w/ p! a4 Z/ H+ a9 U - method: 调用Action中的方法名 ! J; ^7 v0 e" L6 p' ?% i( ^4 P2 |. T
- -->
: E3 i6 M D: n0 e) ^& o - <action name="hello" class="com.kay.struts2.Action.LoginAction"> $ k% p: D( [" ?. w6 x1 K
- <!-- 引用拦截器
2 N9 c5 X- Z9 Y! u0 A - name:拦截器名称或拦截器栈名称 ! j( A" ?& E6 f( @6 ^) f6 }! m
- -->
4 L* A7 g9 a( S6 R - <interceptor-ref name="timer"></interceptor-ref>
! W1 S( E& x! z9 x7 K/ s( } - / g% N# `/ K: F+ x
- <!-- 节点配置
) a# f8 c- B$ V% N7 z9 {$ z - name : result名称 和Action中返回的值相同 & d& o; X: x1 U) A1 G2 R
- type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher . O% E6 ?( H0 q7 ~1 _/ P
- --> 6 F( x' T' s* Z+ H" d( F
- <result name="success" type="dispatcher">/talk.jsp</result> " ?- v$ E9 W! }+ L8 z6 Y
- <!-- 参数设置 0 m; g2 z4 n, P& _
- name:对应Action中的get/set方法
. k7 }$ U0 |2 K$ G+ c8 a# |& ]! g - --> % R) S1 p$ c/ ^) j- V
- <param name="url">http://www.sina.com</param>
$ h. p# h$ k/ K+ |" C4 T - </action> 6 p0 ^0 t$ ?- F
- </package> 2 h8 M* g' T+ h1 o# a: A
- </struts></b></font></font></font>
复制代码 这些是常用的struts配置文件常量,如果想把struts用好,就要懂得每个配置是怎么一回事.不光光需要学习技术,更要学习好理论知识.技术的高度是由理论知识的深度决定的. % b5 Q5 }) d. r! ~. d, ?
# l! h% p' u. s v/ v7 ?" O: r
|