一:struts2的配置文件有哪些,相对应的作用是什么? Web.xml:包含所有必须的框架组件的web部署描述符.Struts2主要加载前端控制器及初始化参数.
5 v" G3 w2 e+ [Struts.xml:定义应用自身使用的action映射,拦截器及常量,result/view定义. : T, O/ r4 i7 l9 f
Struts-default.xml:定义框架自身用的action映射及result
( k p/ `+ i U- H9 kStruts-plugin.xml:struts插件使用的配置文件 9 B' o: s: f+ g& k- ^/ ?9 F
Struts.properties:定义框架自身的全局变量及框架属性. ; k9 P+ G+ s0 K
1 t- z1 e! C+ L# k1 B/ Q
二:配置文件的加载顺序
3 d5 |8 r! \& {( f0 PStruts-default.xml-->struts-plugin.xml-->struts.xml-->struts.properties-->web.xml ) w' O6 Q9 L) D3 x; o P
注:若之前的配置文件设置过某一属性,则以后加载的配置文件对于相同的属性的设置,会覆盖之前的配置 三:Struts2常量的具体用法实例Xml代码 - <font color="rgb(0, 0, 0)"><font face="SimSun"><font size="2"><b><?xml version="1.0" encoding="UTF-8" ?>
- C% z4 ^& z+ S7 G - <!DOCTYPE struts PUBLIC # q1 ?* J8 s/ N. g+ K6 P4 n0 P
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
6 D0 I# {$ l" M - "http://struts.apache.org/dtds/struts-2.0.dtd"> # Y( C* F2 U0 n3 d! c+ J; g
-
, X4 I/ E, F! r o0 M; J3 B; d - <struts> " L& T9 j+ J9 R0 a- D
- <!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 --> 0 ~9 C( h" ?! F- M) p
- <constant name="struts.i18n.encoding" value="UTF-8" />
. b7 i# K) r7 a6 @, Z - 2 b. i7 k& @7 _+ A5 F
- <!-- ( m: A% K- @: E
- 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
8 T, L4 J# \+ V - 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 }% p! C9 ^) X" U/ N7 X
- --> 2 ~% u @$ V' H9 i- T% t
- <constant name="struts.action.extension" value="do" /> 3 D6 i- @: ]. }" F3 _6 l7 C1 u) c
- + r, v' u7 P: U) J) f# Y* r' B
- <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
! D" L9 m4 m8 }% t. O - <constant name="struts.serve.static.browserCache" value="false" />
: R- a7 R; X2 k. r) ` - 0 M: c- G: g6 \; g. Y4 W+ I
- <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 --> ) E& ^5 A9 d) U% y
- <constant name="struts.configuration.xml.reload" value="true" />
- e X% L# l0 J# y -
( l3 M" Q* z! F) q! u( W - <!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
0 `& u* x% A( c5 [& Z) o% d - <constant name="struts.devMode" value="true" />
8 B5 N3 o, h% o$ b5 x! r( U -
7 Y$ z, N' u* n, ? - <!-- 默认的视图主题 --> 2 o4 B- i4 i( e6 N( J
- <constant name="struts.ui.theme" value="simple" /> 0 F8 y% K1 } k. |) k- k
-
/ V1 h I- x% o: o% w% q - <!-- spring 托管 -->
3 L4 L4 G w& l8 Z$ @7 e8 [ - <constant name="struts.objectFactory" value="spring" /> $ [- D! n1 f- o7 z: Q( D9 J
- / p7 k4 F& ~2 H* Q. l
- <!-- - t% O# f6 L2 t. B: V8 a9 w
- 指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration 9 d: N0 E6 \ s
- 开发者可以自定义配置文件管理器,该类要实现Configuration接口,可以自动加载struts2配置文件。 ( `2 ?* H- ?8 r6 O) |& j* Q! R
- --> - K% f6 O% b3 c i! E
- <constant name="struts.configuration" ! N. O9 V- z d( ]7 h$ [% V2 o6 [
- value="org.apache.struts2.config.DefaultConfiguration" /> ; Q: o* R' y9 w, T* A9 Y
- ! F7 X/ d/ w- v6 W
- <!-- 设置默认的locale和字符编码 -->
9 _3 P& f! c: Q1 | - <constant name="struts.locale" value="zh_CN" />
1 z/ k- g0 l3 q/ j# J! |: O3 r7 c: m - <constant name="struts.i18n.encoding" value="GBK" />
& k2 n6 U& @7 A - ; |9 N( i; Q# Y' t$ {
- <!-- 指定Struts的工厂类 -->
5 N- F. G7 Y. {6 ]3 \2 e5 \ - <constant name="struts.objectFactory" value="spring"></constant>
$ ^2 W* D0 }* H% D - : Q* L, F% n6 T
- <!-- 4 ]. P7 D& q' X7 o5 I2 O2 ]- d6 Q
- 指定spring框架的装配模式,装配方式有: name, type, auto, and constructor (name ; q$ o% m+ P6 w& H1 }3 U
- 是默认装配模式)
' J; b5 ?( s( l& ]0 S - -->
7 U( r. D$ q( h - <constant name="struts.objectFactory.spring.autoWire" value="name" /> 7 r* l3 L2 w$ Z- A# ^! U
- a. I3 K k7 j. W5 G2 F
- <!-- 该属性指定整合spring时,是否对bean进行缓存,值为true or false,默认为true --> ) `% Z M7 x7 J% ?4 t2 A4 E5 I6 y
- <cosntant name="struts.objectFactory.spring.useClassCache" /> : r! V# a" x; l- Y$ `$ i+ [
-
, C& _; {# H( k: l - <!-- 指定类型检查,包含tiger和notiger -->
- O" r! T( y. r S1 Y1 e! H2 m7 ]. w, T - <cosntant name="struts.objectTypeDeterminer" value="tiger" /> 4 ?; S1 P; J5 m
-
9 m2 t& e8 z7 V7 v6 g - <!-- 该属性指定处理 MIME-type multipart/form-data,文件上传 -->
# y0 G* b l X" P* l, `% q - <constant name="struts.multipart.parser" value="cos" />
# m* u* ]6 U: w4 f - <constant name="struts.multipart.parser" value="pell" /> , O5 v# [: S! M* E0 t/ ~8 F
- <constant name="struts.multipart.parser" value="jakarta" />
6 i/ H- r R; o9 d/ h' i$ W) s- p -
9 y$ Y- [8 v9 h. L7 A" S3 V - <!-- 指定上传文件时的临时目录,默认使用 javax.servlet.context.tempdir -->
/ b! }; k4 V- U; ] - <constant name="struts.multipart.saveDir" value="/tmpuploadfiles" /> X# l% j8 Q4 G: [9 C' J" p, ~
-
/ b1 t+ N5 H5 U' B. X - <!-- 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 -->
+ j( y! S+ O( X: o+ k - <constant name="struts.multipart.maxSize" value="2097152" />
5 C$ l+ W# ?2 v* J5 E$ V# x' P -
- _) x6 j# w: e# h6 d. l4 q" {# `& d - <!-- ( u! j% z: B2 j( X( ]# j" J3 X
- 该属性指定Struts2应用加载用户自定义的属性文件,该自定义属性文件指定的属性不会覆盖 1 B, N) c( R$ C1 d$ J
- struts.properties文件中指定的属性。如果需要加载多个自定义属性文件,多个自定义属性文
& x2 J: u0 S! Q7 j% t) Y - 件的文件名以英文逗号(,)隔开。(也就是说不要改写struts.properties!) # d! ^% Y7 Z) f$ [) ?6 B5 \+ z
- --> ' R- r D1 P( B4 D+ t9 m2 h8 l
- <constant name="struts.custom.properties"
, T( f1 v2 p+ D8 H/ D - value="application,org/apache/struts2/extension/custom" />
/ L2 T( ?& \6 B0 ^ -
! N9 Y1 {5 O0 u( g Q - <!-- 指定请求url与action映射器,默认为org.apache.struts2.dispatcher.mapper.DefaultActionMapper --> 0 p1 a5 }0 N9 Q) K" [' w/ F
- <constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" />
2 p. e) ]. `' {: l( W# ? - , r/ i7 |( U3 @2 I! E5 ?1 D8 m
- <!-- 指定action的后缀,默认为action --> 4 C1 @. r) \/ [ [& ?, H0 w' t
- <constant name="struts.action.extension" value="do" />
2 E+ [' E% @5 @- k) c! v - % ?" C) H G# D* W$ x
- <!-- 被 FilterDispatcher使用指定浏览器是否缓存静态内容,测试阶段设置为false,发布阶段设置为true. --> ) [3 K- d5 e& Z4 v p' E6 z) K" u
- <constant name="struts.serve.static.browserCache" value="true" /> : R, `& ^3 D! ^9 s0 \) R
-
l7 `% D( j$ L - <!-- 设置是否支持动态方法调用,true为支持,false不支持. -->
- Z5 c% R# p a& L - <constant name="struts.enable.DynamicMethodInvocation" value="true" />
* t Y& i6 T' N) } f5 B -
4 c, a9 q# O3 B8 f4 U, f6 K2 E - <!-- 设置是否可以在action中使用斜线,默认为false不可以,想使用需设置为true. --> " H/ S5 l% X: X: x- q5 p
- <constant name="struts.enable.SlashesInActionNames" value="true" />
" h3 g1 z, J" H- i" i -
0 o1 \/ b& I9 M8 V' c, u - <!-- 是否允许使用表达式语法,默认为true. -->
4 s$ n: Q, w$ g4 b, ? - <constant name="struts.tag.altSyntax" value="true" />
3 P2 G& B5 z8 t1 v, m b - q m( r2 n# f& S
- <!-- 设置当struts.xml文件改动时,是否重新加载 --> # N- ]- ^: O6 X" W8 _" u! _, S: y
- <cosntant name="struts.configuration.xml.reload" value="true" />
( h+ k3 }6 ~( k8 M( e% j -
+ m% y9 M3 b& j5 k - <!-- 设置struts是否为开发模式,默认为false,测试阶段一般设为true. --> % f; E* c; G F. {+ Z6 @4 B$ p
- <cosntant name="struts.devMode" value="true" /> ; Z" I. G3 y; O/ i8 j; t" a
- " [# q" q* E5 M% h, G- _' }) J6 ^
- <!-- 设置是否每次请求,都重新加载资源文件,默认值为false. --> & K/ Q7 y& ]& _' r6 X7 \/ j& |" H
- <cosntant name="struts.i18n.reload" value="false" /> ) P. G) }* v! E# `+ q9 v
- $ c; |; h" J" \5 x7 ]6 l: K
- <!-- 标准的UI主题,默认的UI主题为xhtml,可以为simple,xhtml或ajax -->
# k, x4 @ p& _ d" w% e: H+ `. U - <cosntant name="struts.ui.theme" value="xhtml" /> . n }5 M; d ^7 b; U
- ' W1 O; P) O# M1 G0 R0 _
- <!-- 模板目录 -->
% d) Y6 c5 Q/ h2 n6 C1 v% [/ |9 t - <cosntant name="struts.ui.templateDir" value="template" /> 9 D, w6 O( s+ n l6 A! B S& A& A1 d
-
5 i1 O" t! ^+ X - <!-- 设置模板类型. 可以为 ftl, vm, or jsp -->
; p. W0 G) m8 K# v: q9 c - <cosntant name="struts.ui.templateSuffix" value="ftl" />
: ^% C( H: r" ?* B# i -
, v% c' P9 g. r& j6 J! x$ L2 U U - <!-- 定位velocity.properties 文件. 默认velocity.properties --> ! q/ j3 r8 X2 U- M4 _
- <cosntant name="struts.velocity.configfile" value="velocity.properties" />
8 v$ L; J/ A7 k5 G: f - J& r& M1 x6 M
- <!-- 设置velocity的context. --> + k+ r7 K5 {: C$ D) n2 M w3 C
- <cosntant name="struts.velocity.contexts" value="...." />
& ?: ?6 p3 e! S- J -
$ }2 H; @& H7 e+ C - <!-- 定位toolbox -->
+ ]0 o4 K' k' T - <cosntant name="struts.velocity.toolboxlocation" value="...." />
. I1 h- u1 o& Y- S& A3 u( | - 3 @, S8 T, E$ K
- <!-- 指定web应用的端口 --> z( `' I9 n' G4 ~$ l' J
- <cosntant name="struts.url.http.port" value="80" />
- a6 U' x( ] s& c: ~+ v/ T -
* @" i# \! n2 b; ] - <!-- 指定加密端口 --> ' }: B& d ?4 q4 }" n+ e
- <cosntant name="struts.url.https.port" value="443" /> ) i+ g2 T' o/ Z& [1 I
- % b0 z$ w0 `+ X" o4 e5 D! q
- <!-- 设置生成url时,是否包含参数.值可以为: none,get or all --> ( d8 q! @1 F2 F% h# w( F, m
- <cosntant name="struts.url.includeParams" value="get" />
; _. P2 _. b I% b* | -
" z; N% E% H( t# x - <!-- 设置要加载的国际化资源文件,以逗号分隔. --> 3 x, w' L9 y1 u- n. z; D& |
- <cosntant name="struts.custom.i18n.resources" value="application" /> 3 G; T, b3 T/ I1 U V5 a& e
-
1 p/ t$ a8 R& F - <!-- 对于一些web应用服务器不能处理HttpServletRequest.getParameterMap(), 5 @4 E c5 u$ q3 J5 n1 n( ^
- 像 WebLogic,Orion, and OC4J等,须设置成true,默认为false. -->
0 y9 N$ |/ L# V( y8 U, C - <cosntant name="struts.dispatcher.parametersWorkaround" value="false" />
- c4 a. @ Y2 T3 f -
2 z1 `0 E5 A/ ?4 `0 s6 Q( L9 M - <!-- 指定freemarker管理器 --> ; }" `7 [2 V2 t! s! v2 Y
- <cosntant name="struts.freemarker.manager.classname" value="org.apache.struts2.views.freemarker.FreemarkerManager" /> + H$ b( B. Y# b# C: K
- : K+ t3 Y! w" i: K
- <!-- 设置是否对freemarker的模板设置缓存,效果相当于把template拷贝到 WEB_APP/templates. --> 9 U' Z: d1 [) d# S% K7 S
- <cosntant name="struts.freemarker.templatesCache" value="false" />
: G* P% x$ K# C) ?2 K -
8 z8 ^8 }% J1 P5 E% @; _' l - <!-- 通常不需要修改此属性. -->
! d1 p3 p" F1 u% a - <cosntant name="struts.freemarker.wrapper.altMap" value="true" /> Y9 d, s j. D, u4 m. A) |4 N
-
0 Y. q v* a% @6 e# _+ l9 ^* O0 W$ x - <!-- 指定xslt result是否使用样式表缓存.开发阶段设为true,发布阶段设为false. --> % }% r3 @2 A% c* e3 Z& M! Y
- <cosntant name="struts.xslt.nocache" value="false" />
7 c+ T9 ~8 d# C6 k+ y4 ` -
8 B- G+ N7 o: ^0 x/ y0 w% h - <!-- 设置struts自动加载的文件列表. --> & M! K0 W6 S. M
- <cosntant name="struts.configuration.files" value="struts-default.xml,struts-plugin.xml,struts.xml" /> 9 ^% v! v2 t9 a" Y
-
9 ~$ H: U8 m: Y6 V2 ~& p6 T - <!-- 设定是否一直在最后一个slash之前的任何位置选定namespace. --> ( r. H9 z4 h3 B- J: j
- <cosntant name="struts.mapper.alwaysSelectFullNamespace" value="false" />
2 H8 o) x0 f/ F) u, {. z* S6 M - </struts> 2 ?8 l" K; u9 Q
- ) ?# j% M% q" U0 c/ w9 H* o$ |+ P# Q, j
- - C9 ` a0 A: \1 K
- 2 K* ^8 j2 p; I+ i
- <struts> 1 ^+ W. P1 e9 ?$ g; h" e
- % K6 l' O$ n& R- F7 ^1 s: a& s
- <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 -->
4 i h) x+ q4 P8 s; L9 q/ E4 | - <include file="struts-default.xml"></include>
3 `7 ~( C: M/ h# ^% l+ P* ~ - / p* z9 i3 g! i2 o2 c
- / J$ m/ J$ J% V6 M) x7 @
- <!-- package提供了将多个Action组织为一个模块的方式 , ]4 r' w3 c4 a9 x m @/ W' g
- package的名字必须是唯一的 package可以扩展 当一个package扩展自 $ J- n! ]; e1 x: R
- 另一个package时该package会在本身配置的基础上加入扩展的package
9 T" [! r" k7 | B7 O" E, ?: g - 的配置 父package必须在子package前配置 * \& q% f2 r7 U* p
- name:package名称 8 ^# o. v; ]( k2 x' z
- extends:继承的父package名称
% ~) N, Z+ @" k9 G8 u - abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
v( `7 G" _) N, f4 ]# e { - namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
& a2 x8 H* l5 T5 J% _1 X1 }0 `7 d - -->
. x5 `9 e% ~& {8 R# g8 d% q - <package name="com.kay.struts2" extends="struts-default" namespace="/test"> 4 j1 \7 F2 @. T; J
- <interceptors> * q+ \* y* W1 b$ D* t2 `
- <!-- 定义拦截器 " Y" L q7 K0 M9 C
- name:拦截器名称
5 I% M- y. p' j# I6 U+ }5 O4 ^ - class:拦截器类路径
H, ~9 i o; j. F& e' j# J - -->
# ]( I+ _$ z' K) \/ ^" E* V - <interceptor name="timer" class="com.kay.timer"></interceptor> 7 ^8 K. t$ d! ~* Q7 Y0 J, u, W4 e
- <interceptor name="logger" class="com.kay.logger"></interceptor>
4 _" q: g7 l" ?% Q6 f1 J1 { - <!-- 定义拦截器栈 --> + K1 _& l; h! F! q
- <interceptor-stack name="mystack"> 8 H' t3 V- R m7 ?$ @( N9 e
- <interceptor-ref name="timer"></interceptor-ref> ! L5 @, L& U) r6 \% t- P2 |
- <interceptor-ref name="logger"></interceptor-ref> $ f' }6 |+ K8 n4 T9 @ L9 S
- </interceptor-stack> " x% n+ b; ]# W! |7 w+ B S
- </interceptors>
' s8 \0 Y/ b2 b/ a# ~: ]; L - 4 |/ |5 B3 Y- h- S. i4 q! K i
- <!-- 定义默认的拦截器 每个Action都会自动引用
1 B: _6 `3 ~! {" y, C3 @' t0 s- Y0 } - 如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
$ F0 k c& p1 t" S - <default-interceptor-ref name="mystack"></default-interceptor-ref>
) k- R+ d+ R+ M -
7 j- N6 y0 i" v, `: ?& q - % G1 @8 |. O9 A0 @& `- f/ r
- <!-- 全局results配置 -->
- {- c5 N( |# N1 ` t( V% ^; e" G# ^ - <global-results> ) j' J* z) y; s% T
- <result name="input">/error.jsp</result> / t' T* f( T9 Q! y v
- </global-results> ; C8 p: v- k8 l$ A7 q
- ! V8 h; D! @) Z, O) ]( L" I8 M5 _; N; e
- <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同) - O& y& X; H( H4 \$ r
- name:action名称 4 {4 f$ \+ U3 `: H8 O# s% T5 M
- class: 对应的类的路径
2 ^! o' s7 m9 Y# u6 [0 P - method: 调用Action中的方法名 & j h4 I9 s9 X( m7 V3 U
- -->
% z4 |! P) l0 m - <action name="hello" class="com.kay.struts2.Action.LoginAction">
, D4 B, I: V- ?" R9 l - <!-- 引用拦截器
4 r/ W; @- P+ w2 U6 o - name:拦截器名称或拦截器栈名称 ' m; t" p L2 `3 ^; [
- -->
- \* ^. l1 O: J1 w- n - <interceptor-ref name="timer"></interceptor-ref> " f+ ` Q1 v! c9 V1 K: ]
- ) e b" d7 R# o% p% J
- <!-- 节点配置 , ~4 m4 p" e+ r. O$ L; V
- name : result名称 和Action中返回的值相同
& u& M. X& S4 Z7 n) a - type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher
) N, ^8 v1 o4 I! ]/ ` - -->
+ A3 H* A, x! O2 n, k - <result name="success" type="dispatcher">/talk.jsp</result>
4 x; `: R: k/ N# L w+ d - <!-- 参数设置
/ z! b4 X7 v7 {$ o - name:对应Action中的get/set方法 " D4 Z' z4 R, m
- --> + {' b l( `! R
- <param name="url">http://www.sina.com</param>
; c/ s7 `2 H( {. B: L; ]. q - </action> , Q0 W4 | V, w' C; \8 {( f7 ~0 g
- </package> 3 m2 s5 x$ t) v2 e/ A* ^. H) \! ]
- </struts></b></font></font></font>
复制代码 这些是常用的struts配置文件常量,如果想把struts用好,就要懂得每个配置是怎么一回事.不光光需要学习技术,更要学习好理论知识.技术的高度是由理论知识的深度决定的.
7 Y# b" T0 Y Y# @9 H& Y! E$ ~( I* Z0 p7 L8 F, R
|