一:struts2的配置文件有哪些,相对应的作用是什么? Web.xml:包含所有必须的框架组件的web部署描述符.Struts2主要加载前端控制器及初始化参数.
8 ~0 x1 W3 B+ h+ G; T% ]Struts.xml:定义应用自身使用的action映射,拦截器及常量,result/view定义.
" J3 ~0 @0 y5 Y8 @' e/ o: DStruts-default.xml:定义框架自身用的action映射及result 4 ` |7 b$ s$ x% P- x, s, H
Struts-plugin.xml:struts插件使用的配置文件 . I, S$ W; f& e7 O- v2 F" p$ w
Struts.properties:定义框架自身的全局变量及框架属性.
6 f5 m8 o3 y3 d8 W0 V) e. }" x/ X0 ]1 H" c' C1 `4 {
二:配置文件的加载顺序
& y5 C% P( Z# M- |Struts-default.xml-->struts-plugin.xml-->struts.xml-->struts.properties-->web.xml
/ T: w8 g% \' U: C注:若之前的配置文件设置过某一属性,则以后加载的配置文件对于相同的属性的设置,会覆盖之前的配置 三:Struts2常量的具体用法实例Xml代码 - <font color="rgb(0, 0, 0)"><font face="SimSun"><font size="2"><b><?xml version="1.0" encoding="UTF-8" ?> # ?7 B. o/ f0 C5 P
- <!DOCTYPE struts PUBLIC ; b0 U) [/ N, q' U$ \- B
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
7 u6 P v! w- u4 R8 M - "http://struts.apache.org/dtds/struts-2.0.dtd">
B2 i0 I5 j: M% f3 P - * z1 B- [8 e2 W! Z1 j9 d, d
- <struts>
# x: B T+ a$ z$ U0 B, I/ M; { U - <!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
/ _! I; Z7 \, B/ n* n. S4 [/ m - <constant name="struts.i18n.encoding" value="UTF-8" /> 3 B% \2 e+ n9 b. h1 w }3 I: F
-
0 b8 W, ^0 S/ g$ s# i' w7 o6 } - <!--
2 i: {% N# u* s, U g& d - 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
! Z; V3 C+ }( W' @) A" d# H/ D+ K$ g - 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 & w9 h2 K4 i: `; h0 k+ A2 f& U
- -->
W* J, \0 c# [' X9 h# g - <constant name="struts.action.extension" value="do" /> ' ?8 |# K! a4 n: \ T1 r
-
* a% P8 V) b+ h U! c - <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
0 @1 }/ V9 v0 \ j - <constant name="struts.serve.static.browserCache" value="false" />
6 n1 J# t& v: N+ o. b& H0 P -
2 D3 ~6 x4 v5 n! b8 ` M* Y! C - <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
M0 m3 o6 x& U B2 Y5 c4 F6 ` - <constant name="struts.configuration.xml.reload" value="true" />
0 E# N! i T5 q9 v% F' {3 F( a, M -
5 Z0 s4 e4 Y2 F2 h- ] - <!-- 开发模式下使用,这样可以打印出更详细的错误信息 --> - C. K, \; G) }1 e- L
- <constant name="struts.devMode" value="true" /> 7 z+ G' M6 A6 P4 B1 f
- 8 \& f( z+ q' a5 E y3 J. a0 D
- <!-- 默认的视图主题 --> * l7 q4 d, ]5 l+ F2 @) W- S
- <constant name="struts.ui.theme" value="simple" />
8 C. E/ n `( V. h; u0 m/ g -
, w: {0 H; L) U) I8 x - <!-- spring 托管 -->
7 f. h/ N6 Z3 M4 M& k5 Q - <constant name="struts.objectFactory" value="spring" />
0 B% w. U' p) T5 q0 | -
- @, t0 q% q0 N2 _) t/ @- N+ L - <!--
) _( u: e2 s# k" `6 p. u - 指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration * ?- \4 V/ w5 h+ }7 _ F! C
- 开发者可以自定义配置文件管理器,该类要实现Configuration接口,可以自动加载struts2配置文件。
% j% }, `+ \+ F( D/ s! x" r - --> 5 z" Z% K4 m! T9 [+ B" g; U' M
- <constant name="struts.configuration"
3 f5 ^6 }1 g4 t% m. Q. I4 P; {4 \ - value="org.apache.struts2.config.DefaultConfiguration" />
" \! j! n' |( d% x* v -
* x$ s) f0 A- l- L- C v - <!-- 设置默认的locale和字符编码 -->
: ?2 {6 x2 ]4 C X - <constant name="struts.locale" value="zh_CN" /> 3 X6 K: ?, ?! [, L% x
- <constant name="struts.i18n.encoding" value="GBK" />
6 ~' p: ^2 @* H! @, t- R - X6 ]& ~/ Y9 F B
- <!-- 指定Struts的工厂类 --> 1 ]( U z9 p6 c1 f" v2 _* {( L
- <constant name="struts.objectFactory" value="spring"></constant>
9 k ^# c# B2 y+ [% t0 z - ! R( |. j) |3 s! @ A6 L$ j5 ]
- <!--
; g2 i! C* m& F1 ?7 A - 指定spring框架的装配模式,装配方式有: name, type, auto, and constructor (name - b* `! U, Y: x3 ~! K
- 是默认装配模式) 8 v5 k: e( T* z; J/ Y" X% c
- -->
6 j H; L+ m0 \( j# _& M2 D - <constant name="struts.objectFactory.spring.autoWire" value="name" />
$ p! W. s& R- i0 F8 s - 9 {+ ]. N) Z c# j& j2 l
- <!-- 该属性指定整合spring时,是否对bean进行缓存,值为true or false,默认为true -->
+ K' Z! E3 s% f2 _/ p - <cosntant name="struts.objectFactory.spring.useClassCache" />
- H% u) Z/ @3 ~ - 2 J- s3 } o' |# R) v& Y7 f
- <!-- 指定类型检查,包含tiger和notiger --> ) }0 f% d Y+ m% B5 V7 c% I F
- <cosntant name="struts.objectTypeDeterminer" value="tiger" />
8 t0 \" U, j, X/ x* b8 L - 4 z8 _ Y0 c4 C0 c( }- c
- <!-- 该属性指定处理 MIME-type multipart/form-data,文件上传 --> 7 Z5 F1 O) o8 T: [0 [( w. i
- <constant name="struts.multipart.parser" value="cos" /> 9 x3 s1 k+ @& P, L* T0 r ]4 l
- <constant name="struts.multipart.parser" value="pell" />
! m9 J* y. _0 p) Z8 E$ p - <constant name="struts.multipart.parser" value="jakarta" />
. m5 ?/ M& R9 j/ ^0 K& F8 a - " P+ R8 E' B4 G
- <!-- 指定上传文件时的临时目录,默认使用 javax.servlet.context.tempdir -->
' X* s; R( N0 @, J5 } - <constant name="struts.multipart.saveDir" value="/tmpuploadfiles" />
1 o: v B# C; \' u' f/ T -
! N' w- n. G" E' W, Z$ a5 h1 h- S3 S - <!-- 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 -->
: L9 H1 k6 T' m# ~" B, @; D! L% M - <constant name="struts.multipart.maxSize" value="2097152" /> . b' c4 E/ Q& A$ \1 d, x E
-
) g2 n0 O1 k/ ~* b* I& { - <!--
, c I# R8 W( |# {9 ~" | - 该属性指定Struts2应用加载用户自定义的属性文件,该自定义属性文件指定的属性不会覆盖 $ f2 y9 s. S @8 P
- struts.properties文件中指定的属性。如果需要加载多个自定义属性文件,多个自定义属性文
) I; v( V! i: ~& o - 件的文件名以英文逗号(,)隔开。(也就是说不要改写struts.properties!)
8 S: s9 W% T: D7 P+ B6 x - --> 4 c" j8 y- j3 y" _: x4 K6 }
- <constant name="struts.custom.properties" 6 I s3 n2 @% S4 {2 {/ {1 _' n
- value="application,org/apache/struts2/extension/custom" /> 3 K$ B' w( @. z# z
-
+ V: o: C9 w0 ?# } - <!-- 指定请求url与action映射器,默认为org.apache.struts2.dispatcher.mapper.DefaultActionMapper -->
. E! ?8 e1 J8 s( l6 _, b3 _$ r7 v - <constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" />
! y; S: \1 g) c+ C( K f - , K% T/ j8 ]2 G. _& ?" J
- <!-- 指定action的后缀,默认为action --> 8 j; M- L8 }# w3 |/ b/ ~
- <constant name="struts.action.extension" value="do" />
5 E3 _7 w+ x4 C2 \ - 9 m1 J4 J5 B) ]! _% ^) w9 w
- <!-- 被 FilterDispatcher使用指定浏览器是否缓存静态内容,测试阶段设置为false,发布阶段设置为true. -->
$ m+ f; h3 p# g0 H - <constant name="struts.serve.static.browserCache" value="true" />
- n+ \! o- E @" n -
1 x8 C: o& |4 a" H6 o) A, z" ` - <!-- 设置是否支持动态方法调用,true为支持,false不支持. -->
M" E1 ^+ p, J3 Q- p' X( i2 i+ w - <constant name="struts.enable.DynamicMethodInvocation" value="true" /> 9 Z5 c8 u. t' W4 U$ y0 _3 ?$ {
- - q- n( x$ j% _1 d
- <!-- 设置是否可以在action中使用斜线,默认为false不可以,想使用需设置为true. --> 2 A2 g3 E1 o- ?
- <constant name="struts.enable.SlashesInActionNames" value="true" />
! ?4 x: J1 ^0 f - 0 M# X5 @. D" k
- <!-- 是否允许使用表达式语法,默认为true. -->
) [0 b* B2 f1 e M - <constant name="struts.tag.altSyntax" value="true" /> " Z( ^" m. d U7 F' I$ v5 _7 m
- ; I$ D& a* |7 i) a
- <!-- 设置当struts.xml文件改动时,是否重新加载 -->
4 V" R; L! {7 s1 X F! o - <cosntant name="struts.configuration.xml.reload" value="true" /> & \) F [6 |7 X" j5 ]# j' p: d! B1 _
-
+ M- y& ^: o: ?. m- | - <!-- 设置struts是否为开发模式,默认为false,测试阶段一般设为true. --> 7 I" u# \" `1 p3 @1 \' H- R( s9 D
- <cosntant name="struts.devMode" value="true" /> 8 ~% r" {* s' C; w& R/ b3 X1 E
- : @6 u* ]: m* D! x
- <!-- 设置是否每次请求,都重新加载资源文件,默认值为false. -->
4 t2 X0 q# A5 k& r - <cosntant name="struts.i18n.reload" value="false" /> ^) R' }4 K" b9 Q) T. b
-
" Z; x/ K) B7 f: I3 T" g* u, W0 ` - <!-- 标准的UI主题,默认的UI主题为xhtml,可以为simple,xhtml或ajax -->
% k" w9 s+ P' z0 S/ |2 D# g- Z: V/ |- s - <cosntant name="struts.ui.theme" value="xhtml" /> # ~5 B& P& |- c
-
2 d2 f. X8 f+ O - <!-- 模板目录 --> ' \& O1 X- ]% G0 p0 W
- <cosntant name="struts.ui.templateDir" value="template" />
! ?4 I0 r& y, ]/ K! C! e9 t9 P -
" a! L- ]. M5 D6 s# F - <!-- 设置模板类型. 可以为 ftl, vm, or jsp --> ( U. I( \4 Y7 j9 ?. r X9 Z' v
- <cosntant name="struts.ui.templateSuffix" value="ftl" /> $ i; n6 h- @1 f
- 0 F1 O6 ]* \* P1 N0 r
- <!-- 定位velocity.properties 文件. 默认velocity.properties --> ) @; z) w' a( p8 b% _
- <cosntant name="struts.velocity.configfile" value="velocity.properties" />
4 l g8 _0 E8 H - L/ k4 J9 F8 _( A& L
- <!-- 设置velocity的context. -->
9 I6 H, h% G% [ - <cosntant name="struts.velocity.contexts" value="...." /> 9 D }& w/ R/ d! @) E4 A: T$ P- l
-
" b! {3 H: X1 K- {$ { - <!-- 定位toolbox -->
" K- |1 c6 w8 K# c& |* U - <cosntant name="struts.velocity.toolboxlocation" value="...." /> ( _( |* ~/ y/ |/ R/ s6 `" b
- & F$ [7 T$ k- }4 {7 x M4 o
- <!-- 指定web应用的端口 -->
, F6 ~0 `8 q5 I7 V* o - <cosntant name="struts.url.http.port" value="80" />
, N3 a( h5 g" V& x -
: }' a+ ~( T2 h( g3 S' A9 ~3 q - <!-- 指定加密端口 -->
* C8 u$ s/ b: j+ G, n* w/ `2 z# f - <cosntant name="struts.url.https.port" value="443" /> ' I& V' A+ A( P* D! H
- ' N+ @# Z& H+ j& R; X
- <!-- 设置生成url时,是否包含参数.值可以为: none,get or all -->
% p V- h1 u9 Q/ e# Q: n5 [: t8 O - <cosntant name="struts.url.includeParams" value="get" /> 0 a8 @8 j D% P0 |6 }6 [. r
- $ p) s5 u; K1 |5 V* x4 ^
- <!-- 设置要加载的国际化资源文件,以逗号分隔. -->
6 v0 b' W$ b, a - <cosntant name="struts.custom.i18n.resources" value="application" />
) ~) J2 c$ ?) f+ T' ~5 T. B( c - ; B+ d) P+ p% o- u2 @) g. d4 y
- <!-- 对于一些web应用服务器不能处理HttpServletRequest.getParameterMap(), 3 g3 V0 t' j, }) f0 ^: U0 i$ n
- 像 WebLogic,Orion, and OC4J等,须设置成true,默认为false. -->
0 e$ i4 b; y- R* H - <cosntant name="struts.dispatcher.parametersWorkaround" value="false" /> : }2 `5 V* ?( ~8 W. Z
- 5 H) L: o. c z/ J$ }; |1 h4 U
- <!-- 指定freemarker管理器 --> $ {& C2 P* K* @0 O; U
- <cosntant name="struts.freemarker.manager.classname" value="org.apache.struts2.views.freemarker.FreemarkerManager" />
" O! ]/ ?7 j! A5 K -
4 a- L6 G! n" p2 L - <!-- 设置是否对freemarker的模板设置缓存,效果相当于把template拷贝到 WEB_APP/templates. --> 8 ?( Z8 b3 w1 t' p, g S8 H/ B
- <cosntant name="struts.freemarker.templatesCache" value="false" /> # c" c( M) j/ {. Q+ p
- 7 Y; S6 I& P- O3 n
- <!-- 通常不需要修改此属性. -->
/ T/ q) \. G8 _, x. \$ a7 u - <cosntant name="struts.freemarker.wrapper.altMap" value="true" />
5 M9 b9 h- E# o- g0 W# [ G1 { - * X0 |) X) E/ ?: T- m7 P
- <!-- 指定xslt result是否使用样式表缓存.开发阶段设为true,发布阶段设为false. -->
6 g3 P2 t+ z; @* _! Q0 w - <cosntant name="struts.xslt.nocache" value="false" />
# P. F0 ~/ C5 r' ~' I -
& ~% L8 k- f9 ^ j% _) [6 e* ` - <!-- 设置struts自动加载的文件列表. -->
; @ @8 l/ ~2 x0 |- J - <cosntant name="struts.configuration.files" value="struts-default.xml,struts-plugin.xml,struts.xml" /> ; w& @6 T( Z% A7 |0 z
- ) t% n, J0 F# w- I' {
- <!-- 设定是否一直在最后一个slash之前的任何位置选定namespace. --> ; C( y! q3 f- Q/ L
- <cosntant name="struts.mapper.alwaysSelectFullNamespace" value="false" />
( n- M" E7 v: D3 a - </struts>
# ~7 ^ X* Z6 Z( C - # _! e+ p: |! ^* L% z
-
4 [' T$ |; g6 @ c% X2 K - 4 r1 o7 x8 i1 V* j( q
- <struts> 9 L5 `- N- s; W7 h
- + C- c1 h" _. ~, P& F2 z
- <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 --> ; \5 E* S# B e. k6 A6 Z
- <include file="struts-default.xml"></include> 6 b3 W/ ]2 ?$ V0 A- D' m1 D
-
D7 p% N7 E% Y. _% F - " ~" w+ I, |4 e& e M0 ^
- <!-- package提供了将多个Action组织为一个模块的方式
# p; `0 j: [/ i( m5 o - package的名字必须是唯一的 package可以扩展 当一个package扩展自 ! q+ C- T$ X/ d) V! M% C8 H1 ?; ^
- 另一个package时该package会在本身配置的基础上加入扩展的package ! d% ^! S- ]$ A4 _$ x! ]" l, g
- 的配置 父package必须在子package前配置
' ^ _. Z# u: H( P6 P0 `3 ] - name:package名称 : ~/ z0 J) f$ C
- extends:继承的父package名称
$ n; W1 k9 d( R" K# }/ H0 d: h - abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
2 {' ?7 E% |% Z s# B0 P - namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
+ p4 {( a1 {2 u$ I! } - -->
/ H, i. V& F5 ^0 t - <package name="com.kay.struts2" extends="struts-default" namespace="/test">
# }( g3 @8 _4 e& j - <interceptors> ! B/ I, [3 t( D. C9 Z3 o% y! G
- <!-- 定义拦截器
3 z) U. d5 ]$ x/ O - name:拦截器名称
' ~( Z, b s7 a' B6 i- `4 P - class:拦截器类路径 7 l# P {* a$ C) Q' [
- --> 9 h* g1 |% A q: q. p' a8 T
- <interceptor name="timer" class="com.kay.timer"></interceptor>
4 F3 U2 M% z( i8 g) S5 v; w. c - <interceptor name="logger" class="com.kay.logger"></interceptor>
- s$ b8 `$ }# I3 T" q - <!-- 定义拦截器栈 -->
1 t' K6 x8 N( U6 z& K - <interceptor-stack name="mystack">
# q$ D; s. Z/ q, Z& ~4 j - <interceptor-ref name="timer"></interceptor-ref> ! \2 B# d9 L; L4 ?# R" I8 y: Q
- <interceptor-ref name="logger"></interceptor-ref> ! t. U& t9 i- x& ]/ e
- </interceptor-stack> 6 d' G2 o. f+ g0 a
- </interceptors> " @( M7 A7 Y7 n- B. x
- 1 s; Y& u' d$ [ V$ }
- <!-- 定义默认的拦截器 每个Action都会自动引用
7 s3 f) R% N4 {7 K0 e - 如果Action中引用了其它的拦截器 默认的拦截器将无效 --> 0 i5 E/ E9 G: j) ?4 b
- <default-interceptor-ref name="mystack"></default-interceptor-ref> * Y; O% A* ?/ t) s4 t8 [/ H( c$ G
-
7 h* j" @$ T( E4 @" ~2 _# p6 E -
y9 k" `9 e: d$ \" a6 m% n) C - <!-- 全局results配置 --> 8 h8 |- E% S# g* G" _
- <global-results>
2 F4 T. d" v# A8 A: S - <result name="input">/error.jsp</result> 2 Y4 Q' x; l9 N, ?
- </global-results> 7 ?% V! g, f2 r6 i/ M) K4 m
-
/ O+ q4 h1 N& ?7 `' l# S- y1 o _ - <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同) 3 i+ d/ K5 B0 a. N1 M
- name:action名称
/ d- ` W3 S' Z* P( E" m, N - class: 对应的类的路径
$ R1 W% b6 f: ~ - method: 调用Action中的方法名
, J& z) C- r$ x - -->
% {" P4 V* s8 |0 m: ~. g6 m - <action name="hello" class="com.kay.struts2.Action.LoginAction"> " }0 f N2 r+ o2 a$ u. D5 d; c
- <!-- 引用拦截器 4 g7 u! Y; h: z9 b: \
- name:拦截器名称或拦截器栈名称
1 \1 r: s% H$ M2 }* I - -->
, [5 n. h$ Y; Z - <interceptor-ref name="timer"></interceptor-ref>
" Q7 {1 P& P% @- r5 D: s* j -
+ B. c' O/ b I6 |- t# S+ L( o. \$ m - <!-- 节点配置 7 B* _6 B5 b' a3 z+ v2 z
- name : result名称 和Action中返回的值相同 7 v. q0 X8 ~/ f- i0 V, G
- type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher
' _5 p e/ ~ E4 r; Z! a a2 l, ^: \ - --> ' B# R- h# q$ p6 V% Z4 G3 m; }/ o
- <result name="success" type="dispatcher">/talk.jsp</result>
0 n# w) `. W; a7 A - <!-- 参数设置 : ~ ]8 y0 B9 M* F- d! N
- name:对应Action中的get/set方法
* k( j8 `, t$ {& J y - -->
. ~2 e# b* _% y - <param name="url">http://www.sina.com</param>
2 E4 H) H2 y* V - </action> , c9 R5 C1 {+ J" g5 l' H' ]: h
- </package>
: U* t* x) w0 y8 O - </struts></b></font></font></font>
复制代码 这些是常用的struts配置文件常量,如果想把struts用好,就要懂得每个配置是怎么一回事.不光光需要学习技术,更要学习好理论知识.技术的高度是由理论知识的深度决定的.
0 V& o- E) h& @" G: X. u
5 W# y; R5 d) v |