一:struts2的配置文件有哪些,相对应的作用是什么? Web.xml:包含所有必须的框架组件的web部署描述符.Struts2主要加载前端控制器及初始化参数.
9 }4 Z6 Y' `6 p7 Y+ D1 zStruts.xml:定义应用自身使用的action映射,拦截器及常量,result/view定义. 9 R7 u6 e- d1 _* o) [
Struts-default.xml:定义框架自身用的action映射及result 2 y% G& V9 H, D' m; {! X
Struts-plugin.xml:struts插件使用的配置文件 2 }+ Y H$ I7 _" r- J
Struts.properties:定义框架自身的全局变量及框架属性. . Y1 Z$ w' i O) m4 @
1 F# j9 h0 @' |& G
二:配置文件的加载顺序
g N( r, m9 j: q4 E+ |. `Struts-default.xml-->struts-plugin.xml-->struts.xml-->struts.properties-->web.xml
: M7 J! w. `: q7 e/ P' ^* b4 o% I! F& C注:若之前的配置文件设置过某一属性,则以后加载的配置文件对于相同的属性的设置,会覆盖之前的配置 三:Struts2常量的具体用法实例Xml代码 - <font color="rgb(0, 0, 0)"><font face="SimSun"><font size="2"><b><?xml version="1.0" encoding="UTF-8" ?>
" G, T1 M% N3 z& |6 r - <!DOCTYPE struts PUBLIC " h0 p" E$ R' f9 r: u
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 1 O% U$ i. o$ o
- "http://struts.apache.org/dtds/struts-2.0.dtd">
% h0 x _3 ~+ {. O! {0 {8 P - . M: X# l1 Y! f K& _+ e
- <struts> ) q" i( M, Z3 U$ g
- <!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
" v& O% T9 w% [1 c* a. P$ [8 s - <constant name="struts.i18n.encoding" value="UTF-8" />
7 D z( w+ u3 S$ R, ^8 X5 N0 S - " ]& b9 s/ l; b7 L; [* }
- <!-- ( X/ ?; m1 |4 B7 k& r! ^
- 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。 1 O& q/ {/ p Z- F
- 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 - ? k9 A. N! h1 P# g+ Z
- -->
' r6 h5 o2 W$ T8 Z - <constant name="struts.action.extension" value="do" /> & `- B) ~* L% O, K. a- N) B' t
- ) a4 J# b# A2 k
- <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 --> 1 A' i; y0 s- r, E( ?0 R5 G
- <constant name="struts.serve.static.browserCache" value="false" />
& G0 |( E& r4 ?4 i -
, H8 q$ c1 W8 T/ L# c. F: n - <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 --> 4 T7 U* b" Y, d3 n2 G9 m
- <constant name="struts.configuration.xml.reload" value="true" /> # [9 R$ s; d# r; | V3 a, `4 f
-
* v' M+ t# ?- C& l. l4 D# W' H - <!-- 开发模式下使用,这样可以打印出更详细的错误信息 --> 8 [8 `* N, X2 E9 |0 Q1 T
- <constant name="struts.devMode" value="true" /> 6 {6 {8 B n/ z8 J* t
- * p& }$ P1 \3 D1 v. Q0 T
- <!-- 默认的视图主题 -->
& W% F( Z# _! N3 m9 J - <constant name="struts.ui.theme" value="simple" /> ' C+ Q/ u) o5 C, \5 Z# [! z
-
" T* l0 n U2 x9 m/ c4 w w8 w) V - <!-- spring 托管 --> ( `% b, a+ t+ E
- <constant name="struts.objectFactory" value="spring" />
4 p6 J, [% _& N$ ]' t# f - 6 M' o% n4 p* e5 k$ I2 Q
- <!--
/ W' I5 z; E& E( @5 H2 Q - 指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration % Q; a, |4 m9 a0 J
- 开发者可以自定义配置文件管理器,该类要实现Configuration接口,可以自动加载struts2配置文件。 + ]; |6 r: p- {0 q, p1 h& L
- -->
, ` ?( {, m9 f; X8 W, k - <constant name="struts.configuration" - S5 s3 ~5 ?% ], e6 O
- value="org.apache.struts2.config.DefaultConfiguration" /> : W, N. [7 i8 c8 G6 O
-
/ d( U" _" m0 [" s9 `) i& B - <!-- 设置默认的locale和字符编码 --> * \# {! H5 f2 e/ h& j0 X
- <constant name="struts.locale" value="zh_CN" /> ; j9 O6 f" ]" c! A/ C8 T2 P
- <constant name="struts.i18n.encoding" value="GBK" /> - |, f9 W N6 g* {8 L8 X
- $ B+ L/ D. ^ P; P& D9 R
- <!-- 指定Struts的工厂类 --> & u5 q# n' x0 x+ Z* Z0 B* X9 P2 W' m
- <constant name="struts.objectFactory" value="spring"></constant> 3 G1 W4 m0 t; G; @. W
-
; r. a& V+ W$ T - <!--
1 o& t) p# v% x+ I - 指定spring框架的装配模式,装配方式有: name, type, auto, and constructor (name
1 T: _ z" z; {7 |+ s( }, R - 是默认装配模式)
4 w5 p8 y H n# D" L! w - --> 4 g0 U& G- F) n" i, b9 X! U
- <constant name="struts.objectFactory.spring.autoWire" value="name" />
( e( U. O, T5 `1 M9 X0 v t9 \$ V - 8 A7 L3 y5 X$ d
- <!-- 该属性指定整合spring时,是否对bean进行缓存,值为true or false,默认为true -->
% \$ n4 I0 I. @' T - <cosntant name="struts.objectFactory.spring.useClassCache" />
# X3 E0 R: q- h0 Q - 7 b5 ^& I7 F. f8 z
- <!-- 指定类型检查,包含tiger和notiger -->
. k/ x9 I1 N& n7 C: D# `% n. u - <cosntant name="struts.objectTypeDeterminer" value="tiger" />
' G2 W( _; l1 { -
7 J6 N3 O0 N; H2 R2 _# c/ s - <!-- 该属性指定处理 MIME-type multipart/form-data,文件上传 --> * L. d8 f! s8 V8 @4 B( e
- <constant name="struts.multipart.parser" value="cos" /> . J1 x/ y% j2 {
- <constant name="struts.multipart.parser" value="pell" />
2 w, i0 G4 h/ j0 q! f- } - <constant name="struts.multipart.parser" value="jakarta" />
6 r8 v! Y" t& l+ Z -
e5 T" m$ ^$ `% r6 p# p9 j5 _ - <!-- 指定上传文件时的临时目录,默认使用 javax.servlet.context.tempdir -->
+ a& ^/ ?* |+ H$ ~* x9 w - <constant name="struts.multipart.saveDir" value="/tmpuploadfiles" /> / ~4 `! _- ^. ?: I) ?
- % a( w% _% g) c6 [5 {6 f- I) X
- <!-- 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 --> ) n2 i" b; o! O
- <constant name="struts.multipart.maxSize" value="2097152" /> 6 o& I. c& l7 s
- ( _# a* I3 j; J, L1 e
- <!--
( i: w0 H* F& }9 ?1 i! f. J" q' l - 该属性指定Struts2应用加载用户自定义的属性文件,该自定义属性文件指定的属性不会覆盖
- k( [5 ]2 j* ~/ u3 \* d2 w3 g - struts.properties文件中指定的属性。如果需要加载多个自定义属性文件,多个自定义属性文 - p) K4 O/ o1 Z4 o2 O0 z# i" }$ j
- 件的文件名以英文逗号(,)隔开。(也就是说不要改写struts.properties!) . G3 s% ?+ j, {: Q4 [, R/ ^
- -->
1 U3 i3 @. Y- w) l4 d6 l - <constant name="struts.custom.properties" " f/ f) V2 B( t. j5 T: b
- value="application,org/apache/struts2/extension/custom" />
) g3 c, c+ a" R2 l8 z; ~0 N3 f: d - 1 w2 T$ Z; b! c- U' Q7 I
- <!-- 指定请求url与action映射器,默认为org.apache.struts2.dispatcher.mapper.DefaultActionMapper --> |1 E6 D/ A) Z/ z$ ?: L- r
- <constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" /> & R- w% q6 _/ p. J7 N5 V
-
3 _5 \7 j1 A; g( W, ~ - <!-- 指定action的后缀,默认为action -->
) V1 X9 ^. p2 H8 F' }! D - <constant name="struts.action.extension" value="do" />
5 _. |* Z6 p( r _+ ]# o- K - , D! Y6 j+ b/ `' g5 V; l, t
- <!-- 被 FilterDispatcher使用指定浏览器是否缓存静态内容,测试阶段设置为false,发布阶段设置为true. --> 3 T; T7 W- p/ V# G2 E4 d
- <constant name="struts.serve.static.browserCache" value="true" />
3 j, F0 g1 s# X9 J8 a+ S -
% E' a' x- z6 H0 x6 t& v) C - <!-- 设置是否支持动态方法调用,true为支持,false不支持. --> + J, q4 }7 R! f" l4 a7 p
- <constant name="struts.enable.DynamicMethodInvocation" value="true" />
& f; n$ n( ~* [* n- P `5 _9 W; |* w+ p -
h: n) B/ a0 ]" G - <!-- 设置是否可以在action中使用斜线,默认为false不可以,想使用需设置为true. --> - M+ g7 [8 m- l+ e6 t( J7 h
- <constant name="struts.enable.SlashesInActionNames" value="true" /> 8 J n* h2 a7 f
- , i9 I+ H" ^; H. G8 B: E
- <!-- 是否允许使用表达式语法,默认为true. -->
4 V* k/ R8 v! C( \& { - <constant name="struts.tag.altSyntax" value="true" /> 1 o; z5 L$ \) c$ q! y- I( L% E
-
. M# w* w3 A t$ U: T, n1 | - <!-- 设置当struts.xml文件改动时,是否重新加载 -->
7 P& |: B0 ~$ B* V - <cosntant name="struts.configuration.xml.reload" value="true" />
* ?, z& D7 y: Y" B, U% L - 5 N1 q' [! m7 f. }4 J& e! j" H4 D
- <!-- 设置struts是否为开发模式,默认为false,测试阶段一般设为true. --> 2 L) D- o+ X) t8 t& n$ n+ d3 q
- <cosntant name="struts.devMode" value="true" />
. a* m$ Q' h6 d" V8 o; O -
" B2 m7 [3 O) I+ X* j5 L7 @ - <!-- 设置是否每次请求,都重新加载资源文件,默认值为false. --> ! d _8 C/ C+ }
- <cosntant name="struts.i18n.reload" value="false" /> , n5 m9 A) s" ^
-
! v: L$ d8 a6 J, K6 i - <!-- 标准的UI主题,默认的UI主题为xhtml,可以为simple,xhtml或ajax --> 7 ~# E+ r B: @8 O
- <cosntant name="struts.ui.theme" value="xhtml" />
* Q" R# w8 P# l3 ~ - 4 E% {' y9 p: r
- <!-- 模板目录 --> " T# P X2 T2 X* z0 q
- <cosntant name="struts.ui.templateDir" value="template" /> ! K8 V& o$ U8 W# u L
-
: z' X, |$ R$ l - <!-- 设置模板类型. 可以为 ftl, vm, or jsp -->
, A- O4 T: C. N0 {2 S9 U9 w) | - <cosntant name="struts.ui.templateSuffix" value="ftl" /> & ^/ P3 w. \4 c6 \0 n- F! W
- : w r' H; V" L2 @# t" \# w0 z& }* m, W
- <!-- 定位velocity.properties 文件. 默认velocity.properties -->
* ~8 Q" K! B- B- P - <cosntant name="struts.velocity.configfile" value="velocity.properties" />
$ y& P# ^7 ~" M# \* H7 d - ' `0 o: F( n: V! X( p: z% h& [
- <!-- 设置velocity的context. -->
! q7 g& M8 _- K/ y9 p+ i - <cosntant name="struts.velocity.contexts" value="...." />
- ^" F/ {8 `4 ?8 d) M$ | - c. A0 Y4 Q" t' S6 q$ h9 B
- <!-- 定位toolbox --> ; ]2 | }! D! L% H0 ^( }* r6 u- u+ c
- <cosntant name="struts.velocity.toolboxlocation" value="...." />
2 g3 D3 x: `6 t: G4 R( h4 N - : C6 ]2 T, U* N! Z; v
- <!-- 指定web应用的端口 --> + c7 Q' k5 s3 D4 c+ G
- <cosntant name="struts.url.http.port" value="80" />
4 m' O9 h' [: ]3 ^2 i -
1 v; q c: E0 b - <!-- 指定加密端口 -->
+ t3 S- h2 |4 f/ H - <cosntant name="struts.url.https.port" value="443" /> ( R" n/ ^8 b+ W8 q& y$ {# X
- ( {0 C. s0 s5 V- R* Z7 K: P
- <!-- 设置生成url时,是否包含参数.值可以为: none,get or all -->
# t8 `4 v3 p F: L7 W. `0 _ - <cosntant name="struts.url.includeParams" value="get" /> + N ]# g' r$ m
- 6 x2 i1 u6 [8 M( Z
- <!-- 设置要加载的国际化资源文件,以逗号分隔. --> ; T+ n; ^# S) `6 [: v7 w6 X5 k K1 K
- <cosntant name="struts.custom.i18n.resources" value="application" /> 4 C. _5 F6 A1 A
- 0 n1 S: o# a0 q. {& v; l
- <!-- 对于一些web应用服务器不能处理HttpServletRequest.getParameterMap(),
/ A1 v- M, |: Q! D - 像 WebLogic,Orion, and OC4J等,须设置成true,默认为false. --> ' `! h$ B, {0 l9 |/ F8 }+ U
- <cosntant name="struts.dispatcher.parametersWorkaround" value="false" />
6 }( P0 ^' N: T - 4 x5 P0 F5 j$ x$ B
- <!-- 指定freemarker管理器 -->
$ ?) Y9 o# }3 h: f( r( C - <cosntant name="struts.freemarker.manager.classname" value="org.apache.struts2.views.freemarker.FreemarkerManager" /> 6 h; C+ h0 D2 h( M& `* T
- 1 w, j2 E0 I- \& g& k
- <!-- 设置是否对freemarker的模板设置缓存,效果相当于把template拷贝到 WEB_APP/templates. --> ( I# M; d! d8 N* I
- <cosntant name="struts.freemarker.templatesCache" value="false" />
: A4 b; f/ G% q; ^ - 8 M3 h$ U1 a6 E0 s
- <!-- 通常不需要修改此属性. --> 2 Q5 P2 ]# G4 X8 q4 u& t7 x+ A
- <cosntant name="struts.freemarker.wrapper.altMap" value="true" />
+ U1 W& _: b3 K6 u) e$ K; n$ f: \+ } -
* y' y/ B" i! L: n/ T - <!-- 指定xslt result是否使用样式表缓存.开发阶段设为true,发布阶段设为false. -->
+ p' K' [: i) o: Z; x* {6 M - <cosntant name="struts.xslt.nocache" value="false" /> 2 K3 f7 L- Q3 f1 O% T& @1 o; e8 i
-
5 n& F# r( r6 U7 B - <!-- 设置struts自动加载的文件列表. --> J! j8 y9 g7 `- ?
- <cosntant name="struts.configuration.files" value="struts-default.xml,struts-plugin.xml,struts.xml" /> 3 g7 q+ X' H6 G7 Z- D+ z, N
- & X* R6 ~( o* ^; |. a" p
- <!-- 设定是否一直在最后一个slash之前的任何位置选定namespace. --> 0 a7 v. H6 ^: {- V
- <cosntant name="struts.mapper.alwaysSelectFullNamespace" value="false" />
4 r: J2 g4 s5 V, l/ m - </struts> 5 r" T/ q/ D j4 ]$ O
- 0 b1 ?" z) p0 D1 ^4 @# L5 K' o, W
-
. u7 a0 m9 ~- C2 P - ' p) h8 o7 {1 P$ x
- <struts>
6 D' h4 U @0 ^& a -
h* z t$ f- G4 Z' c" f4 U9 x - <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 -->
6 W* `$ i, I+ {/ V - <include file="struts-default.xml"></include>
8 Z/ f' I) p6 c& `$ t) W -
8 ^0 b5 w; u. k3 ^ -
; ^+ c7 M$ i: X2 @! c1 ~+ h% | - <!-- package提供了将多个Action组织为一个模块的方式 " Q. W$ B2 F o- O+ ~7 A
- package的名字必须是唯一的 package可以扩展 当一个package扩展自 * T! L/ g# |/ C4 ^: @' D3 ^0 c
- 另一个package时该package会在本身配置的基础上加入扩展的package - D' d f5 G' V, U1 K
- 的配置 父package必须在子package前配置
! ^7 [& M7 G% n9 a - name:package名称 * K2 ?3 f6 W4 a7 T
- extends:继承的父package名称
7 J$ A* q1 {% n. `7 Z9 U w - abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
* |1 c) k3 n8 J3 x q3 }- @1 H% { - namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
0 Y! u2 u) I' o6 L+ Y - -->
~. U/ M I+ Y$ L1 }. ?6 ^, d - <package name="com.kay.struts2" extends="struts-default" namespace="/test"> : c$ m4 ?: b( K' s
- <interceptors>
/ c$ V. ~4 ^" E% U6 }0 w - <!-- 定义拦截器
, }# z: X/ b: E9 q - name:拦截器名称 ! a# Q3 w+ M1 _
- class:拦截器类路径 " _- }: u9 W4 t1 H
- --> 4 J) X* v- I5 J Z e
- <interceptor name="timer" class="com.kay.timer"></interceptor> , A4 }7 u8 K9 h) @% L5 S! z
- <interceptor name="logger" class="com.kay.logger"></interceptor>
9 Z8 R& b. s$ \ - <!-- 定义拦截器栈 -->
7 K' d* N$ a% _0 H. s - <interceptor-stack name="mystack"> . ?0 _! n- ?8 j7 m# q3 `
- <interceptor-ref name="timer"></interceptor-ref>
$ _# [* G* ?/ y4 n9 }/ X! E - <interceptor-ref name="logger"></interceptor-ref> 0 ~6 w. Y* X. n& X
- </interceptor-stack>
* S' I3 V, U7 j9 q" I - </interceptors> o! b2 U U$ h! \5 H* b
-
7 k. v. P" a& Z! q- A7 m3 G - <!-- 定义默认的拦截器 每个Action都会自动引用 ; F8 |" ]* k. k4 s! C- S
- 如果Action中引用了其它的拦截器 默认的拦截器将无效 --> 6 M+ u2 q9 X h2 @3 T7 r
- <default-interceptor-ref name="mystack"></default-interceptor-ref> 6 Q* U8 x# ?2 F4 `" G
- 2 _8 I e* B3 e7 E
-
9 q2 P/ B1 S! ^7 X$ l - <!-- 全局results配置 --> & K m* B9 D1 H; E3 R
- <global-results> " D5 i# E7 m5 `
- <result name="input">/error.jsp</result> # R1 X* J! D# c1 f3 a; x: x: R
- </global-results> # T/ `& G M+ Q& `- H
-
# j3 o4 w: u" ?3 u0 I9 x* n - <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同) + } l6 p. \7 z, s1 y% a; e: m
- name:action名称
8 c# b3 m; O3 f h+ T/ Y( w2 _ - class: 对应的类的路径 6 D( H% o. r8 l) T
- method: 调用Action中的方法名
# }+ m4 T& f* Y) j A8 l - -->
0 k* b6 `% r) l$ p- O - <action name="hello" class="com.kay.struts2.Action.LoginAction"> 8 t5 P/ N+ R* R- V
- <!-- 引用拦截器
; Z2 a* H, _# [, K7 `/ ?7 V. }/ L - name:拦截器名称或拦截器栈名称
; q7 y7 H, X& D6 [8 ] D8 q - -->
# T3 ~2 t) F8 q% h$ C, t1 g2 k - <interceptor-ref name="timer"></interceptor-ref>
9 _' ~$ {9 I! a$ }% a - + n( Q* ]5 [# C( J; B, G
- <!-- 节点配置 4 s# s0 e! }% w6 M/ c
- name : result名称 和Action中返回的值相同 + s7 W* S S$ l4 v
- type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher 1 Y" V, H( V1 P. ^) a4 Y
- --> 0 Z9 C3 k7 |0 s, l$ h
- <result name="success" type="dispatcher">/talk.jsp</result>
* a2 b) F% B( g, i% ~' X - <!-- 参数设置
3 c1 `& y# ~5 |/ e9 K# K - name:对应Action中的get/set方法 6 S( C) F5 M+ ?, K0 O5 C! b. f3 ]
- --> 8 K( S' {! m# M5 b) P: Q* C
- <param name="url">http://www.sina.com</param> ; p3 P9 c- r0 g% B! G
- </action> ; A# Z9 m1 f9 n4 {; S' h
- </package> ) e! ~" Z4 w, X3 d9 @" [: }
- </struts></b></font></font></font>
复制代码 这些是常用的struts配置文件常量,如果想把struts用好,就要懂得每个配置是怎么一回事.不光光需要学习技术,更要学习好理论知识.技术的高度是由理论知识的深度决定的.
- _, }6 c3 L/ C3 t; c& i/ L5 L) P/ Q6 e9 _$ o8 z/ z4 T8 e
|