一:struts2的配置文件有哪些,相对应的作用是什么? Web.xml:包含所有必须的框架组件的web部署描述符.Struts2主要加载前端控制器及初始化参数. 0 M& l9 T- Y* T
Struts.xml:定义应用自身使用的action映射,拦截器及常量,result/view定义. 2 x( v( U1 ~6 h7 i4 h3 o |
Struts-default.xml:定义框架自身用的action映射及result
4 k7 m& C2 w2 f4 n& `1 Z# `Struts-plugin.xml:struts插件使用的配置文件 / a' W9 f6 Y. L" q9 F! ]3 v
Struts.properties:定义框架自身的全局变量及框架属性.
" n+ m1 [1 r: m/ n0 v
: J8 b% b. k3 [& Y1 @, q8 p二:配置文件的加载顺序
; G* G9 T2 j; iStruts-default.xml-->struts-plugin.xml-->struts.xml-->struts.properties-->web.xml 5 w( }) Z1 }# A9 I: e6 E
注:若之前的配置文件设置过某一属性,则以后加载的配置文件对于相同的属性的设置,会覆盖之前的配置 三:Struts2常量的具体用法实例Xml代码 - <font color="rgb(0, 0, 0)"><font face="SimSun"><font size="2"><b><?xml version="1.0" encoding="UTF-8" ?> $ V( M+ h. O8 Y4 z/ H
- <!DOCTYPE struts PUBLIC 5 X' E4 C8 Z3 e/ j- K
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
. C' ~. z/ N. C - "http://struts.apache.org/dtds/struts-2.0.dtd"> * D- ]6 {1 e/ I3 u1 i
-
! a7 @ ~( j6 J - <struts> 9 ?# k8 U* H% J! N2 D
- <!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 --> . a% O t0 M& ?
- <constant name="struts.i18n.encoding" value="UTF-8" /> 8 r6 b. z7 M: k$ A8 ?5 H4 A
-
1 h4 m, d. |! ^# v - <!--
) F4 h1 V1 R- }, X8 g1 ? - 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
, B7 c% Y) D' [ - 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。
8 ?4 o0 p3 ?2 U( |3 {" ] - --> * R9 I0 Z: \* v5 t/ l h0 B
- <constant name="struts.action.extension" value="do" /> 6 O$ y; E, K" s( P5 X [
-
C. }4 i5 Q% M7 f - <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
* ~9 K6 u6 W3 P& M - <constant name="struts.serve.static.browserCache" value="false" /> + [1 k0 ?# {) t0 Z @! ]' y
- - L7 ^; Q. Z& i; n
- <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
) @' r1 Q# H" |& y: S0 _* N - <constant name="struts.configuration.xml.reload" value="true" /> : B7 E7 J- R9 {: C1 U4 M
-
( L4 m. C. z/ ~6 [, h - <!-- 开发模式下使用,这样可以打印出更详细的错误信息 --> - f$ ]0 Y5 b* g* @2 K2 g
- <constant name="struts.devMode" value="true" /> # d) u, ]1 b5 E( O4 m
-
8 O( ^) T6 u& V: S. u$ x: e - <!-- 默认的视图主题 -->
. U; w& W$ |, _ - <constant name="struts.ui.theme" value="simple" /> ) v' L9 _" P* D o4 h
-
* |* I6 v2 M+ P# g* k3 {7 R - <!-- spring 托管 --> $ s% u+ n: M+ P7 C) ^$ M; }) V% g' r
- <constant name="struts.objectFactory" value="spring" /> . n- [, l. ?0 f1 P' k9 H
-
1 O R. t1 \5 J4 L - <!-- 1 ^9 c" d7 _. |! I0 J3 O; T# k& R) k
- 指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration & a H# |+ k0 k% m; n W' n
- 开发者可以自定义配置文件管理器,该类要实现Configuration接口,可以自动加载struts2配置文件。
# _. l4 m2 y- N6 _" g - -->
6 ~' j8 Q& u7 Z - <constant name="struts.configuration" % K7 _8 h+ x* v$ V$ z) e( v
- value="org.apache.struts2.config.DefaultConfiguration" /> - d( S. y- O l1 h' x; |! S$ A: f
-
. K) k7 Q" w0 ` - <!-- 设置默认的locale和字符编码 --> 5 y5 C7 T9 S' F7 o; h7 O
- <constant name="struts.locale" value="zh_CN" />
9 q; K2 d* V" q - <constant name="struts.i18n.encoding" value="GBK" />
! n6 H2 y' \5 f" ~2 o7 m2 Q+ k -
: t3 u, c3 T* D$ m G" Z; G - <!-- 指定Struts的工厂类 -->
2 q" P* C9 Q8 @) U( n$ N3 ^2 a - <constant name="struts.objectFactory" value="spring"></constant>
: B$ ^) m+ f, l* | -
4 w# |9 t. k- l+ \* s7 y1 B& p' E, \- C - <!--
# V- K8 d% A/ I1 G$ G" i - 指定spring框架的装配模式,装配方式有: name, type, auto, and constructor (name
' U0 j4 V ]! n! b& v - 是默认装配模式)
1 ]% T z! V& g" U8 r+ E - -->
, z+ x0 t1 V. L7 H; v - <constant name="struts.objectFactory.spring.autoWire" value="name" />
8 d/ J1 \% {( c: `4 G$ e - - L, s6 w: A2 x6 t
- <!-- 该属性指定整合spring时,是否对bean进行缓存,值为true or false,默认为true -->
& l* G/ k8 q- ] - <cosntant name="struts.objectFactory.spring.useClassCache" />
1 a1 V1 W9 r0 p* r7 U" | -
& o4 l: t, c! Y; @& b; U0 M - <!-- 指定类型检查,包含tiger和notiger -->
+ N, n2 O' Q1 m# Y( |5 w9 E$ O - <cosntant name="struts.objectTypeDeterminer" value="tiger" /> , S2 z' y- G ?3 B: L5 d( m
-
5 [# _6 B, H9 k: C$ B - <!-- 该属性指定处理 MIME-type multipart/form-data,文件上传 --> ) C/ `" a! m' c
- <constant name="struts.multipart.parser" value="cos" />
; B' ^8 j9 C, H - <constant name="struts.multipart.parser" value="pell" />
u3 D) v8 j, f( B+ o* t" h - <constant name="struts.multipart.parser" value="jakarta" /> * V1 j5 n. G6 L" S. s
- 2 d, r1 U6 f$ w) H
- <!-- 指定上传文件时的临时目录,默认使用 javax.servlet.context.tempdir -->
- d; m7 t6 B2 b+ V - <constant name="struts.multipart.saveDir" value="/tmpuploadfiles" />
5 [9 E" M7 g. @4 N- ^ - 4 b* g3 u$ W0 O! `, A
- <!-- 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 --> 6 v" V/ T% R. n+ G
- <constant name="struts.multipart.maxSize" value="2097152" />
+ Z8 q8 D: `4 v( G* u9 t4 Q -
( S+ h9 h4 `: i" Y# Y* ~6 r - <!-- ! p1 b+ L: F" t/ n& I
- 该属性指定Struts2应用加载用户自定义的属性文件,该自定义属性文件指定的属性不会覆盖
5 G8 l+ D8 d% W2 ~$ [6 m - struts.properties文件中指定的属性。如果需要加载多个自定义属性文件,多个自定义属性文 * c: f7 G% E! J3 C& F) G
- 件的文件名以英文逗号(,)隔开。(也就是说不要改写struts.properties!) 6 Q+ k( N# T; u+ S" p
- --> 1 {& G% x9 n7 l$ T' `. {, A5 j- x
- <constant name="struts.custom.properties"
1 K J; ^" N" C6 x - value="application,org/apache/struts2/extension/custom" />
5 j4 v' J6 u2 Q1 D4 ^ -
5 f$ J% F9 L) m9 G5 W/ u - <!-- 指定请求url与action映射器,默认为org.apache.struts2.dispatcher.mapper.DefaultActionMapper --> - a* ] u7 p: }3 L
- <constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" />
# C `& x! x" p; e V6 P - 5 n, P+ y) g7 r' f3 P
- <!-- 指定action的后缀,默认为action -->
- V+ a2 y7 m# F7 {! v4 X - <constant name="struts.action.extension" value="do" />
. j9 q2 d3 c3 [7 \9 y2 h& @ -
2 z! b! _( o' v - <!-- 被 FilterDispatcher使用指定浏览器是否缓存静态内容,测试阶段设置为false,发布阶段设置为true. --> 3 [* @! E8 a f8 t) I# i
- <constant name="struts.serve.static.browserCache" value="true" /> ! C4 B) l1 e" P u
- $ w# v9 J, S1 a6 t
- <!-- 设置是否支持动态方法调用,true为支持,false不支持. -->
" V& X, `7 c- E/ J9 k% i$ E - <constant name="struts.enable.DynamicMethodInvocation" value="true" /> 7 c& g6 h# Y2 O
- + K, f' n8 F. I. }8 w! }: O
- <!-- 设置是否可以在action中使用斜线,默认为false不可以,想使用需设置为true. -->
. g, a) b+ x* X% O9 l( e0 w - <constant name="struts.enable.SlashesInActionNames" value="true" />
. Q: Y- x9 s: Q4 z3 y - 7 S/ {. p. e& ]$ e. [, x
- <!-- 是否允许使用表达式语法,默认为true. -->
" q' Q( t+ O! o2 s; L/ j1 { - <constant name="struts.tag.altSyntax" value="true" />
! u7 y- b N. Z# u6 F4 H! K. o -
: ?8 G2 Y3 q3 }' g0 |" w: S - <!-- 设置当struts.xml文件改动时,是否重新加载 --> * E. ?1 R+ T# M+ P5 [/ i) w) W& C$ K
- <cosntant name="struts.configuration.xml.reload" value="true" />
# F c- @' K' m: K+ x, ?7 ^* _ -
# O0 I, Q* [: {1 p( t - <!-- 设置struts是否为开发模式,默认为false,测试阶段一般设为true. -->
' q/ r+ D+ V6 F; |5 m$ j7 a, O - <cosntant name="struts.devMode" value="true" />
+ _( T0 X- a" `/ x - # _5 \ J( f$ D7 M1 B
- <!-- 设置是否每次请求,都重新加载资源文件,默认值为false. -->
& J+ J/ @4 c1 T! y# T - <cosntant name="struts.i18n.reload" value="false" />
7 v! {& H7 q* k1 f8 \: o4 p' c& p2 t -
- z3 V! K; y. v" G. g3 h - <!-- 标准的UI主题,默认的UI主题为xhtml,可以为simple,xhtml或ajax --> " u% m4 {: M1 P [: t( W1 [- H
- <cosntant name="struts.ui.theme" value="xhtml" /> : g4 k) G$ o- K9 n h2 E7 H0 S
- & r; k9 P) b; F4 P' @
- <!-- 模板目录 -->
! g5 i$ c) i) H, L$ B* [6 n - <cosntant name="struts.ui.templateDir" value="template" /> ' q4 d+ k0 S Z/ s6 o
-
. W& j% `1 M+ H) E - <!-- 设置模板类型. 可以为 ftl, vm, or jsp --> . ?, j/ u+ ]- m% w
- <cosntant name="struts.ui.templateSuffix" value="ftl" />
J4 \* N$ E ^4 [; G# z - & G6 T: Q4 R& ]) m9 I- x) {
- <!-- 定位velocity.properties 文件. 默认velocity.properties -->
! |0 f# r! o$ r2 m, I - <cosntant name="struts.velocity.configfile" value="velocity.properties" />
) q1 u5 a* x# j1 ], [9 M - ; h: n& t: n3 u1 l) z
- <!-- 设置velocity的context. --> * v2 X) s( a& i' S. b" v
- <cosntant name="struts.velocity.contexts" value="...." />
[# N2 _6 L8 p -
$ v3 D& W9 h6 ^; Y9 ]! j6 z$ k3 o - <!-- 定位toolbox -->
9 z$ b; n O; \: A - <cosntant name="struts.velocity.toolboxlocation" value="...." /> 5 `: @: p' w) Y# n0 o9 r0 H
-
. c$ |1 b0 u, m( n' n: s8 v - <!-- 指定web应用的端口 -->
* o& E8 E1 f" f( \- T - <cosntant name="struts.url.http.port" value="80" /> ! k- x- o; Z, G3 o
-
, D% h$ Y L0 \ - <!-- 指定加密端口 --> * a- Z3 V# W; _$ y
- <cosntant name="struts.url.https.port" value="443" /> ( k% S7 y# r3 N
-
3 F* e% k7 i; k5 W6 @5 o - <!-- 设置生成url时,是否包含参数.值可以为: none,get or all -->
+ c0 R$ K* i. _ - <cosntant name="struts.url.includeParams" value="get" />
9 W- `, [' K! {" B/ e -
. Y$ |2 `5 [' n, B; G! M6 p: z# Z - <!-- 设置要加载的国际化资源文件,以逗号分隔. -->
4 M+ m/ b: A4 I+ L8 H, W - <cosntant name="struts.custom.i18n.resources" value="application" />
9 O$ \" Y4 _- V) M- s3 w - 1 N/ t$ |' ~/ W6 r8 F
- <!-- 对于一些web应用服务器不能处理HttpServletRequest.getParameterMap(), , {0 P. U3 t$ h) U) w) ^# }7 j
- 像 WebLogic,Orion, and OC4J等,须设置成true,默认为false. --> " j5 \' t9 a+ [. o( E
- <cosntant name="struts.dispatcher.parametersWorkaround" value="false" />
2 G' K' P* q8 A! G9 `, p8 a, d - % A7 I5 |0 ^$ Z4 m
- <!-- 指定freemarker管理器 -->
9 D8 T& l9 j2 i5 n - <cosntant name="struts.freemarker.manager.classname" value="org.apache.struts2.views.freemarker.FreemarkerManager" />
2 O: ?5 b" E' f - 7 S: v$ C! [" @& L( L
- <!-- 设置是否对freemarker的模板设置缓存,效果相当于把template拷贝到 WEB_APP/templates. --> 6 `/ Z% D! p% T4 ~, h# J* L0 m
- <cosntant name="struts.freemarker.templatesCache" value="false" /> 4 j( C4 l- P3 K# P) a
-
: C' R: K6 u" L- |# X( M% W- } - <!-- 通常不需要修改此属性. -->
1 U9 {* l* R+ b- k& Q2 C% {7 K! q - <cosntant name="struts.freemarker.wrapper.altMap" value="true" />
) g& O y# g( w9 B0 K+ R -
5 H' L w n: s- v - <!-- 指定xslt result是否使用样式表缓存.开发阶段设为true,发布阶段设为false. --> 3 Z9 a2 J; i* u- F: ]% Y" Y
- <cosntant name="struts.xslt.nocache" value="false" />
* A3 L# J- ^; U - " K! I# F7 l; T; d1 N
- <!-- 设置struts自动加载的文件列表. --> # b& c2 A. C7 I5 a
- <cosntant name="struts.configuration.files" value="struts-default.xml,struts-plugin.xml,struts.xml" />
9 V, t- D( c$ \$ `" T - . u$ C! V0 }7 N |( h; p
- <!-- 设定是否一直在最后一个slash之前的任何位置选定namespace. -->
: O5 v& Q! {# I4 b; T3 @2 n - <cosntant name="struts.mapper.alwaysSelectFullNamespace" value="false" />
0 t" q- `% O, Z$ i0 n4 w. | - </struts> - u% A4 T+ ~# ?8 L. s* U2 d
- ! Y5 I( v- o2 \ g3 G
-
! z! l5 {/ U7 L) `5 S- l1 f. ` -
V' y0 o- S5 {7 ~/ ^) k* G/ H: K - <struts>
+ K1 {! l3 i% _0 S; M9 V -
( b5 D# |5 j3 B" H: j' L - <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 -->
$ ?0 o3 a& u% ^7 G) f# ^0 U6 a - <include file="struts-default.xml"></include>
# x, T& G! x7 \1 ` - 7 g, Q# F; V1 i) [
- ( ^9 R7 W) j) X- M
- <!-- package提供了将多个Action组织为一个模块的方式
+ b: C; y1 P/ @ - package的名字必须是唯一的 package可以扩展 当一个package扩展自 * R5 w, x1 w' P2 V* L1 C) ~2 [' Z! ~
- 另一个package时该package会在本身配置的基础上加入扩展的package ! E7 W) Y6 q) O1 Y
- 的配置 父package必须在子package前配置
- [3 K7 K1 j' ]# {8 u. d - name:package名称 , l. C, [; R+ q+ V
- extends:继承的父package名称 & t" Q" c" T) n/ w5 c& f% z1 Z9 Y& S
- abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false & _. v2 ^# N; @0 k1 w) X8 s
- namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
' Z4 f6 p5 }5 t U* u - --> 5 x6 f) P/ |6 |9 E7 ^
- <package name="com.kay.struts2" extends="struts-default" namespace="/test"> ( G' C' ~. _/ b c- c0 y1 ^; @
- <interceptors> 1 ~9 Z! g5 H6 [ n! N, H
- <!-- 定义拦截器 4 J9 F* S3 T+ H$ U) I8 a! W! B
- name:拦截器名称 ) h G. s/ l5 E* h
- class:拦截器类路径
$ W3 o, n8 |! J# v0 C - -->
. z3 g. |! o9 v& W3 b - <interceptor name="timer" class="com.kay.timer"></interceptor> 3 C! s" P% v7 [' s3 X
- <interceptor name="logger" class="com.kay.logger"></interceptor> 6 e5 K- O& u) a. p$ H' y
- <!-- 定义拦截器栈 -->
: H2 n" a9 M/ ^/ } - <interceptor-stack name="mystack">
4 I X# o) s' W3 r/ }; K7 N' s - <interceptor-ref name="timer"></interceptor-ref>
/ n' @2 ^6 b# j0 d+ d - <interceptor-ref name="logger"></interceptor-ref> 9 q: i7 \. I. F9 S" V+ S' k, D% s% W
- </interceptor-stack> 6 o4 P J4 b) E6 R) `
- </interceptors>
8 z, O2 J, {, y3 `! ` -
3 ~3 D: m: A8 h - <!-- 定义默认的拦截器 每个Action都会自动引用 / o6 } ^' v$ ?) c: ^
- 如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
& k9 C& \ j: l$ b - <default-interceptor-ref name="mystack"></default-interceptor-ref>
0 e$ M* \- k' d7 F - : X0 z: z. X. M# r) y6 x4 Z- ~
-
4 z- f% b% @8 T' g8 x - <!-- 全局results配置 --> * g: k, N% ~1 g/ X4 o
- <global-results> * R# z" @2 C9 F8 |, [# H; x
- <result name="input">/error.jsp</result> Q3 P$ u- w/ l5 {7 M" b) A
- </global-results> 2 J# ~) P, `6 r( z# Z1 X! n8 j
-
7 ^( e- b6 l) z - <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同)
* N7 k, f/ w+ i% L' [8 h$ Y - name:action名称 1 J' u; ` V1 A m: F" H# y! O
- class: 对应的类的路径 ' ]+ D. o! l2 K. E" ~. Z* d
- method: 调用Action中的方法名
/ E. [4 F0 s- S& T' ^5 L. Q* I - --> 1 x% W: O9 S2 c5 u6 x
- <action name="hello" class="com.kay.struts2.Action.LoginAction"> * f7 D0 q: K# r
- <!-- 引用拦截器
7 a' B6 s$ M& F$ H" e2 P - name:拦截器名称或拦截器栈名称 ( q* R7 p# J( N" [, e
- -->
) r/ {/ S" b8 y9 D( I - <interceptor-ref name="timer"></interceptor-ref>
5 t# u3 b9 p9 U( U -
' Z4 l4 o9 N& g - <!-- 节点配置
x- e5 s, K$ ~" Q1 z! Q' w - name : result名称 和Action中返回的值相同
# ?! [3 u0 k6 K7 y) t B - type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher
1 q9 S/ K( {0 I6 Z1 o - -->
5 K$ F; ~6 G( D+ a7 y - <result name="success" type="dispatcher">/talk.jsp</result> , [6 K5 Y1 s) \7 g
- <!-- 参数设置 ; t- @. x% v% E5 I
- name:对应Action中的get/set方法 $ i/ M" _2 q- q) [3 ]+ W. @# W
- --> # V1 B5 ~/ C0 ~+ L
- <param name="url">http://www.sina.com</param> 7 R3 y% q0 ]$ P% o8 }1 T, [
- </action> 0 Q- i2 K: T0 J/ @
- </package> 4 V9 |; Y- e7 o+ t/ V
- </struts></b></font></font></font>
复制代码 这些是常用的struts配置文件常量,如果想把struts用好,就要懂得每个配置是怎么一回事.不光光需要学习技术,更要学习好理论知识.技术的高度是由理论知识的深度决定的. 9 t: h3 W& L [& y( H
; D5 u) j( X; v" o/ q |