一:struts2的配置文件有哪些,相对应的作用是什么? Web.xml:包含所有必须的框架组件的web部署描述符.Struts2主要加载前端控制器及初始化参数. . a y& _2 b7 \/ q" U, z, c4 Z5 y3 x
Struts.xml:定义应用自身使用的action映射,拦截器及常量,result/view定义.
' j0 e/ m8 b4 k! ?& NStruts-default.xml:定义框架自身用的action映射及result " k. X" Y: a* M9 q( r n
Struts-plugin.xml:struts插件使用的配置文件
V2 B; `9 K8 l1 aStruts.properties:定义框架自身的全局变量及框架属性. 9 ]! y# g( I0 v c& I
1 ^( T& x6 J; Y二:配置文件的加载顺序
# E4 o6 g# R; _1 w2 LStruts-default.xml-->struts-plugin.xml-->struts.xml-->struts.properties-->web.xml
, y9 `+ V( J6 i! b$ z+ s1 [注:若之前的配置文件设置过某一属性,则以后加载的配置文件对于相同的属性的设置,会覆盖之前的配置 三:Struts2常量的具体用法实例Xml代码 - <font color="rgb(0, 0, 0)"><font face="SimSun"><font size="2"><b><?xml version="1.0" encoding="UTF-8" ?> 2 T0 [ t, O& E9 C: F/ S1 F
- <!DOCTYPE struts PUBLIC
* ?. I x: W6 z$ @" _+ D q - "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 5 }% K* I8 t3 d1 |4 \. [7 k0 c
- "http://struts.apache.org/dtds/struts-2.0.dtd">
$ l2 P! r( q- t+ D3 u -
' w) t7 K5 e0 e - <struts> 2 v9 @- B) k9 X, i! m b
- <!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
7 V. M+ u* `! l8 R3 I - <constant name="struts.i18n.encoding" value="UTF-8" />
/ T. h, h) P5 A8 M' A9 _ w" D { -
6 Z; J5 j$ q) \- A - <!--
7 G0 {& z* ^+ b - 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。 " j: h" f* W1 f8 [
- 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 . y. j! ~3 ]. `! ?
- --> 1 W- }7 {7 E- }
- <constant name="struts.action.extension" value="do" /> " z X3 S/ R7 ]8 H/ t, K! d
- p. W) m. \, i! [
- <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
6 F( _5 X& S3 }* u - <constant name="struts.serve.static.browserCache" value="false" />
6 W0 O* [/ V c b/ N -
3 b0 _8 _* G! v& ?# c1 k% @ - <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 --> 1 H. S6 K4 X& F! [5 S, b
- <constant name="struts.configuration.xml.reload" value="true" /> 5 k' q8 C$ g" |3 X
-
# o; _) x6 J, w0 l, I - <!-- 开发模式下使用,这样可以打印出更详细的错误信息 --> 4 Y: X C% e' {, ?( D
- <constant name="struts.devMode" value="true" /> - G1 F& \$ S& b ?9 @4 e
-
$ ?, x' Q+ G0 @2 T4 F6 P" k - <!-- 默认的视图主题 --> + H. D* S! r( J5 I+ e
- <constant name="struts.ui.theme" value="simple" /> * H5 R( O) Y& ?0 \
-
* D& f- b& p' c - <!-- spring 托管 --> & G/ }, d8 g, L3 `
- <constant name="struts.objectFactory" value="spring" />
/ O6 {4 S5 L5 v0 {8 T. ]% }: J - : F; z7 h! W/ w! T
- <!-- ! k6 j- O" O& E, y/ l2 G
- 指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration 3 L/ Z8 { m* T0 _ W
- 开发者可以自定义配置文件管理器,该类要实现Configuration接口,可以自动加载struts2配置文件。
6 Z+ B/ M8 B8 T+ l - -->
: @0 K b+ i0 }% A+ z a8 d( ^' r0 Q - <constant name="struts.configuration" " X2 R* ?* E* I5 H
- value="org.apache.struts2.config.DefaultConfiguration" />
) A9 m" t7 J. w4 @. { -
5 R. k, b( w& X, N - <!-- 设置默认的locale和字符编码 -->
4 H' N" h+ r- ^% R - <constant name="struts.locale" value="zh_CN" /> ; a) k) J' E! j. n7 T7 B
- <constant name="struts.i18n.encoding" value="GBK" />
% G5 L) F( s" s* f& e& d9 R3 h -
, ^0 ^# {5 N ]7 d& {8 K. b - <!-- 指定Struts的工厂类 --> * Q: I* M4 m3 G6 u8 o
- <constant name="struts.objectFactory" value="spring"></constant>
. P6 h1 @( z+ R N+ | w -
3 n0 \! {/ }$ N1 F - <!--
1 ?4 E! t0 i/ s7 |8 N8 ^/ y' S! E - 指定spring框架的装配模式,装配方式有: name, type, auto, and constructor (name
% a8 I5 g3 u4 A3 S5 b) j/ l - 是默认装配模式)
) L3 Z1 [% Q. i0 g - -->
" @+ m2 _! q2 P4 R1 {8 {$ u3 m - <constant name="struts.objectFactory.spring.autoWire" value="name" />
' ~, e) t# |9 @: W - # I7 W' c; v& h6 y
- <!-- 该属性指定整合spring时,是否对bean进行缓存,值为true or false,默认为true -->
/ B$ E4 O& G$ O6 A, ?7 M* C - <cosntant name="struts.objectFactory.spring.useClassCache" /> ! m$ g5 Z' n, G; ]* E
- |7 k, @& p1 H( b: f
- <!-- 指定类型检查,包含tiger和notiger -->
3 M5 Y1 f$ v/ D1 _ - <cosntant name="struts.objectTypeDeterminer" value="tiger" /> 7 D$ f9 m) F2 k- f9 f2 z
-
9 e+ k; S* }, x - <!-- 该属性指定处理 MIME-type multipart/form-data,文件上传 -->
1 p$ c. ^; x4 w1 f4 H G5 z% V - <constant name="struts.multipart.parser" value="cos" /> " T( L, a! b4 Z; t* c& H2 n
- <constant name="struts.multipart.parser" value="pell" />
' @( Y( Z5 Z6 T - <constant name="struts.multipart.parser" value="jakarta" /> & F) c6 j. O0 d B( ^
- , H# ?$ N5 R7 u# F. W2 M
- <!-- 指定上传文件时的临时目录,默认使用 javax.servlet.context.tempdir --> $ s2 b6 q- ]& @3 M' f5 ]& ^7 ~; V
- <constant name="struts.multipart.saveDir" value="/tmpuploadfiles" /> 8 ^" N, k) |+ N) ~4 n h# O k# @
-
: T. W1 w M/ H5 A% h, L - <!-- 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 -->
2 X F# x5 D! `4 @ - <constant name="struts.multipart.maxSize" value="2097152" /> & U- `: C4 j3 A
- / d) _ G/ V; M' {* |9 j
- <!--
0 s, v6 p% \1 l- F+ o+ U$ \* ? - 该属性指定Struts2应用加载用户自定义的属性文件,该自定义属性文件指定的属性不会覆盖 . h+ @" V9 X ~$ _$ t
- struts.properties文件中指定的属性。如果需要加载多个自定义属性文件,多个自定义属性文
$ M( |/ I5 e1 e2 V0 k - 件的文件名以英文逗号(,)隔开。(也就是说不要改写struts.properties!) % S# ^) ?: K- _0 U) I( A
- --> 2 [. N0 y$ b( x; |0 |0 R6 O$ E$ g
- <constant name="struts.custom.properties" 4 U$ x" j" l/ j% O/ T, y
- value="application,org/apache/struts2/extension/custom" />
6 N1 Y3 N1 w5 {+ L -
, l% G9 t8 h/ Q8 [ - <!-- 指定请求url与action映射器,默认为org.apache.struts2.dispatcher.mapper.DefaultActionMapper -->
0 \% q1 { m% T) _$ k - <constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" />
3 q# I3 R2 d G5 k -
1 u/ {! m: b+ ~8 p& i. N - <!-- 指定action的后缀,默认为action --> 3 V. a( t" V: b+ `8 I3 U u
- <constant name="struts.action.extension" value="do" />
$ p( S! b; T* [8 n4 ?, v -
) G, Y7 t! S( h( A - <!-- 被 FilterDispatcher使用指定浏览器是否缓存静态内容,测试阶段设置为false,发布阶段设置为true. --> ! L6 o/ ^+ R0 p
- <constant name="struts.serve.static.browserCache" value="true" />
3 c) X5 b, q1 F. L -
9 V5 ?& P1 x$ E _- s- N" A: w - <!-- 设置是否支持动态方法调用,true为支持,false不支持. --> 7 d' t: U k# ~/ ]8 s1 _
- <constant name="struts.enable.DynamicMethodInvocation" value="true" /> ' [, w, E2 g. W! w2 N
-
; n; W/ }" S1 C' g# p! N( @9 n" W - <!-- 设置是否可以在action中使用斜线,默认为false不可以,想使用需设置为true. -->
3 y( g8 N. j9 `1 H9 P5 x - <constant name="struts.enable.SlashesInActionNames" value="true" />
% {( E' o) |0 K1 p) N) }; y -
4 @) f2 p1 z, x1 b P - <!-- 是否允许使用表达式语法,默认为true. --> 6 ^: S' {$ v2 M! a4 r* \
- <constant name="struts.tag.altSyntax" value="true" /> / f2 L" _/ i: D; W7 h; [8 k
-
! Y6 H ~+ H% K1 \( f" w - <!-- 设置当struts.xml文件改动时,是否重新加载 -->
7 S4 u$ Q! |9 Y! l& w - <cosntant name="struts.configuration.xml.reload" value="true" />
. R/ D: `& I) U, g. t! C - 4 j, G# ~) P3 [4 x4 ~
- <!-- 设置struts是否为开发模式,默认为false,测试阶段一般设为true. -->
; f# x3 [8 t( F8 L- n9 Q - <cosntant name="struts.devMode" value="true" /> 4 T9 v+ V1 U+ `2 I4 ?1 C" Z4 X
-
$ t/ J, ]" O* ^& X" d5 w - <!-- 设置是否每次请求,都重新加载资源文件,默认值为false. --> 7 h# M) |* Z2 K! s( P r! X
- <cosntant name="struts.i18n.reload" value="false" />
& d4 m7 d5 e5 V% g" I' v -
6 V$ J' Z; U" o# I+ p2 ? - <!-- 标准的UI主题,默认的UI主题为xhtml,可以为simple,xhtml或ajax --> % i. L2 E, z- ?, Y3 M3 O
- <cosntant name="struts.ui.theme" value="xhtml" />
% j& |) D1 r' o$ E$ @ - V# ]7 r! ]( a% ?
- <!-- 模板目录 --> 5 @+ z- G# o" q. [! [
- <cosntant name="struts.ui.templateDir" value="template" />
/ Q, B. D$ J7 g5 m, X% M -
) z3 K$ a0 O+ V9 C+ V, ? - <!-- 设置模板类型. 可以为 ftl, vm, or jsp -->
, I$ B6 j2 A3 j/ L - <cosntant name="struts.ui.templateSuffix" value="ftl" />
]7 n, n j: E3 w( c -
1 a' Z8 H. j/ [. }4 q - <!-- 定位velocity.properties 文件. 默认velocity.properties -->
' ~( c" [; A# \+ X* N8 k2 z - <cosntant name="struts.velocity.configfile" value="velocity.properties" /> 3 `. n3 ]8 ^( _0 p+ {
-
+ R3 M" y3 u, w - <!-- 设置velocity的context. -->
' f$ _; e ] o5 u. ~ - <cosntant name="struts.velocity.contexts" value="...." />
2 l0 k& f3 [/ f+ @; f* U - ) a) B. J" A4 x6 x: I
- <!-- 定位toolbox --> 6 v8 o, i) T- H& V. R
- <cosntant name="struts.velocity.toolboxlocation" value="...." /> 8 b$ q; K/ q( a, I. U% M5 f
- [! B& G! v9 Z+ s: q0 l0 A: x) T2 G
- <!-- 指定web应用的端口 -->
5 {1 `/ C! n2 t S% I - <cosntant name="struts.url.http.port" value="80" />
0 T% f/ P5 L0 d - 9 b" ], g2 {4 W( f
- <!-- 指定加密端口 --> ( w, R3 Z, N9 m: f! C8 S
- <cosntant name="struts.url.https.port" value="443" /> $ d+ `/ e: Y' v: h
- 7 a# y: \8 B. r- M" u( o$ ~
- <!-- 设置生成url时,是否包含参数.值可以为: none,get or all --> 6 k/ u2 U0 g! ^& \
- <cosntant name="struts.url.includeParams" value="get" /> # u t% @) j7 h% ]. s/ l' I
- 7 l2 h$ F, a4 S
- <!-- 设置要加载的国际化资源文件,以逗号分隔. -->
2 {% d* z0 X2 a - <cosntant name="struts.custom.i18n.resources" value="application" /> 0 S1 I! M" g( k: A# P4 o
-
- s+ E {* @0 R* b% x - <!-- 对于一些web应用服务器不能处理HttpServletRequest.getParameterMap(),
- k: y. u3 m+ [$ `. P+ ` - 像 WebLogic,Orion, and OC4J等,须设置成true,默认为false. -->
( `2 k, y; H: n. E - <cosntant name="struts.dispatcher.parametersWorkaround" value="false" /> ]/ z" C8 J% W% j9 ?9 @: Q6 \: ]
-
& B4 {+ H7 Q6 \+ D7 s1 k) a6 ?' z - <!-- 指定freemarker管理器 --> 1 e) r% C- }* q% u
- <cosntant name="struts.freemarker.manager.classname" value="org.apache.struts2.views.freemarker.FreemarkerManager" /> & g$ b/ u" m; Z2 `" c& B
- " y) T* D' t% R$ N9 ~/ p2 J' J, i
- <!-- 设置是否对freemarker的模板设置缓存,效果相当于把template拷贝到 WEB_APP/templates. --> 3 k; E" Z4 G( g1 F4 s4 Z4 \0 t2 ~
- <cosntant name="struts.freemarker.templatesCache" value="false" />
5 H# |+ U" e2 u; I- C - 7 I; h% J+ L- e9 x$ X: D
- <!-- 通常不需要修改此属性. -->
9 L/ c# L5 m( V - <cosntant name="struts.freemarker.wrapper.altMap" value="true" />
+ W. \; M$ `" ] - % W; s& o% z" ?, C
- <!-- 指定xslt result是否使用样式表缓存.开发阶段设为true,发布阶段设为false. --> % o- B9 K- L* T! Y" `0 H
- <cosntant name="struts.xslt.nocache" value="false" /> ! w% Z0 s! e( o% I
- ' h4 s0 P- Z5 V
- <!-- 设置struts自动加载的文件列表. -->
+ I7 }" c7 s, Y - <cosntant name="struts.configuration.files" value="struts-default.xml,struts-plugin.xml,struts.xml" /> 6 E) M; S& ~) G; J1 y
-
" u* b! G, H1 e - <!-- 设定是否一直在最后一个slash之前的任何位置选定namespace. --> 7 C: B$ _2 P! n9 O) V$ s. E* Q
- <cosntant name="struts.mapper.alwaysSelectFullNamespace" value="false" /> ! |1 O- e {* E( D5 i4 j1 n3 x
- </struts> , Z* f( j- X" E0 Q f: s7 i9 K
- 0 j/ \, N- {' ~+ C/ u
- - |& u0 k- n S, r$ C3 h
-
) Z5 u6 s( e& e- s8 ~- j - <struts>
- `5 E+ r" p2 i: G; {- L; R ]$ I -
2 T1 i, R4 d. W% i$ P6 l - <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 --> 5 p/ g( d1 S0 g6 Y t( \
- <include file="struts-default.xml"></include>
8 }! q7 R/ ]: E" Z( ~ -
# ~( K2 t6 Z6 L! s - + L K( w, L5 _0 Y
- <!-- package提供了将多个Action组织为一个模块的方式
/ w& n! ?& M# |1 R - package的名字必须是唯一的 package可以扩展 当一个package扩展自
W" Q) [0 o8 C! K# j% o# l" m1 r - 另一个package时该package会在本身配置的基础上加入扩展的package
! E0 {4 \" f/ p3 f( e1 Q/ [ S - 的配置 父package必须在子package前配置
+ X& X: k; E# V9 y8 V7 V - name:package名称
& _2 L) |% `0 s8 q8 d' D5 m( e - extends:继承的父package名称
3 Y/ V0 K) M! G - abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
! D! g. M( d1 \% U5 N/ m% r - namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
' h& @0 S* ]4 I0 @ - --> / D' `. i4 \% A( W
- <package name="com.kay.struts2" extends="struts-default" namespace="/test"> 5 f2 {3 _; M" L8 F$ v E9 X2 g1 q
- <interceptors> $ X8 J+ y+ T% A5 D& k. m+ q4 ^/ [4 @% X
- <!-- 定义拦截器
4 V2 t3 u1 j& M# Q7 w# l9 o3 N6 l - name:拦截器名称
/ B1 L3 y4 a1 I0 g2 \5 l - class:拦截器类路径 " K, K# E- T0 U7 L) N
- -->
" @8 O& q" A6 y% B; R - <interceptor name="timer" class="com.kay.timer"></interceptor> / ]. b; o/ s" h% \! f+ R
- <interceptor name="logger" class="com.kay.logger"></interceptor> " a% ~3 H/ y& {8 c. _
- <!-- 定义拦截器栈 --> # P9 t0 o) n( \. T8 |, Y+ D
- <interceptor-stack name="mystack">
3 `, T# r: s) |6 `( `6 u6 I' s - <interceptor-ref name="timer"></interceptor-ref> * h0 r9 f; o, \% k0 H
- <interceptor-ref name="logger"></interceptor-ref> 2 C7 c, l! c$ R9 v
- </interceptor-stack>
9 Q+ m. W% P$ [: F6 D: g* \8 ? - </interceptors>
3 f6 Y$ J5 R8 _ @ - 1 v6 Q* Q! o; _/ ?7 D( u" i
- <!-- 定义默认的拦截器 每个Action都会自动引用 % z9 Y' P7 n9 W$ t. i
- 如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
# U9 {+ l" ?* b" U( n& U7 D - <default-interceptor-ref name="mystack"></default-interceptor-ref> / v* A2 M# p+ r0 ~, `3 m
- . }$ R: s; m$ z9 b! m" i% ?) K
- ! ?% L, `- U% V9 ^$ \: q
- <!-- 全局results配置 --> & h. S- B1 i9 ]; N: C& T b
- <global-results>
+ c4 p+ q6 S( ~; M, l; W - <result name="input">/error.jsp</result> ( P& Z7 d8 f( q! e: ?$ y3 o
- </global-results> - H1 Y, D4 J6 n3 A* U* y# B4 v4 J
-
* p% D+ q1 ]0 [4 o - <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同) ; i) r1 ^6 M+ a( \2 v- ~4 ~! }
- name:action名称 5 e& V1 n* [: f
- class: 对应的类的路径 6 `. x+ [2 G& p
- method: 调用Action中的方法名
) M' ^0 j; l, o2 F8 C - --> 3 H1 X% H; Q1 [! B
- <action name="hello" class="com.kay.struts2.Action.LoginAction"> 9 T0 a3 J, T# L0 U6 |3 R) d$ `2 y
- <!-- 引用拦截器 7 l$ d, y/ `' q7 A0 x9 G* [
- name:拦截器名称或拦截器栈名称 . ?$ L6 X5 W3 y6 [3 g
- --> * T6 ^, c0 V& F& t# D R
- <interceptor-ref name="timer"></interceptor-ref>
) Q. I E2 S! m8 c: g -
3 w9 `; @4 S/ X' J - <!-- 节点配置 4 T! [4 d6 Z9 a7 {* J& X
- name : result名称 和Action中返回的值相同 2 V$ {/ X3 T5 \
- type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher & f( j+ ^+ Y% H8 }% p8 Q
- --> 9 |+ @+ m( B: x7 M, b1 Q) T
- <result name="success" type="dispatcher">/talk.jsp</result> 4 a* k6 \) ~/ m9 ?! [, t
- <!-- 参数设置 0 u4 q2 i# m$ m5 e) w6 t; H; k
- name:对应Action中的get/set方法 ' t6 g, @0 W( U! k, N) C4 M
- -->
! {+ f, |) M: J2 k0 T - <param name="url">http://www.sina.com</param>
+ k( {, A2 v: C% N - </action>
: h9 [# `$ F* M8 h0 \# y - </package>
: s& n0 P# J+ I, N - </struts></b></font></font></font>
复制代码 这些是常用的struts配置文件常量,如果想把struts用好,就要懂得每个配置是怎么一回事.不光光需要学习技术,更要学习好理论知识.技术的高度是由理论知识的深度决定的.
% v: j: }% W' Q S g% l6 u3 x* P
9 O x9 P8 ^% Q: |3 D) D* a" @3 h% a |