一:struts2的配置文件有哪些,相对应的作用是什么? Web.xml:包含所有必须的框架组件的web部署描述符.Struts2主要加载前端控制器及初始化参数.
: o1 b3 G- G, R: o* h6 Q' dStruts.xml:定义应用自身使用的action映射,拦截器及常量,result/view定义.
. K% t8 ]6 |: lStruts-default.xml:定义框架自身用的action映射及result / X' I$ C6 W7 U' Z) M$ S
Struts-plugin.xml:struts插件使用的配置文件
! ^# |, |1 V7 R) s- HStruts.properties:定义框架自身的全局变量及框架属性. ) c; P8 W% s; \
6 l- I; O( M$ T% e# C5 N二:配置文件的加载顺序 3 y3 \9 n, ]& ?8 r5 v+ B3 z E" C
Struts-default.xml-->struts-plugin.xml-->struts.xml-->struts.properties-->web.xml
! Q% q8 j3 m1 k$ ~注:若之前的配置文件设置过某一属性,则以后加载的配置文件对于相同的属性的设置,会覆盖之前的配置 三:Struts2常量的具体用法实例Xml代码 - <font color="rgb(0, 0, 0)"><font face="SimSun"><font size="2"><b><?xml version="1.0" encoding="UTF-8" ?> ; ^- }( c1 T! e. w( j [
- <!DOCTYPE struts PUBLIC
, `8 _; S$ t$ |) l* @) m0 c - "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" : v, S/ X& z @1 H+ W6 a% o
- "http://struts.apache.org/dtds/struts-2.0.dtd"> 4 n! {5 U5 j! q) ]' h9 [6 n% A3 W* x
- + Y9 i* l a. t& L
- <struts> $ {; E, U2 f9 \. a' m/ r y
- <!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
t# r/ S3 l S0 T5 w5 ~7 t - <constant name="struts.i18n.encoding" value="UTF-8" />
0 g& V; ^) P. X4 a* O0 I - 5 `4 n. v7 A" g- ?" A
- <!-- # o( X" E* F/ c8 v! C* R5 Y' A) h
- 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
6 R& F% C1 y; L- G) O9 p - 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。
& [% c; k; p7 g5 S$ c4 b6 Z: H' k - --> D6 `( c$ c0 o
- <constant name="struts.action.extension" value="do" />
+ U9 ?: {) {- A* Y3 q2 z -
* R& \$ e* _% s9 W3 _$ Y/ c+ y' \ - <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
) R, d4 U2 `/ ?3 j* C- C# M - <constant name="struts.serve.static.browserCache" value="false" />
3 Q! C/ ~6 g+ |5 J -
; K6 V! j& ^8 s2 S - <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
4 v* r5 p" }! m3 L - <constant name="struts.configuration.xml.reload" value="true" /> % X1 d* i% d/ E D) S
- ! \$ J e1 U# o1 x3 A9 G) y/ W
- <!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
& f8 b% k5 ]) i3 ] - <constant name="struts.devMode" value="true" />
e+ \, G: ]1 f -
0 S: ?) u0 W2 `( V0 | B* Y - <!-- 默认的视图主题 -->
& b2 C1 N) t+ x# s1 v% } - <constant name="struts.ui.theme" value="simple" />
/ p9 g( ?( G7 g/ @ -
9 b4 l! [1 C# E8 b k1 s5 p- Q - <!-- spring 托管 -->
1 s$ d3 j# k; h7 V F - <constant name="struts.objectFactory" value="spring" />
1 }) Q( P: e6 U: K# r. s6 @. U1 R, [ - 2 A( b, D! @1 j) }
- <!--
, _& T) K1 W& o6 y1 I - 指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration
9 \4 c% Y* G& r+ B( L' G( K8 ^ - 开发者可以自定义配置文件管理器,该类要实现Configuration接口,可以自动加载struts2配置文件。 5 d2 R- P. J# G, u
- -->
2 ^) u4 d; ?( P" ^+ ~ - <constant name="struts.configuration" & G7 e3 R1 h' J2 D
- value="org.apache.struts2.config.DefaultConfiguration" /> 7 j/ V5 y, y* s4 f
- % y; Y1 F5 o( j# Q1 W
- <!-- 设置默认的locale和字符编码 -->
' k0 C y3 P+ j+ U' z, E5 L - <constant name="struts.locale" value="zh_CN" />
5 w, j' O% J( L6 q' _ - <constant name="struts.i18n.encoding" value="GBK" />
& d2 N0 M; c" X -
1 {5 d& \3 J, i4 z5 o - <!-- 指定Struts的工厂类 -->
7 c3 @, ?/ d( ?! ?$ D - <constant name="struts.objectFactory" value="spring"></constant> 9 V, _* o2 E+ ?
-
% k+ k7 A$ H* p* {/ O, H - <!--
) r& y$ \! t; b* {! |8 i - 指定spring框架的装配模式,装配方式有: name, type, auto, and constructor (name " r; b3 I3 {4 r; w
- 是默认装配模式)
% `; ~- B) `; A3 `3 ` - --> , e. D% J* [/ B# Q9 J; X
- <constant name="struts.objectFactory.spring.autoWire" value="name" /> + ^. ]: M5 o9 ]" x% j6 \3 p
- " \5 E2 T0 x* e1 p) O! R Z
- <!-- 该属性指定整合spring时,是否对bean进行缓存,值为true or false,默认为true -->
4 S6 S0 K; U% j5 X: x' {. F3 q - <cosntant name="struts.objectFactory.spring.useClassCache" />
7 {3 L7 ~, `8 ] - 8 {5 j1 g+ A2 ?# g. q
- <!-- 指定类型检查,包含tiger和notiger -->
2 b+ T+ U) M4 I' l - <cosntant name="struts.objectTypeDeterminer" value="tiger" /> 7 a( D& K/ a! \& G7 P2 E- \8 n5 t
-
' {& e: {( Z$ V0 \3 ]' |/ I" F - <!-- 该属性指定处理 MIME-type multipart/form-data,文件上传 -->
f' }. z7 Y0 U3 E3 |$ R7 |3 K - <constant name="struts.multipart.parser" value="cos" /> 9 `& P2 r& c: C0 ^
- <constant name="struts.multipart.parser" value="pell" />
. A8 I3 s. Y) y+ [) t- c; J* e' e- Z- p - <constant name="struts.multipart.parser" value="jakarta" /> - @; F3 {; o0 I1 i/ b" F
- * j" |, ^$ u" v2 v# X* d
- <!-- 指定上传文件时的临时目录,默认使用 javax.servlet.context.tempdir --> " ^+ j. j0 o: b
- <constant name="struts.multipart.saveDir" value="/tmpuploadfiles" /> 0 \7 s$ T2 S9 N' e
-
; n" P2 b0 T8 x. p - <!-- 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 --> - g5 f* \/ ~9 [0 u* f l
- <constant name="struts.multipart.maxSize" value="2097152" /> " k7 S6 E; X: c N0 v" n% B: v4 D0 }
- + Q1 q9 R' y: G3 p3 `; }3 }$ N
- <!--
4 ?) u* a* F: j' D" i - 该属性指定Struts2应用加载用户自定义的属性文件,该自定义属性文件指定的属性不会覆盖 - B. E0 x$ G+ s: N- L# `% y7 K
- struts.properties文件中指定的属性。如果需要加载多个自定义属性文件,多个自定义属性文
' z* M) V4 e: b* G - 件的文件名以英文逗号(,)隔开。(也就是说不要改写struts.properties!)
# ?! a3 j; Z, S& d - --> : Q3 l4 A: V# g }4 p# V' Z
- <constant name="struts.custom.properties" * ^' v$ z$ Q. D9 H, [
- value="application,org/apache/struts2/extension/custom" /> 3 \4 ]' u+ C! C! Y% F3 q2 S
-
+ k+ F# C! f2 f$ T- K. E% G - <!-- 指定请求url与action映射器,默认为org.apache.struts2.dispatcher.mapper.DefaultActionMapper -->
( J5 r. H/ _+ m; T - <constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" />
; a% I0 [0 ?9 i0 i w' l - # \5 K/ }) k7 g( ]3 i0 K
- <!-- 指定action的后缀,默认为action -->
+ e# |0 ~6 i; A$ {( r- R - <constant name="struts.action.extension" value="do" />
* {* Y7 k5 u$ p: e$ l -
) h9 M7 m3 h) W - <!-- 被 FilterDispatcher使用指定浏览器是否缓存静态内容,测试阶段设置为false,发布阶段设置为true. -->
/ _6 k* F$ w% w - <constant name="struts.serve.static.browserCache" value="true" />
6 h& l- }* V# U, u- ?7 g0 \2 p -
5 I( e' S3 w$ U - <!-- 设置是否支持动态方法调用,true为支持,false不支持. -->
* Z- C: P3 j ~" ~9 z0 X. C5 }* E. {# O - <constant name="struts.enable.DynamicMethodInvocation" value="true" />
% o' G l* d6 U1 a4 [ -
. `9 `! s& p3 O - <!-- 设置是否可以在action中使用斜线,默认为false不可以,想使用需设置为true. -->
/ t0 c; P& N% q" j) z q - <constant name="struts.enable.SlashesInActionNames" value="true" />
1 s! ]* p# ~6 q0 N9 Z. b - - N5 u) s6 d2 h7 ?; Q: B
- <!-- 是否允许使用表达式语法,默认为true. --> 5 Z1 d1 o8 f$ ?, n: d7 r2 ^
- <constant name="struts.tag.altSyntax" value="true" />
, Q4 P/ S# ~6 D! ^3 T -
4 R1 G H( G% p' E - <!-- 设置当struts.xml文件改动时,是否重新加载 -->
) ?0 u: t9 P$ w& |1 g5 ? - <cosntant name="struts.configuration.xml.reload" value="true" /> ' u6 v8 T) ^* D7 w2 T% p
- $ r: T; h& v2 U$ z8 x6 v
- <!-- 设置struts是否为开发模式,默认为false,测试阶段一般设为true. -->
! p. u( c$ K9 c3 d - <cosntant name="struts.devMode" value="true" />
$ ^0 v% u: U0 B - * M: M% g+ f6 Q k4 U3 m
- <!-- 设置是否每次请求,都重新加载资源文件,默认值为false. -->
+ i3 D) I! ~8 A* V! V, h: O3 x - <cosntant name="struts.i18n.reload" value="false" />
# O8 \5 z7 { p9 |5 { - $ e8 Y1 S K$ J7 A7 R6 j) r5 o
- <!-- 标准的UI主题,默认的UI主题为xhtml,可以为simple,xhtml或ajax --> 1 o( A0 o$ V( H7 P
- <cosntant name="struts.ui.theme" value="xhtml" />
2 Z# H: l& ?6 ~2 q - 3 y: L' G6 u/ H9 W1 ~. s+ D: Q
- <!-- 模板目录 --> 9 c% F* Z& U1 c7 W0 b
- <cosntant name="struts.ui.templateDir" value="template" />
2 {: }. G4 H0 f2 E4 X/ z3 C/ o -
7 V. P0 t' _( R% l& o, _; B - <!-- 设置模板类型. 可以为 ftl, vm, or jsp -->
( m5 o4 Q1 U; ] x3 ? - <cosntant name="struts.ui.templateSuffix" value="ftl" />
3 @; h' S- g$ M, S - 5 J; ~5 B+ R. w0 J8 _. v
- <!-- 定位velocity.properties 文件. 默认velocity.properties -->
) N& g' y7 r, O, ?. h+ ?3 q - <cosntant name="struts.velocity.configfile" value="velocity.properties" />
, ~. d) }7 @# I - + ]& w2 a" ^+ H# O
- <!-- 设置velocity的context. --> 2 m4 n8 @: Q7 q1 y: s5 a0 }. b: {
- <cosntant name="struts.velocity.contexts" value="...." /> ) ~% p& r3 l2 K" O9 G# d+ n( |
-
+ s2 @- J) l9 S3 H - <!-- 定位toolbox --> 4 p* t* d4 }7 O, [) Q0 f
- <cosntant name="struts.velocity.toolboxlocation" value="...." />
" S, X7 s( t; @$ g- G( K2 Q8 y3 a - 7 m8 b, x$ W- E' Y6 s" B7 h x
- <!-- 指定web应用的端口 --> : f0 C# t# o' K6 c0 @! P9 M
- <cosntant name="struts.url.http.port" value="80" /> & Z& P# M# E: t
- 4 o! b& M2 t+ v# z$ @, a
- <!-- 指定加密端口 -->
/ r( o+ a5 H2 I: \2 Y$ M - <cosntant name="struts.url.https.port" value="443" />
) P- E! N& x/ t) H1 z2 v -
+ G. g: q S/ L6 u/ e+ a - <!-- 设置生成url时,是否包含参数.值可以为: none,get or all --> 8 C( S" W# b2 O7 Y" \) J
- <cosntant name="struts.url.includeParams" value="get" />
7 a9 e6 k; g7 M& \ - ! O2 V" r- i# X, k7 H1 m3 y
- <!-- 设置要加载的国际化资源文件,以逗号分隔. -->
$ g6 {) {7 q% b+ ^ - <cosntant name="struts.custom.i18n.resources" value="application" /> , ~5 A- D1 x& ^3 J/ F
-
' Q! N2 s# a& t' ` - <!-- 对于一些web应用服务器不能处理HttpServletRequest.getParameterMap(),
) H, }3 d# ]4 ^5 K - 像 WebLogic,Orion, and OC4J等,须设置成true,默认为false. --> . a5 [7 D3 |8 I# {$ ~5 E& v) R
- <cosntant name="struts.dispatcher.parametersWorkaround" value="false" /> / Q# g+ T" a: t
- ( ~2 \- n/ U8 ~( U- P1 T
- <!-- 指定freemarker管理器 --> 3 o$ q& A' W! r, x% M) l0 r
- <cosntant name="struts.freemarker.manager.classname" value="org.apache.struts2.views.freemarker.FreemarkerManager" />
- S- |9 L0 ]* t1 @ - ( D1 N, o" H# F6 a0 _7 r+ A4 G
- <!-- 设置是否对freemarker的模板设置缓存,效果相当于把template拷贝到 WEB_APP/templates. --> & L( d5 @1 y. r; F7 l2 z4 `8 w+ W9 N
- <cosntant name="struts.freemarker.templatesCache" value="false" /> : Y" q+ a* x3 g9 X: e5 `6 P* \* v
-
& A4 _/ F% p8 Q0 ~6 h* i; o - <!-- 通常不需要修改此属性. --> . w5 C0 M6 e9 |, B& `# D
- <cosntant name="struts.freemarker.wrapper.altMap" value="true" />
5 ~7 d' u6 m7 H" i( r' i. P -
* s" m$ K2 X! ~ - <!-- 指定xslt result是否使用样式表缓存.开发阶段设为true,发布阶段设为false. --> 2 [" i& z7 p2 b2 M
- <cosntant name="struts.xslt.nocache" value="false" />
) w5 R( [( I4 d( J) x - 7 n! ^; u/ L* ?- w% _9 a# E0 L3 X# r$ s+ J
- <!-- 设置struts自动加载的文件列表. -->
- S; _; f- @9 q - <cosntant name="struts.configuration.files" value="struts-default.xml,struts-plugin.xml,struts.xml" />
( m m7 [7 E# @7 v$ w -
9 z P- `- `7 T* }3 o - <!-- 设定是否一直在最后一个slash之前的任何位置选定namespace. -->
: R/ ^) y3 S9 E" V I - <cosntant name="struts.mapper.alwaysSelectFullNamespace" value="false" />
# r, f# e/ {1 P P, c0 H( L - </struts>
$ N6 l& N6 ]) I8 b -
1 K$ Q- E1 q4 x# P6 c5 O* g - 8 ^* E0 H* q4 e$ I
-
1 m4 @5 g/ m4 q0 s! y - <struts>
, O/ x2 G. z& c7 `, a4 v! Q - . I9 N: {+ t9 D* W, X0 e$ f
- <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 -->
- Z# z7 ]* W3 w N* e9 d5 V# T - <include file="struts-default.xml"></include>
! o7 D$ A1 e1 B$ ]* E9 J& v7 M2 X - + h! t% s/ `9 V2 B
- % @6 e$ S' V7 z$ R
- <!-- package提供了将多个Action组织为一个模块的方式
+ L: R* B- p+ c - package的名字必须是唯一的 package可以扩展 当一个package扩展自
% E' z5 P3 W* h$ B, q1 ] - 另一个package时该package会在本身配置的基础上加入扩展的package 6 ~3 ~* W- G; Q
- 的配置 父package必须在子package前配置 ( M! P% b* ] \! O2 P1 u4 d6 a& N
- name:package名称
9 Z) J% ]* Z: F+ i# ^6 X- V% f+ Z - extends:继承的父package名称 % l& _" `& p* S
- abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false & `. M% I* v4 `* }
- namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
! `. g4 ]% ?) l2 r# Y6 b - --> ! {5 K- l' ~+ j4 ]9 i3 j7 A9 s5 S5 \
- <package name="com.kay.struts2" extends="struts-default" namespace="/test">
" m0 V) _ U' g- d( y; I9 ` - <interceptors>
' G3 H7 L# j8 w8 W0 D - <!-- 定义拦截器 f+ o; [& f& X7 i# N8 E. c
- name:拦截器名称 8 _1 T5 i' i- R3 w5 a1 s, @
- class:拦截器类路径 : j J( A5 e; [/ j, T" M
- -->
* w* z, J# e5 B* h - <interceptor name="timer" class="com.kay.timer"></interceptor> ' ?1 J+ i( e0 l+ I5 N
- <interceptor name="logger" class="com.kay.logger"></interceptor>
' b" E* q# _6 j7 H0 ] - <!-- 定义拦截器栈 -->
7 t+ k4 j3 n' n$ J1 C - <interceptor-stack name="mystack"> ' \; g1 s3 S5 `. F; J: p- ^
- <interceptor-ref name="timer"></interceptor-ref> $ S" x* F- y: |$ [' Q# O
- <interceptor-ref name="logger"></interceptor-ref> 4 |0 L# F- F, }/ v/ n0 e% J
- </interceptor-stack> 1 P2 v Y, A) `- S; J7 a
- </interceptors>
D) Z( m8 z" K* ^# U) K8 G z -
) J$ z# w3 @' d% ~7 d3 [8 y - <!-- 定义默认的拦截器 每个Action都会自动引用
, A; U' m+ G( O u - 如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
# t' c, G+ D" H/ v% x - <default-interceptor-ref name="mystack"></default-interceptor-ref>
: I, _& o: h! X - + `1 Z+ N0 q8 q" V v D v
- # S+ U K% F2 Q( h' n$ _
- <!-- 全局results配置 -->
+ _ V( _; g/ ?' r8 S - <global-results>
8 B( L3 Z% v2 B( | - <result name="input">/error.jsp</result>
$ e; r; g3 M9 h - </global-results> ) c5 R6 M5 P) r' a
- * J: v M t/ o0 w
- <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同)
" O5 b: O Y7 R* s! x( Z2 b - name:action名称
4 p4 v7 P8 m* }; p1 ?: E6 h - class: 对应的类的路径
* Q( G# W& @6 C Y) | - method: 调用Action中的方法名
e1 z2 j5 e3 R2 w( v' V# a- T - -->
, q+ ?+ f# j! Y0 A, g- \ - <action name="hello" class="com.kay.struts2.Action.LoginAction"> $ z1 V: `# D( R1 x
- <!-- 引用拦截器 ( {2 @) G4 n$ s1 y7 t
- name:拦截器名称或拦截器栈名称 - Q' d" e/ S: \6 A
- -->
' u3 V2 k7 a h' R - <interceptor-ref name="timer"></interceptor-ref> + J1 e6 Q9 i# k0 e( T7 _9 D- t
-
: h8 x9 ?5 v5 i - <!-- 节点配置
1 H4 x7 y6 w7 B3 r' D - name : result名称 和Action中返回的值相同 1 R* c# m0 e( ~$ c: ~8 _! U% S
- type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher
6 Q5 S: K H" P7 Z - -->
$ `7 k+ G* L, w) A/ _' q! e9 [( J - <result name="success" type="dispatcher">/talk.jsp</result> ! J% g) i$ C" ]2 ~2 _
- <!-- 参数设置
2 H h1 _) E& ^ - name:对应Action中的get/set方法 2 X6 q4 b. J2 x8 V' l" A* c* |
- -->
9 U6 e+ ]' C& u v* Z2 g8 n - <param name="url">http://www.sina.com</param>
l q4 j( J6 {4 M! S$ K - </action> - w, Q2 _8 K" ^
- </package>
$ r9 G8 J- v6 S3 S3 X* x, r - </struts></b></font></font></font>
复制代码 这些是常用的struts配置文件常量,如果想把struts用好,就要懂得每个配置是怎么一回事.不光光需要学习技术,更要学习好理论知识.技术的高度是由理论知识的深度决定的. 1 C) g) {/ T9 k0 z& b9 H. K2 k
s3 U8 {$ V* h: d
|