一:struts2的配置文件有哪些,相对应的作用是什么? Web.xml:包含所有必须的框架组件的web部署描述符.Struts2主要加载前端控制器及初始化参数.
7 ?) k q9 C. J5 L. QStruts.xml:定义应用自身使用的action映射,拦截器及常量,result/view定义.
, `/ [6 [; N/ C3 R& tStruts-default.xml:定义框架自身用的action映射及result 0 u+ ?- ]) U+ D4 \& K
Struts-plugin.xml:struts插件使用的配置文件
# A# u. Q# V9 K7 hStruts.properties:定义框架自身的全局变量及框架属性.
" l" d9 j: S3 j& ]$ ]9 B
5 o3 g8 H) H# e( d! ]二:配置文件的加载顺序
5 g+ V" K# M& m+ k9 Y6 {7 ^Struts-default.xml-->struts-plugin.xml-->struts.xml-->struts.properties-->web.xml / P, u. e* @8 J! N
注:若之前的配置文件设置过某一属性,则以后加载的配置文件对于相同的属性的设置,会覆盖之前的配置 三:Struts2常量的具体用法实例Xml代码 - <font color="rgb(0, 0, 0)"><font face="SimSun"><font size="2"><b><?xml version="1.0" encoding="UTF-8" ?>
' V# g2 C, y; E% m8 R7 y2 A - <!DOCTYPE struts PUBLIC + d/ h' `/ y; _; Z5 K H6 K7 g/ G
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" . L0 M4 l' s- u! z" m/ `, _" l- ^
- "http://struts.apache.org/dtds/struts-2.0.dtd">
' s( g' F( s- i ^7 ]9 @ P/ U - 5 A6 G3 v" v$ W
- <struts> & F8 H( v% I) G
- <!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
! o9 B( ~8 ^8 p! d4 Z; R; h; e0 } - <constant name="struts.i18n.encoding" value="UTF-8" />
2 P+ S8 F! i6 v o' S& a -
, C2 b' }$ W' y% _ - <!-- . x# G: f# q( ~
- 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
$ R% e: _: `2 k8 N7 m: B' } - 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。
' O, i6 {, Q: O* N - --> - m, m& E S& d; k. h! ]- _' h& W
- <constant name="struts.action.extension" value="do" /> + } f) ?( Y0 k* e/ m3 ^
-
5 |5 m& g6 T, h, T, z2 N$ w - <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 --> e4 s# m- I q6 |$ U: C
- <constant name="struts.serve.static.browserCache" value="false" />
3 n! U) J* l( q -
+ c8 w/ v0 V' V( t% k - <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 --> ' j' _$ x$ v# [8 x
- <constant name="struts.configuration.xml.reload" value="true" /> , `. s4 j0 [0 Q) m0 d3 u: X
- 3 Q6 a' O* U' R! h! F
- <!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
~4 Z# l8 X! C% d1 v1 v G - <constant name="struts.devMode" value="true" />
$ T- s n. L& W3 p$ o9 } - ; O9 V; Z) H9 j* l
- <!-- 默认的视图主题 --> + n' f( M2 p* H: s
- <constant name="struts.ui.theme" value="simple" />
, k- s$ @1 G% Q. \" k3 b - % C& j. O0 `, `$ e4 W" T
- <!-- spring 托管 -->
+ C" t5 r8 p# E+ W3 Z - <constant name="struts.objectFactory" value="spring" /> 0 o* p/ ?* S0 p/ Z, K
- / E( Z, C& E4 q! R) O, q3 K# j) f
- <!--
" v* z) @" m8 \, f1 @; g - 指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration
& p3 F0 W8 x5 `4 l- ? - 开发者可以自定义配置文件管理器,该类要实现Configuration接口,可以自动加载struts2配置文件。 0 S0 r5 ~; t: {
- --> ! a t$ G+ G. B2 h; l" [& u
- <constant name="struts.configuration" ( T; w$ r; E3 h
- value="org.apache.struts2.config.DefaultConfiguration" /> h8 w- p& N$ D4 S8 n5 D
-
" f# W2 j7 P- @% \) g- m - <!-- 设置默认的locale和字符编码 --> 1 ?$ c' Y3 `( ]3 f# h w
- <constant name="struts.locale" value="zh_CN" /> $ a$ V6 |+ F& v3 ~ @. o N
- <constant name="struts.i18n.encoding" value="GBK" /> 5 X! `5 c5 A: c- E$ S
- # X3 G- p& k) g: c% F6 i# Y
- <!-- 指定Struts的工厂类 --> & e0 J9 c; x& y
- <constant name="struts.objectFactory" value="spring"></constant> ) v0 V# E0 w6 D& q! C" [( |, L4 i
- 0 W# w; v, A2 }' D5 [& N0 l
- <!--
0 K$ z: Z' ^; J; C, \4 f3 m - 指定spring框架的装配模式,装配方式有: name, type, auto, and constructor (name
8 j Y+ Q3 Z; @$ l - 是默认装配模式)
" |' ]+ ]$ o6 e$ R$ |4 U$ e) ^& ` - -->
/ i1 z K# K) d/ Y! f' x+ r; k - <constant name="struts.objectFactory.spring.autoWire" value="name" />
, w$ U* K( L* l( X2 L3 s$ z" |' n - 4 N; X' e. i2 [" V: L
- <!-- 该属性指定整合spring时,是否对bean进行缓存,值为true or false,默认为true -->
; V6 @9 O- n& U" l& l# E+ k) d - <cosntant name="struts.objectFactory.spring.useClassCache" />
( U2 }3 A0 @3 }. Z -
2 Z" M' f2 \" c5 X1 a( [ - <!-- 指定类型检查,包含tiger和notiger -->
2 S. w% { {+ }( c - <cosntant name="struts.objectTypeDeterminer" value="tiger" />
. N b' I0 l" Q, V0 O -
' g3 \- ]& f: D! x! L0 n. m( T - <!-- 该属性指定处理 MIME-type multipart/form-data,文件上传 -->
! v: r0 g5 o! Z, ] h" P4 r - <constant name="struts.multipart.parser" value="cos" /> 4 q) a2 |6 S# T- D- e% _
- <constant name="struts.multipart.parser" value="pell" />
) H* J/ F* n- G/ s; i. ^4 p- Y4 Z - <constant name="struts.multipart.parser" value="jakarta" />
" @: d0 Y1 e/ m2 _ - ! b& z: V- {8 ?5 |/ q
- <!-- 指定上传文件时的临时目录,默认使用 javax.servlet.context.tempdir -->
" h3 _" m2 l# U0 D* [ U7 L0 p - <constant name="struts.multipart.saveDir" value="/tmpuploadfiles" />
5 u% h6 O9 ^5 S8 l, c: w9 p -
' ~+ _2 ~/ l6 B4 q/ j- t7 E - <!-- 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 --> 3 \3 E1 g! S% r+ y& v9 G3 g2 ?- w7 x
- <constant name="struts.multipart.maxSize" value="2097152" /> " q) M8 k3 ^ Q7 D5 N! G
-
; Y/ V3 X& V5 \/ z# }# z% v" X% T+ P - <!-- ; k ^+ b! K' V
- 该属性指定Struts2应用加载用户自定义的属性文件,该自定义属性文件指定的属性不会覆盖 ( H" `6 o4 X0 q% Z% @
- struts.properties文件中指定的属性。如果需要加载多个自定义属性文件,多个自定义属性文 0 q6 `. C5 }! E, ]( ~' {0 v! }
- 件的文件名以英文逗号(,)隔开。(也就是说不要改写struts.properties!) ! h0 n* O& T9 S4 I3 e
- -->
7 R) i+ ]; s; O h' ~, I" a; b - <constant name="struts.custom.properties" 6 T# j) G! Z, {
- value="application,org/apache/struts2/extension/custom" /> - a, v8 ?5 A' r( E" k
- ; B7 Y, K4 E8 s o6 N8 B X r
- <!-- 指定请求url与action映射器,默认为org.apache.struts2.dispatcher.mapper.DefaultActionMapper --> % V1 b9 f- ?' k! ?
- <constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" /> + X+ t" f# u6 L" E; n( O2 i7 `
-
d! K/ U3 [3 O# y ~- b/ m$ z/ h - <!-- 指定action的后缀,默认为action -->
# J/ a8 Q' N7 o2 W% ^6 ] - <constant name="struts.action.extension" value="do" /> $ f! G' C( S2 r
- ( L( H( O" k% i
- <!-- 被 FilterDispatcher使用指定浏览器是否缓存静态内容,测试阶段设置为false,发布阶段设置为true. -->
, b7 y' t- w/ z1 N2 | p - <constant name="struts.serve.static.browserCache" value="true" /> - }# `8 z7 _& Q) @
-
0 i' r2 o$ q( M/ t" L& u - <!-- 设置是否支持动态方法调用,true为支持,false不支持. --> $ r: H' s3 t ^6 ?8 m) B5 T2 ^
- <constant name="struts.enable.DynamicMethodInvocation" value="true" />
# b. Y' V9 U; g6 s: v' h -
9 r& x3 [% h U+ K! M - <!-- 设置是否可以在action中使用斜线,默认为false不可以,想使用需设置为true. -->
0 D3 Q3 T4 i. N" h' o0 d - <constant name="struts.enable.SlashesInActionNames" value="true" />
5 G1 e! c% d4 v' j -
+ Y( \1 a6 F8 H7 J - <!-- 是否允许使用表达式语法,默认为true. -->
0 ]7 g2 Y' i! U - <constant name="struts.tag.altSyntax" value="true" /> % r0 C7 R& f; K3 k5 k3 R: F+ [
- * c% O& w6 z6 Q8 H
- <!-- 设置当struts.xml文件改动时,是否重新加载 -->
' ^/ ^5 j3 I% ] - <cosntant name="struts.configuration.xml.reload" value="true" /> * T: k0 f0 ]# v" z3 w- x- V
- 4 {+ J8 x) b; L) I
- <!-- 设置struts是否为开发模式,默认为false,测试阶段一般设为true. -->
# O2 K' W, K* O' I6 Z2 L - <cosntant name="struts.devMode" value="true" /> * S: m: x+ v' B+ R$ |+ S
- ! }- C/ Q5 v# \- w
- <!-- 设置是否每次请求,都重新加载资源文件,默认值为false. -->
5 u$ B/ w. ?% `3 {, P - <cosntant name="struts.i18n.reload" value="false" /> 7 l% L8 C6 Q" m' A; C, i" a, \
- # s9 `: y% [' {* m
- <!-- 标准的UI主题,默认的UI主题为xhtml,可以为simple,xhtml或ajax --> - G7 {2 f: Z3 p) z/ N8 ?
- <cosntant name="struts.ui.theme" value="xhtml" />
$ R" N0 b) b* K! L3 I5 O, C: \ - " ]+ Y( v7 r7 r- J5 E
- <!-- 模板目录 --> ) J, g+ M0 s. N6 K* d/ g. W
- <cosntant name="struts.ui.templateDir" value="template" /> $ F$ B% W' f2 T7 r7 \& V
- # d& @* B4 U4 w6 A! c
- <!-- 设置模板类型. 可以为 ftl, vm, or jsp -->
3 s' @) E, h! a( J6 n% ^ - <cosntant name="struts.ui.templateSuffix" value="ftl" /> " Z4 Z! S6 r: g- m
-
; y& H* X5 I/ k& |- z$ V& s% ^ - <!-- 定位velocity.properties 文件. 默认velocity.properties --> 9 r! E+ v5 V) R
- <cosntant name="struts.velocity.configfile" value="velocity.properties" />
: ^3 g8 W0 s6 A- X; Q! k$ \ - 1 t! l# Z1 m/ S
- <!-- 设置velocity的context. --> 0 D/ }; ^0 s( y' o7 }
- <cosntant name="struts.velocity.contexts" value="...." />
, a4 `3 P+ u- r. J- p" W0 C -
3 ]0 m$ s. g; c% P - <!-- 定位toolbox -->
1 a, L% w9 i4 z& L& X3 E - <cosntant name="struts.velocity.toolboxlocation" value="...." />
+ w+ z! X4 P8 w& i: k$ O# Y) R( H -
3 e7 k7 E: d8 t( T0 o( L& y7 J+ W - <!-- 指定web应用的端口 --> $ V- N8 f/ o5 p
- <cosntant name="struts.url.http.port" value="80" /> 3 [# X' T* W) H3 T; [3 o% l
- 4 [7 U; v4 R, E/ s2 J* F4 X
- <!-- 指定加密端口 -->
1 L$ d: J0 `/ t/ s - <cosntant name="struts.url.https.port" value="443" />
" d! [( b$ C9 E3 j -
" h/ i# S- X/ \. K. J5 x6 K - <!-- 设置生成url时,是否包含参数.值可以为: none,get or all -->
! I/ E$ R3 o6 H# j, s - <cosntant name="struts.url.includeParams" value="get" />
- [7 F& Y$ f- s% V -
: Y" P: L1 C, e7 \! x2 O5 j - <!-- 设置要加载的国际化资源文件,以逗号分隔. -->
e4 N1 F2 q1 K0 Z - <cosntant name="struts.custom.i18n.resources" value="application" />
* k2 K4 W7 |" \" @* A0 d5 m$ I - ! s8 n) v# D8 T" |/ A
- <!-- 对于一些web应用服务器不能处理HttpServletRequest.getParameterMap(), + X9 Z6 o3 A9 E; x a* p$ M. L, u' W0 t
- 像 WebLogic,Orion, and OC4J等,须设置成true,默认为false. -->
4 Y% {9 l3 \/ `8 U! P - <cosntant name="struts.dispatcher.parametersWorkaround" value="false" />
, l8 A' m S) v0 ] -
( E% `% {; R5 R - <!-- 指定freemarker管理器 --> ! e8 \8 f2 {9 q/ _8 R/ f% G
- <cosntant name="struts.freemarker.manager.classname" value="org.apache.struts2.views.freemarker.FreemarkerManager" />
% {2 H3 C! f4 ^8 _ - ) m6 h; S$ g: `9 n2 [+ c4 W
- <!-- 设置是否对freemarker的模板设置缓存,效果相当于把template拷贝到 WEB_APP/templates. -->
+ C5 O# z' U7 @ - <cosntant name="struts.freemarker.templatesCache" value="false" /> 9 E8 e- I1 A! d
-
3 n8 Y( H; `; T7 C - <!-- 通常不需要修改此属性. --> , u' a6 G# K. {+ V% B: b) z; Z
- <cosntant name="struts.freemarker.wrapper.altMap" value="true" />
3 [+ o1 T4 P# G ? - ! _" Z& P T* Z. f" W' d3 r& M
- <!-- 指定xslt result是否使用样式表缓存.开发阶段设为true,发布阶段设为false. -->
9 A; r9 W1 b! C+ s - <cosntant name="struts.xslt.nocache" value="false" />
9 \, t6 j. B' c& F2 v+ H1 B - ) t9 t0 ~- j- X2 e8 k
- <!-- 设置struts自动加载的文件列表. -->
) U1 c: t" Z0 {7 p8 j* s1 \* ` - <cosntant name="struts.configuration.files" value="struts-default.xml,struts-plugin.xml,struts.xml" />
6 j* L& [5 |+ Q+ j6 o2 T -
( |* W5 |5 A8 f! e( H - <!-- 设定是否一直在最后一个slash之前的任何位置选定namespace. -->
# c' k4 Z+ t7 u ~2 R+ [+ Y - <cosntant name="struts.mapper.alwaysSelectFullNamespace" value="false" /> ! R0 g! w) @ ?, K, I# N* ^* f
- </struts>
" }- T a/ R! }" R/ h% |. O8 g - 4 J' `# `9 U0 `" B+ V0 z# W- t
-
2 r; E o* u/ V7 E m: O! R0 Y* Z - 2 N$ O' _5 ]1 b% j7 M1 i& F' m3 F) w
- <struts>
6 J; _, F+ ]/ }' j9 L; h6 \ - / h, K; H/ s) M& W3 S
- <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 -->
" G; h% h5 H: g2 [ Q - <include file="struts-default.xml"></include> 8 @/ l7 r- w! d* v2 M' E
- 9 {5 q4 b3 n8 c% v7 M1 l: z
-
& X8 m# }. Q% v9 L% Y- t9 Z, h - <!-- package提供了将多个Action组织为一个模块的方式 0 M7 h' ^! O) V8 k
- package的名字必须是唯一的 package可以扩展 当一个package扩展自
7 v( \6 H1 `( Z$ V, s - 另一个package时该package会在本身配置的基础上加入扩展的package " {( w4 m+ t$ L. E9 o2 q
- 的配置 父package必须在子package前配置 ; m: B; N F7 k) E& p
- name:package名称
9 Y4 y* y h6 o: @ - extends:继承的父package名称 : x: H) t! `2 i9 l5 V) a8 l. R
- abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
. i0 q" }6 {6 i: I# W0 a1 Q - namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
2 |- {& e1 I0 U+ v/ b$ |: m* { - -->
; e- x6 |. ~4 h7 P - <package name="com.kay.struts2" extends="struts-default" namespace="/test">
) k# A9 R1 S' ]) e: e - <interceptors> 3 \, |2 H! b/ l1 |- V% j
- <!-- 定义拦截器 E# u4 Z4 T! v7 p* {
- name:拦截器名称 3 Y2 X! j$ F3 I( B
- class:拦截器类路径
5 D, i% I! D6 Y( A2 _ - -->
( r% b5 S+ n* f: \; ] - <interceptor name="timer" class="com.kay.timer"></interceptor> & \" B# V4 u- |6 L
- <interceptor name="logger" class="com.kay.logger"></interceptor>
. f# k" y$ z" A( n" n/ | - <!-- 定义拦截器栈 --> 7 `/ M. a. D% e& d! c
- <interceptor-stack name="mystack">
( ^& X, ^ s; k; `( p" u# V - <interceptor-ref name="timer"></interceptor-ref>
8 d) _1 d4 X! g$ v5 m' ^$ i - <interceptor-ref name="logger"></interceptor-ref>
w" o, t' t4 J! v+ A0 \ - </interceptor-stack>
' h9 W- ~: k* d4 T - </interceptors>
5 e U0 w2 h t0 V7 l0 m -
2 `4 x2 p$ \9 b - <!-- 定义默认的拦截器 每个Action都会自动引用
3 c$ P! O7 c" Y- h0 W - 如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
/ Y' T) j. r9 h0 z/ e - <default-interceptor-ref name="mystack"></default-interceptor-ref>
+ t* I6 v5 ?) r7 {+ x7 V+ u/ R% S2 p - ' B# k$ G- l. k
-
5 Q/ F& g5 F' U* l - <!-- 全局results配置 -->
/ G% X, R1 |3 u8 O, g4 l5 L, x2 z - <global-results> 0 l' t C8 n n# t! O
- <result name="input">/error.jsp</result> ( n' q+ X8 b; g/ G# U# V3 X/ c
- </global-results> " H3 I f4 o/ l/ a9 H
-
/ M I% b- e0 d' R3 |! ?2 u, w8 x0 q - <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同)
4 i) C, _- R0 ^ - name:action名称
o9 e* w3 r& u) d9 w - class: 对应的类的路径 $ ?' S! N' L. i- S8 u
- method: 调用Action中的方法名
I# E% [- {* M$ a: { - -->
$ \( k! g9 R4 f$ [0 W9 w: c - <action name="hello" class="com.kay.struts2.Action.LoginAction"> 8 h& e+ N8 w$ o( `% p4 U2 h
- <!-- 引用拦截器
( T* j: z4 [5 v8 o) G - name:拦截器名称或拦截器栈名称
5 {# C: b C. f8 c- D/ K( I - --> 4 `7 v" i; s X; t
- <interceptor-ref name="timer"></interceptor-ref>
' H# A) F" D7 B$ E$ n -
, t% T5 c+ N8 {# S/ N6 B - <!-- 节点配置 # \/ v3 q$ V: J: P/ l; o
- name : result名称 和Action中返回的值相同 2 N4 X& K; d) _/ H/ N/ D
- type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher
2 m! W* e" C& f8 c - --> & g [3 O y8 g, l9 [
- <result name="success" type="dispatcher">/talk.jsp</result> 6 ]7 [% c- ~' }! h# h( b. R
- <!-- 参数设置
/ m+ v1 g, {9 t! g( P) y7 V - name:对应Action中的get/set方法 8 n4 ?6 s% m, A
- --> 4 O" b E* K6 f0 K
- <param name="url">http://www.sina.com</param> # e5 |) T2 y9 v6 D$ d
- </action> 7 g0 p1 R. f0 w
- </package>
/ Z' X8 Y1 M; g5 x4 g - </struts></b></font></font></font>
复制代码 这些是常用的struts配置文件常量,如果想把struts用好,就要懂得每个配置是怎么一回事.不光光需要学习技术,更要学习好理论知识.技术的高度是由理论知识的深度决定的. * C; w6 [1 @) P+ M0 p: t/ `
# i, s, [7 [8 t0 V: ^ |