一:struts2的配置文件有哪些,相对应的作用是什么? Web.xml:包含所有必须的框架组件的web部署描述符.Struts2主要加载前端控制器及初始化参数.
! I9 g7 T* }& ?% I HStruts.xml:定义应用自身使用的action映射,拦截器及常量,result/view定义.
# }8 T. I3 ?# P& O- H. ^; zStruts-default.xml:定义框架自身用的action映射及result
1 D8 L7 ~. L' ], ~6 e; FStruts-plugin.xml:struts插件使用的配置文件 * A6 N3 @( \; n( h$ q
Struts.properties:定义框架自身的全局变量及框架属性.
) X6 k& P% ], Q! L2 J$ s; }2 x- N. r6 n5 B/ F, q) ^) D7 W
二:配置文件的加载顺序 0 u8 T, [, x1 w. h7 k, [2 ]+ G7 n
Struts-default.xml-->struts-plugin.xml-->struts.xml-->struts.properties-->web.xml
% v! q$ a$ g7 s$ n+ M5 ]注:若之前的配置文件设置过某一属性,则以后加载的配置文件对于相同的属性的设置,会覆盖之前的配置 三:Struts2常量的具体用法实例Xml代码 - <font color="rgb(0, 0, 0)"><font face="SimSun"><font size="2"><b><?xml version="1.0" encoding="UTF-8" ?> 5 {! l0 i+ `0 c" W* N, T
- <!DOCTYPE struts PUBLIC 1 k& f Z$ c' a P/ k( m! H- \
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" % J8 f' O, A+ d& {7 A
- "http://struts.apache.org/dtds/struts-2.0.dtd"> + i- j. z4 h3 ]. f
- + X8 s4 I, T3 @1 J+ N/ }( i
- <struts> . T. t- S+ C1 P, z+ ^
- <!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
* H2 N* \/ N. `* I - <constant name="struts.i18n.encoding" value="UTF-8" />
: J- U" u, i+ z b [5 {1 ~ - 3 V( _& ?1 q2 b( Z$ f4 U7 W5 [
- <!-- # m, S* N2 q$ f6 ]
- 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。 ! K! f1 }- q; n. w1 L d; n
- 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 . V/ G; s% j2 k/ ?5 J: V
- -->
, C8 T" n9 ?" e- u - <constant name="struts.action.extension" value="do" /> 3 F- G6 Z- y% Q/ U& V7 J- u# k
-
2 T) W# g+ v0 f0 { A6 g - <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 --> : x$ [5 {2 R1 s+ @
- <constant name="struts.serve.static.browserCache" value="false" />
" Q- U& k4 `. ]: L3 N& t" O -
+ z; J' H. b8 c) I! l5 S8 G' }: X$ ` - <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
, x$ ^# ~( U+ X) f8 {, |3 i1 J; J - <constant name="struts.configuration.xml.reload" value="true" />
: v3 A- j) C" ^ - w3 v/ V; l |0 ^$ W
- <!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
: _7 g. D | i4 m v+ R8 t" I; l - <constant name="struts.devMode" value="true" /> & m9 w: y5 _) ^" u9 {8 ?) [
-
3 w' ]3 G7 S4 z$ h - <!-- 默认的视图主题 -->
- u9 y" [4 e# k( b6 \ - <constant name="struts.ui.theme" value="simple" />
/ u- j! ?6 o3 a4 l7 [: t) W3 O -
2 F$ ?5 P- } ^% x/ n5 U: G3 O7 B5 G0 }; [ - <!-- spring 托管 -->
4 y* C+ R+ ^0 |9 e' @3 j2 y. r - <constant name="struts.objectFactory" value="spring" />
& [' q# V6 ]# c( a, R# \ - + g! M w8 k6 h: U8 R! D
- <!--
3 M+ ]! X+ E% l" t7 k - 指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration
1 d1 F- K) y* c - 开发者可以自定义配置文件管理器,该类要实现Configuration接口,可以自动加载struts2配置文件。 2 g/ U% Q2 C1 ]9 n3 H! f
- --> - ? q1 |0 y# y: k0 ^
- <constant name="struts.configuration"
) D! {/ R! Y h; L - value="org.apache.struts2.config.DefaultConfiguration" />
9 A0 |7 J2 L1 P3 Q p* X - 2 s% L" V1 @' J( g" h
- <!-- 设置默认的locale和字符编码 -->
3 q: o' |( f$ t& E0 i - <constant name="struts.locale" value="zh_CN" />
4 J! b5 c" e1 ~, a; V( u: n - <constant name="struts.i18n.encoding" value="GBK" />
9 B2 F D4 D) u7 k% P# K0 @6 j f -
7 K% m& v$ y8 E5 V* X' e - <!-- 指定Struts的工厂类 --> # R# K1 i8 u( \, C1 s7 ]
- <constant name="struts.objectFactory" value="spring"></constant>
% W. w9 i; Z/ s" ^( P! P - a7 |/ R: h' t! X/ A$ M
- <!--
. t& ?6 {$ Z! U- M+ W0 \ - 指定spring框架的装配模式,装配方式有: name, type, auto, and constructor (name 4 w1 L: S: a% \/ y, {- ?. s
- 是默认装配模式) : r! |2 N9 A$ |7 |! ^+ d
- --> 3 F7 A c. t, j1 G1 v; h
- <constant name="struts.objectFactory.spring.autoWire" value="name" />
$ B9 ?9 W+ n, Q, ~ O3 P# b -
s1 F, c' h2 o; T: d - <!-- 该属性指定整合spring时,是否对bean进行缓存,值为true or false,默认为true --> 8 E; T% B! h+ u
- <cosntant name="struts.objectFactory.spring.useClassCache" /> 8 u/ e0 o0 m* _5 N, B0 s
-
* V% q$ n: L: p$ ^3 Z- _ - <!-- 指定类型检查,包含tiger和notiger -->
, q. Q5 b; `- d6 a7 s7 l: p# I6 I - <cosntant name="struts.objectTypeDeterminer" value="tiger" />
' @' t1 |' q- G - ( x3 Z: L8 W( ^; d% C
- <!-- 该属性指定处理 MIME-type multipart/form-data,文件上传 -->
4 b/ a4 V4 C5 x, r - <constant name="struts.multipart.parser" value="cos" />
( ?0 k& v% V1 @2 w% [0 A. b$ j0 z - <constant name="struts.multipart.parser" value="pell" /> ; X' y+ x3 u8 l& q2 }, ?* g
- <constant name="struts.multipart.parser" value="jakarta" /> # P0 R9 w, v, J
-
' `/ _8 v7 u) A/ i - <!-- 指定上传文件时的临时目录,默认使用 javax.servlet.context.tempdir --> ; ], \3 a- f8 }$ j! l1 ~
- <constant name="struts.multipart.saveDir" value="/tmpuploadfiles" /> ! A. ~* \1 A; j2 Q
- ; o2 E/ }1 q4 T$ T& A+ [
- <!-- 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 -->
) p& u$ u5 ?: B j* T - <constant name="struts.multipart.maxSize" value="2097152" />
- a: G; B& T2 b$ r -
1 j1 j9 B" V8 W( ]' O- } b; g - <!--
; v- u; v; ^, z8 m - 该属性指定Struts2应用加载用户自定义的属性文件,该自定义属性文件指定的属性不会覆盖
( o3 Q( D; [9 m0 G* G) \9 _ - struts.properties文件中指定的属性。如果需要加载多个自定义属性文件,多个自定义属性文 5 @$ l$ V8 \/ y, D' c& {1 \" q+ D
- 件的文件名以英文逗号(,)隔开。(也就是说不要改写struts.properties!) / S% i" o8 y% R
- -->
4 I: J: q2 E' L5 s+ l - <constant name="struts.custom.properties"
) T9 v9 Y9 m* [& [1 o - value="application,org/apache/struts2/extension/custom" />
6 n5 }$ |8 |+ z - ! s _ B& o! F0 x {( z6 o1 R
- <!-- 指定请求url与action映射器,默认为org.apache.struts2.dispatcher.mapper.DefaultActionMapper --> ( v8 L( K! Y3 K# V
- <constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" />
0 k3 |# c/ Q$ W) s u/ ] -
8 J+ ], E: m C) b" j7 m3 X. b - <!-- 指定action的后缀,默认为action -->
6 }9 `+ K7 m. i$ S - <constant name="struts.action.extension" value="do" />
, o! H1 O! _( m8 n& f7 b7 S - 1 S) [' d7 }/ y2 b. J
- <!-- 被 FilterDispatcher使用指定浏览器是否缓存静态内容,测试阶段设置为false,发布阶段设置为true. -->
$ v1 Q* j. g5 h+ X T% D+ q - <constant name="struts.serve.static.browserCache" value="true" />
7 N$ k! L/ v$ N4 I0 J; B1 Q -
% v$ ~; j2 p1 U7 C& X% O - <!-- 设置是否支持动态方法调用,true为支持,false不支持. -->
e5 U3 {; i+ e" {! x - <constant name="struts.enable.DynamicMethodInvocation" value="true" />
/ x' C% J0 O/ U5 P: D" e- K - 5 X6 ~2 E! V" C# z
- <!-- 设置是否可以在action中使用斜线,默认为false不可以,想使用需设置为true. --> / D6 B& L0 u0 r% x6 _
- <constant name="struts.enable.SlashesInActionNames" value="true" /> 0 W/ |7 }1 x9 |3 @& x
-
' ?/ h$ o( w, t* [" ` - <!-- 是否允许使用表达式语法,默认为true. -->
/ L4 R& T% l+ D3 R, K( q% X+ l/ u - <constant name="struts.tag.altSyntax" value="true" />
9 L# M; y, |7 [ - 0 Y) ^$ N% E& t, D4 F+ Q
- <!-- 设置当struts.xml文件改动时,是否重新加载 -->
7 l/ ?0 V9 q: x" }; T - <cosntant name="struts.configuration.xml.reload" value="true" /> 4 @) `$ R! A( l; ?7 a
-
' U( n, F4 k# p' R - <!-- 设置struts是否为开发模式,默认为false,测试阶段一般设为true. -->
/ { @4 c9 ~; |. j& w8 M - <cosntant name="struts.devMode" value="true" /> % ?6 ?# a& @2 E1 A2 h3 y
-
- i7 d* J- O, J p3 r - <!-- 设置是否每次请求,都重新加载资源文件,默认值为false. --> e& m7 c' u4 a
- <cosntant name="struts.i18n.reload" value="false" />
8 p' v- }% @+ M) S. s, A) N - ; H. M) E7 @' z! \' q
- <!-- 标准的UI主题,默认的UI主题为xhtml,可以为simple,xhtml或ajax -->
6 _- t7 I! y' I! r0 J, n - <cosntant name="struts.ui.theme" value="xhtml" /> ! M; _9 `4 r' d' ^3 ^- S
- + ?* ~, u( e/ d
- <!-- 模板目录 --> & K2 U' G. y2 l1 ]4 M( A
- <cosntant name="struts.ui.templateDir" value="template" /> 4 ^$ ?- @$ w0 \( A F* I1 T2 P
- , _3 F1 U" r) G: l; t; v
- <!-- 设置模板类型. 可以为 ftl, vm, or jsp -->
) r7 P: V- ^( w% G - <cosntant name="struts.ui.templateSuffix" value="ftl" />
3 ?7 e4 t2 _' j! b& r) L - % p# t( |: Z, [9 \7 C( I7 y) n: I) M8 _4 o
- <!-- 定位velocity.properties 文件. 默认velocity.properties -->
K- _6 Y4 p4 g2 c; [0 H) i3 y4 p - <cosntant name="struts.velocity.configfile" value="velocity.properties" /> 9 o, i' s5 h/ c
- ; q$ Q3 e1 W* _* y" ^
- <!-- 设置velocity的context. --> , S& N3 H' d8 z1 Y! X- z- S
- <cosntant name="struts.velocity.contexts" value="...." /> : t: H! O+ O1 p$ Y) }. J* v) ^
- * ^" P1 U) j% g* W* G
- <!-- 定位toolbox --> & D, [( H. e. b. P+ c
- <cosntant name="struts.velocity.toolboxlocation" value="...." />
. P, R) e% K" v. r2 z: _! d -
' ]: j5 b1 S! K$ Y" t0 H m- W - <!-- 指定web应用的端口 -->
$ f% B! ^0 M# n7 P7 k( Z# V) [ - <cosntant name="struts.url.http.port" value="80" />
: [! r+ q; \" r4 A - 6 L. s& {- {+ `6 q- f: Y6 |8 j$ e
- <!-- 指定加密端口 -->
# H' K9 o( b; y" z( v. O _% j - <cosntant name="struts.url.https.port" value="443" /> , V9 d( H- Q1 |: Z3 O
- / ~+ U7 e: Q8 c, |! P
- <!-- 设置生成url时,是否包含参数.值可以为: none,get or all -->
1 p) `. a9 g( O - <cosntant name="struts.url.includeParams" value="get" />
# v. G. q# z% a7 F& S- q- y - / Z: u1 X# {8 J' R* _
- <!-- 设置要加载的国际化资源文件,以逗号分隔. -->
+ J4 o1 R( r5 H$ }( n; I2 k - <cosntant name="struts.custom.i18n.resources" value="application" />
5 U4 T8 V) s& G" t6 ^ - ' t8 ] v5 w. ~7 x0 d/ x
- <!-- 对于一些web应用服务器不能处理HttpServletRequest.getParameterMap(), : D! Q& }0 a9 w: _0 k
- 像 WebLogic,Orion, and OC4J等,须设置成true,默认为false. --> # E3 P8 K' x5 z, F- F* Y. f
- <cosntant name="struts.dispatcher.parametersWorkaround" value="false" />
& x- @7 M) N: `( _( I4 s -
! ?5 h" c: p1 L7 A - <!-- 指定freemarker管理器 --> - i# O$ G9 J5 l
- <cosntant name="struts.freemarker.manager.classname" value="org.apache.struts2.views.freemarker.FreemarkerManager" />
& e7 k) H1 o4 E3 ^. \# P - : \& U5 [- A; U2 ~/ [
- <!-- 设置是否对freemarker的模板设置缓存,效果相当于把template拷贝到 WEB_APP/templates. --> - Y% x9 M3 _4 M) `
- <cosntant name="struts.freemarker.templatesCache" value="false" /> ' h! j3 o p9 t8 L3 h2 e; p) l
-
2 ~+ f/ `' j$ C/ n& g2 ?2 Z - <!-- 通常不需要修改此属性. --> + c o a; |1 ?2 }2 s
- <cosntant name="struts.freemarker.wrapper.altMap" value="true" /> 8 D8 L! p$ A9 O
-
$ S1 F0 R; Z6 y) `$ G; W% F& a6 Z - <!-- 指定xslt result是否使用样式表缓存.开发阶段设为true,发布阶段设为false. --> / [! z3 }( V8 Z2 h# w0 w! ]0 W( \
- <cosntant name="struts.xslt.nocache" value="false" /> 1 V- G- E7 W# x' D/ g
-
+ O1 u9 H. a3 C; F - <!-- 设置struts自动加载的文件列表. --> 7 T) S: E3 `3 Q8 n2 Q* \- v. V
- <cosntant name="struts.configuration.files" value="struts-default.xml,struts-plugin.xml,struts.xml" />
* i" o& p% U8 c - + e. R C) P5 s$ }+ S
- <!-- 设定是否一直在最后一个slash之前的任何位置选定namespace. --> ( |! t: A8 }5 ?9 W
- <cosntant name="struts.mapper.alwaysSelectFullNamespace" value="false" />
4 _0 q/ t2 |6 _1 r& l2 c - </struts>
2 o1 q0 R% G- i- b3 |+ ~0 t5 {( c - $ ]- V: Y, R% G+ D3 y1 Q& G
- 5 U% f+ \0 [- u9 ~9 r. Q; R
- 6 M0 `6 U$ p8 ^) R' s4 o
- <struts>
" H4 Z) i& @+ } t -
" G6 G2 h Z# n5 K3 c" [( b - <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 --> / L% z8 M2 x6 b9 e# o( x
- <include file="struts-default.xml"></include> s3 ^5 h' x2 r" z5 c9 Q# p
- & z0 X" D8 M; G) P& {4 O
-
. l1 `) J- {* Y! y# ]& `: @. P - <!-- package提供了将多个Action组织为一个模块的方式 ; M; j7 Z* {+ W1 N2 u3 ]
- package的名字必须是唯一的 package可以扩展 当一个package扩展自 * j# B3 k( P0 h X T8 K1 C
- 另一个package时该package会在本身配置的基础上加入扩展的package . @9 W" d4 Q4 D* `1 ]+ R, Z
- 的配置 父package必须在子package前配置
( q+ S5 M o$ I - name:package名称 0 C" b0 N8 a$ N3 ^/ m& i
- extends:继承的父package名称 6 z6 P/ Q9 r* t" C. P U
- abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
- s( o: g( T- P9 ^& D: k - namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action ) K0 ~' c% Q; S ~9 T
- --> 6 l( l0 ?/ _, o$ D u. I' w& Y5 [
- <package name="com.kay.struts2" extends="struts-default" namespace="/test">
3 e; W+ B) b7 o6 H - <interceptors>
" Y; a' D; ]9 W ?1 ]: C - <!-- 定义拦截器
+ Q6 o" Q; x8 l0 J - name:拦截器名称
% W& v9 G$ ?# I0 z/ W3 } - class:拦截器类路径 8 n3 t4 q' t0 L( H4 ]0 d
- -->
4 m% n, [7 T3 t - <interceptor name="timer" class="com.kay.timer"></interceptor>
$ I) L! C, ^0 T# y - <interceptor name="logger" class="com.kay.logger"></interceptor>
3 {6 k; s3 Q; A - <!-- 定义拦截器栈 -->
3 N# K) I9 ]# @; V" Y3 l - <interceptor-stack name="mystack">
7 q* K6 ^. J C& O) J' V9 h - <interceptor-ref name="timer"></interceptor-ref> 1 b# U! r. V9 m" \9 k" ~( f
- <interceptor-ref name="logger"></interceptor-ref>
0 e6 c* O- S6 z4 A; ^ - </interceptor-stack> / C' s+ L; w7 p2 x* X
- </interceptors>
, Q+ ~$ Z7 R' a% O# g" k -
- B1 j5 w8 u4 @( x) k" \ - <!-- 定义默认的拦截器 每个Action都会自动引用 / m) n" _( c. f' P
- 如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
' M; `. j0 s7 L* C - <default-interceptor-ref name="mystack"></default-interceptor-ref>
9 N, K$ K6 s2 W! J$ y3 ?# ` - 6 L/ W1 ]* d! b2 J F; W% d
-
* ~/ c0 M& M, `3 t6 H - <!-- 全局results配置 -->
* y/ `" M- N1 B' j - <global-results>
, \% Y9 n2 S7 m1 C$ Y - <result name="input">/error.jsp</result> $ D/ w# Z3 h5 C2 Z
- </global-results> ) j! n% @% F/ ~% \
-
; g( m4 X7 a5 z$ d! g% ] ?0 m$ s' ^ - <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同)
* @+ ]8 O& _8 k4 U4 D( g - name:action名称
0 z+ N8 R7 y7 C - class: 对应的类的路径 0 j& y J8 u: S8 i) V, _
- method: 调用Action中的方法名
- X( E. ?& l I/ t4 R - --> $ K" j# v2 y4 x7 O
- <action name="hello" class="com.kay.struts2.Action.LoginAction"> 9 W* b' ?+ _. E2 s$ y. s
- <!-- 引用拦截器
( D, V( p5 \2 m7 | - name:拦截器名称或拦截器栈名称
6 ^- Y7 ~( W8 x. p: {# s( i. m - -->
( O. q- e9 d/ ?( ?! } - <interceptor-ref name="timer"></interceptor-ref>
- ~' N! i$ G0 n9 Y* V9 P; S0 O -
# y6 E! g: f* n - <!-- 节点配置
R5 S8 L! K1 ]5 ^) A - name : result名称 和Action中返回的值相同
! t8 p0 x" o* j: g - type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher
2 Z) x( i" _0 J7 p2 K( u - -->
- l- W+ U. ?4 x- N - <result name="success" type="dispatcher">/talk.jsp</result> ! r# M* j* ~& R7 m+ K& s
- <!-- 参数设置
# Q) { z0 q# `, s& z - name:对应Action中的get/set方法
# h7 R& U4 {: V! |- K+ p - -->
4 A) r5 d% z$ I6 s% Z+ h - <param name="url">http://www.sina.com</param>
- g9 N/ p! H" p% } - </action> ) }& @* U$ s G# N0 V
- </package>
7 k# l+ t4 w/ M1 ~0 ?! V9 x' }/ Z - </struts></b></font></font></font>
复制代码 这些是常用的struts配置文件常量,如果想把struts用好,就要懂得每个配置是怎么一回事.不光光需要学习技术,更要学习好理论知识.技术的高度是由理论知识的深度决定的. $ w/ X j* |3 x; t5 M0 t) w- ?
( G& H( E! E9 l! @0 I8 R! Y+ A7 R |