一:struts2的配置文件有哪些,相对应的作用是什么? Web.xml:包含所有必须的框架组件的web部署描述符.Struts2主要加载前端控制器及初始化参数.
; ^! R: \/ d' o+ X. rStruts.xml:定义应用自身使用的action映射,拦截器及常量,result/view定义. q, q4 O6 Z. y# g) j, g( L
Struts-default.xml:定义框架自身用的action映射及result ( X# B6 }7 `7 G( Q n$ H) Q. T1 ? q. j
Struts-plugin.xml:struts插件使用的配置文件
8 h0 X4 `3 J$ s4 L9 ], o+ n! |Struts.properties:定义框架自身的全局变量及框架属性. ! U2 s4 p0 @2 i4 b+ s. @ z, U
, T8 Y% G* U1 J
二:配置文件的加载顺序
7 Y/ S; q# R1 q+ d- U3 h2 vStruts-default.xml-->struts-plugin.xml-->struts.xml-->struts.properties-->web.xml
4 t* D/ x& q) `: p4 ^注:若之前的配置文件设置过某一属性,则以后加载的配置文件对于相同的属性的设置,会覆盖之前的配置 三:Struts2常量的具体用法实例Xml代码 - <font color="rgb(0, 0, 0)"><font face="SimSun"><font size="2"><b><?xml version="1.0" encoding="UTF-8" ?> , J: q0 i( O$ l, i2 |2 G$ S; k* k
- <!DOCTYPE struts PUBLIC
: q4 p. K+ Q' T+ C# I" _ - "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
, M; y: k# l, R - "http://struts.apache.org/dtds/struts-2.0.dtd"> # d0 j; R8 k8 F* i+ d- e
- ' l9 P* C# ]7 r& c/ S. W- R
- <struts>
) M; ~7 q* C9 B0 U - <!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
/ U: M2 U+ Y+ X; K0 z/ x - <constant name="struts.i18n.encoding" value="UTF-8" />
1 w# h% R! K' o% x5 @ - " T. ~9 f; q. _% J0 N+ y. i3 W, |
- <!-- . X5 D% q6 \, o% K
- 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
9 ~) Q( k7 ^8 q, i" _" E - 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。
1 t, i1 b% f3 f F1 ~( I& S1 h6 C - --> 9 o5 u* ~/ U2 s P2 U" b
- <constant name="struts.action.extension" value="do" />
1 Y+ s" p. |6 x; N& r7 l/ p - . l# P. l+ A7 z8 N- p3 P
- <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 --> ! v1 W) ^& r' P( b
- <constant name="struts.serve.static.browserCache" value="false" /> 3 }' N- a; W! C+ |2 @/ i5 V
-
! h; c5 v- Y/ q0 F& j% w$ h l- D - <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 --> " [* N: f/ [) F; X7 N
- <constant name="struts.configuration.xml.reload" value="true" /> . I0 U$ w# Z3 |. i; o Y
- 3 g3 n v7 y/ s) t- o
- <!-- 开发模式下使用,这样可以打印出更详细的错误信息 --> ( j" u" b9 r0 u, Y2 a
- <constant name="struts.devMode" value="true" />
, ?6 B0 }' g% }5 @# H0 A - ' W8 C: G3 U2 Y) B; Z5 E, a+ s% ` | U
- <!-- 默认的视图主题 -->
7 A; t7 Q8 d4 [! t - <constant name="struts.ui.theme" value="simple" />
) T, L( S0 G) b' [9 y5 r - 4 k% T" z" j% E
- <!-- spring 托管 --> 3 V: t4 a/ |8 i) ~
- <constant name="struts.objectFactory" value="spring" />
) }% D* {7 e8 b2 M2 \& [% } -
, c4 a2 H2 M' z# g - <!-- + Y' } w, W7 a& ~2 L# G6 c
- 指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration 1 L: q+ S0 e! u8 J! H" V
- 开发者可以自定义配置文件管理器,该类要实现Configuration接口,可以自动加载struts2配置文件。 & O6 w& L- U$ d/ N/ i- P
- --> 8 O8 @; p" x4 u7 R3 x- H+ D
- <constant name="struts.configuration"
8 M) P& x4 A+ |" Q+ z1 v' H - value="org.apache.struts2.config.DefaultConfiguration" /> 7 a1 H8 [' r7 _; _
- ' V* r4 O6 f$ s3 X0 q+ l5 R; v
- <!-- 设置默认的locale和字符编码 -->
8 M+ `0 \9 g" u - <constant name="struts.locale" value="zh_CN" /> E- R7 d9 F9 e2 v2 K
- <constant name="struts.i18n.encoding" value="GBK" /> * ?5 |8 w4 ]) @+ R& P# e% t+ J
-
( K8 h' T5 L% V2 { - <!-- 指定Struts的工厂类 -->
% ~8 T, p: r' Y% a. }' V7 H" C; O - <constant name="struts.objectFactory" value="spring"></constant>
+ i% p4 \1 I" F - 5 |# e+ z2 m" S$ D& x2 c
- <!--
8 j. }0 v' B: {( D( }9 N - 指定spring框架的装配模式,装配方式有: name, type, auto, and constructor (name
/ p9 H( `, `( o8 R' | M" E - 是默认装配模式) $ l S# N* R& P
- --> 8 P' S" f* N3 O
- <constant name="struts.objectFactory.spring.autoWire" value="name" /> . T2 J* n1 E; g
- , M& a2 v: S- i. q. U
- <!-- 该属性指定整合spring时,是否对bean进行缓存,值为true or false,默认为true --> 1 y5 L7 h1 J: Q7 ^
- <cosntant name="struts.objectFactory.spring.useClassCache" />
7 s) C7 Y4 x1 L4 Y - ' k- x) [+ M5 T: T
- <!-- 指定类型检查,包含tiger和notiger -->
f" G0 ^3 F6 v" X% K - <cosntant name="struts.objectTypeDeterminer" value="tiger" />
. G6 @: C* q- I: x' T -
+ _1 Q- k& [# Z. K- r3 M8 v - <!-- 该属性指定处理 MIME-type multipart/form-data,文件上传 --> . D" P( Q: k9 L% m
- <constant name="struts.multipart.parser" value="cos" /> 2 K4 I0 {, Y3 ~4 l/ y% \
- <constant name="struts.multipart.parser" value="pell" /> + y' p, ^ X, v* l) W2 W: o
- <constant name="struts.multipart.parser" value="jakarta" /> 1 w2 U, M6 b( B9 [& n7 f( y
- ' x2 g5 y# c8 A' Q, I' }) D1 f; ]
- <!-- 指定上传文件时的临时目录,默认使用 javax.servlet.context.tempdir --> " x# H% h% V! Q- W4 W( p$ M
- <constant name="struts.multipart.saveDir" value="/tmpuploadfiles" />
$ |1 O5 Z: ~# f -
1 A; S, V8 y3 `, q b* w1 N - <!-- 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 --> & h9 V5 c1 F! o0 p
- <constant name="struts.multipart.maxSize" value="2097152" /> : N9 j* O! p3 B. x6 f7 y" p
-
% q* {0 E% @6 S/ Y - <!--
. S! f1 g, d c% p - 该属性指定Struts2应用加载用户自定义的属性文件,该自定义属性文件指定的属性不会覆盖 2 [7 B" b N- K' V2 ]7 _
- struts.properties文件中指定的属性。如果需要加载多个自定义属性文件,多个自定义属性文
5 V7 R F; m, `" L - 件的文件名以英文逗号(,)隔开。(也就是说不要改写struts.properties!) , {- b2 Q7 Y2 E
- -->
0 `; }+ ^$ W6 M5 N: {7 V - <constant name="struts.custom.properties" 8 ]; f4 r4 g) L, H
- value="application,org/apache/struts2/extension/custom" /> 1 t6 Y4 R* T# l% L4 O/ Y j
- ( {: l. q% K; k, l* u
- <!-- 指定请求url与action映射器,默认为org.apache.struts2.dispatcher.mapper.DefaultActionMapper --> * M! S$ ? v9 {/ }. ]% k9 L8 P- A
- <constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" /> ; j3 [% c+ L* q. [, C
-
( L7 a9 D# v0 l* s, E1 a/ o - <!-- 指定action的后缀,默认为action -->
/ ~% F A. o, y) F5 O9 R0 T$ ] - <constant name="struts.action.extension" value="do" />
8 I( _ p8 U, v) N+ L5 Z# p -
4 `1 v/ @1 J2 _# L! ^1 ~ - <!-- 被 FilterDispatcher使用指定浏览器是否缓存静态内容,测试阶段设置为false,发布阶段设置为true. -->
+ [4 w4 M/ m( v4 T& u0 r - <constant name="struts.serve.static.browserCache" value="true" />
, L( Q: G& v. X6 w5 s6 p) k! M -
5 V4 Q( c3 g, b7 P - <!-- 设置是否支持动态方法调用,true为支持,false不支持. --> & r4 T7 ] t2 D3 ~- J; S
- <constant name="struts.enable.DynamicMethodInvocation" value="true" />
# D- e1 S6 A6 Z0 V7 Y: d2 x - 4 w+ \! E- |2 B9 s7 h, l1 h. W
- <!-- 设置是否可以在action中使用斜线,默认为false不可以,想使用需设置为true. --> ( y% o" o7 q5 M! Y7 Q: e9 m3 y
- <constant name="struts.enable.SlashesInActionNames" value="true" /> ; K! y! w8 y1 k% l, ^
-
V1 z' E" Q3 D; Y - <!-- 是否允许使用表达式语法,默认为true. --> " a- |4 h. [! b: P' @, M
- <constant name="struts.tag.altSyntax" value="true" />
4 t9 ]2 `* Z& Y& H' F! V5 \* E - 7 q/ U! ~0 O! d( a
- <!-- 设置当struts.xml文件改动时,是否重新加载 -->
7 s" r" m! x9 l1 u9 u' @& n* G3 n8 K! f - <cosntant name="struts.configuration.xml.reload" value="true" />
3 t2 F( J; |4 K& A -
! G5 M! Q& Z2 [! n+ u - <!-- 设置struts是否为开发模式,默认为false,测试阶段一般设为true. -->
4 ?9 i1 m' C6 [8 z7 X' l7 O4 j: W - <cosntant name="struts.devMode" value="true" />
- A* z9 `5 |$ y1 m' V9 d - 8 @' Q( @4 Z; V* G& R
- <!-- 设置是否每次请求,都重新加载资源文件,默认值为false. --> 4 X. p9 ?0 d2 n% J0 o( i
- <cosntant name="struts.i18n.reload" value="false" /> 2 [1 V1 |1 M/ P u: U3 I7 r
-
9 u* n( U7 q( C3 x7 u3 N$ d. ? - <!-- 标准的UI主题,默认的UI主题为xhtml,可以为simple,xhtml或ajax -->
1 b5 L7 j8 J) E/ c( ~6 m - <cosntant name="struts.ui.theme" value="xhtml" /> , o' o, X+ ?! u6 f# h) h
- 9 J- v) R3 m, ^* m2 I3 |/ p& R |
- <!-- 模板目录 --> - e/ o+ B# I, s/ {
- <cosntant name="struts.ui.templateDir" value="template" /> ) v0 d' e. {$ o2 n7 ?& y
- 1 U% N& m! I$ S; D5 |
- <!-- 设置模板类型. 可以为 ftl, vm, or jsp -->
' K. G+ t% {. L. ^2 [ - <cosntant name="struts.ui.templateSuffix" value="ftl" />
, z- ?! W' Q ?+ J" R -
9 W3 _& Y0 O: U1 i/ O6 u - <!-- 定位velocity.properties 文件. 默认velocity.properties -->
# j9 e# |7 i' L6 e - <cosntant name="struts.velocity.configfile" value="velocity.properties" />
% m; Z* }% q$ m4 S$ D -
4 s* c" n) D. D$ B: O1 W1 @# l2 e! ^ - <!-- 设置velocity的context. --> 8 J& i( P2 g4 F$ \8 w, O' B8 F
- <cosntant name="struts.velocity.contexts" value="...." /> ( L% w1 M* j7 F) E
-
# F1 R3 D+ n" W. X3 g5 i - <!-- 定位toolbox -->
E+ D x' v2 U - <cosntant name="struts.velocity.toolboxlocation" value="...." />
& F8 m( w9 H; G - ' R( R( F! C- \9 ^. m
- <!-- 指定web应用的端口 -->
# M" f8 S) Z, Q$ [ K) A" r - <cosntant name="struts.url.http.port" value="80" />
5 U6 u5 M" v3 v! B+ s2 F -
- I& O6 Y; ]) N0 s: k9 ?& S& Y - <!-- 指定加密端口 -->
) S5 v; s0 n2 B - <cosntant name="struts.url.https.port" value="443" />
5 e; j6 d9 m7 r* c - " q+ f; F5 i# }& \* b, ]( ?
- <!-- 设置生成url时,是否包含参数.值可以为: none,get or all -->
% F' \* |0 R- J6 g - <cosntant name="struts.url.includeParams" value="get" />
3 P, l. x J% t! r8 X g m: [8 c - $ e, k9 r8 W6 ~, J+ p. x/ n
- <!-- 设置要加载的国际化资源文件,以逗号分隔. --> 5 ~/ Z6 y! m- L4 Y! |4 Q( F
- <cosntant name="struts.custom.i18n.resources" value="application" />
7 |; l2 a) Z [+ Z" p - ; s, k* v/ X" ^+ d2 S9 l
- <!-- 对于一些web应用服务器不能处理HttpServletRequest.getParameterMap(), 8 S- |% P& S z" ]
- 像 WebLogic,Orion, and OC4J等,须设置成true,默认为false. -->
& G F b9 t3 a7 y) [ - <cosntant name="struts.dispatcher.parametersWorkaround" value="false" /> & e2 O+ D0 h- r N8 S- G
-
( w8 ]" O+ ^0 ]; B* s; X - <!-- 指定freemarker管理器 -->
% w# p% V3 X9 ?. b4 x" T- c - <cosntant name="struts.freemarker.manager.classname" value="org.apache.struts2.views.freemarker.FreemarkerManager" />
$ Z7 l2 c$ L( V( i3 z" R* k -
, O9 o( P0 {8 N2 A7 k3 ? - <!-- 设置是否对freemarker的模板设置缓存,效果相当于把template拷贝到 WEB_APP/templates. --> % O. E( f8 _$ ^ s/ T: |. ]" T
- <cosntant name="struts.freemarker.templatesCache" value="false" />
9 E5 N1 C" C9 |3 z% l -
- L+ \; U2 s e5 E" H2 G& ^0 J - <!-- 通常不需要修改此属性. -->
. E6 n& ?7 C5 o - <cosntant name="struts.freemarker.wrapper.altMap" value="true" />
+ S* `4 I ]$ a, S7 l6 B - ' c% s t" |) R | j
- <!-- 指定xslt result是否使用样式表缓存.开发阶段设为true,发布阶段设为false. -->
, X/ ?6 K; g6 v s& ` - <cosntant name="struts.xslt.nocache" value="false" />
% K- c2 F$ o8 {6 h -
J) o$ a! t8 h* n) g# p# [* f - <!-- 设置struts自动加载的文件列表. -->
3 d8 \$ M$ y5 A# c' G* Z0 P - <cosntant name="struts.configuration.files" value="struts-default.xml,struts-plugin.xml,struts.xml" />
: k& E# g2 m' n0 k9 @1 i4 V7 Q - % a( ?4 J! ~; z% c
- <!-- 设定是否一直在最后一个slash之前的任何位置选定namespace. -->
1 I) Q" y( n: j& ` - <cosntant name="struts.mapper.alwaysSelectFullNamespace" value="false" /> # `( G0 S1 a' c; L2 R( X; j* n/ z% d
- </struts> 2 B x$ O6 X) Q3 Z8 q( T
-
# u. [3 o( S' z1 u# W - }9 U* [2 r: s0 ]' @
-
/ [/ T, ^) D' c - <struts>
- C) G. U$ e6 s2 i4 M4 P8 z/ k - + X( v4 q; _( g4 E8 c6 A2 {5 O
- <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 -->
0 d; _5 I2 U; [: V3 d# g$ y - <include file="struts-default.xml"></include> 4 y: \2 ]" ~! g# Q2 `0 h. b
-
" H. W3 F4 m+ o( x - - d+ r( l- V- Y' i8 U
- <!-- package提供了将多个Action组织为一个模块的方式
& j7 h7 _! w( R( ?4 R6 r: C3 n3 ? - package的名字必须是唯一的 package可以扩展 当一个package扩展自
6 X& q3 I2 J+ n) h" | - 另一个package时该package会在本身配置的基础上加入扩展的package
& {. R6 m. L# |' H! U4 a - 的配置 父package必须在子package前配置 6 ?1 Y( G- z' M
- name:package名称 & O+ o( j& e7 \1 k: f
- extends:继承的父package名称
4 U+ U; W$ c7 c* b; J - abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false / a+ E# B0 {3 G% H! e
- namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
) _* ^, y. A1 d4 z+ V& W0 @) A - --> ; F; b7 d: b+ R, W% X
- <package name="com.kay.struts2" extends="struts-default" namespace="/test">
4 {* ]1 [: v1 U) W) l6 M+ v - <interceptors>
8 W, l3 C7 `' l, p - <!-- 定义拦截器
/ x. s- n5 V$ I9 r; |/ u - name:拦截器名称 : ~& S+ Q$ b. c$ B4 j1 s
- class:拦截器类路径 ' E H" G+ X" s8 b, [
- --> , j$ C$ Z( Z5 p6 Q
- <interceptor name="timer" class="com.kay.timer"></interceptor> + [& ^5 T9 H4 f# g4 ]
- <interceptor name="logger" class="com.kay.logger"></interceptor> ' [# \" k8 E& k8 ?9 H |
- <!-- 定义拦截器栈 --> % s/ R) N7 r/ U
- <interceptor-stack name="mystack"> 8 n, | l$ Y; }8 B, \
- <interceptor-ref name="timer"></interceptor-ref>
- F! e- C8 ^: W" I - <interceptor-ref name="logger"></interceptor-ref>
- _0 Z) l2 b9 z - </interceptor-stack> 3 O( F1 A. e4 V" d; f, Y
- </interceptors> * t0 ~. X/ c2 M) Z& I9 t
- + Y3 I- Z/ @( R, P; {2 K' Y) ?! w
- <!-- 定义默认的拦截器 每个Action都会自动引用 * F- x; e( S8 d
- 如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
1 }; ^; ^& X$ u+ c' u4 ]5 m - <default-interceptor-ref name="mystack"></default-interceptor-ref>
3 |7 r. y! X3 f/ F9 X1 \; K -
3 Z# ]0 F1 D5 g& _ - 2 \7 b G. V; P; \. M+ r( Z
- <!-- 全局results配置 -->
6 i- Z( g2 u+ y) o( ^ - <global-results> ! C- t% i- a1 W
- <result name="input">/error.jsp</result> 3 O9 R# I' ~6 ]0 l$ s8 n) Y( [1 o
- </global-results>
% ?6 Q$ z2 ~+ C7 E8 @' C+ p -
3 l6 u$ V, j' q- r1 h2 a - <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同)
S" A I; f3 ]1 o2 t; Y% M3 { - name:action名称
# S( u' H: I1 ^; W' [) t - class: 对应的类的路径 0 e; a) b! P, i9 a+ Q+ |
- method: 调用Action中的方法名 2 ~; F1 \3 p( s6 y) \, X
- -->
# E8 k: T8 W5 A% ~. c/ T - <action name="hello" class="com.kay.struts2.Action.LoginAction"> # k5 {" Q: D2 n' A- N( a, u
- <!-- 引用拦截器 ! [! T, b$ @ f/ D; f0 ?/ ~3 P* G
- name:拦截器名称或拦截器栈名称 # V$ ~! \3 l- y: L0 I
- --> 2 G7 G: ~- i" N# R( ~/ E& H% ?' b
- <interceptor-ref name="timer"></interceptor-ref> ' Z k# m0 L6 k* Y: L% {
-
6 w, c$ u. n6 G! m# ]& x6 s - <!-- 节点配置 , H. M( U% p) ~9 {
- name : result名称 和Action中返回的值相同 5 d/ v7 S4 q) n9 g" [! C$ G
- type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher * D$ E! ^4 x: g/ n: L
- -->
& T5 `2 O: i9 {! r0 m: V; T% X% Q - <result name="success" type="dispatcher">/talk.jsp</result> 0 X6 u) x U8 X2 e$ ]/ [ H
- <!-- 参数设置 1 H7 {0 K# x' i5 ]
- name:对应Action中的get/set方法 9 q! Y1 V U: y7 y9 M' I
- --> : A+ r3 _2 D7 p6 j2 V
- <param name="url">http://www.sina.com</param>
9 o+ Y% G# G: r$ r/ e - </action>
6 K) K; f0 ~* Q8 v, H - </package> / i1 \3 ?2 G3 |) k
- </struts></b></font></font></font>
复制代码 这些是常用的struts配置文件常量,如果想把struts用好,就要懂得每个配置是怎么一回事.不光光需要学习技术,更要学习好理论知识.技术的高度是由理论知识的深度决定的.
1 r! o3 S# }' w4 n! f7 F+ ]; r
* ~0 ?% l2 T; W6 m" p |