struts2-core-2.3.20.jar

核心配置位于该jar

struts-default.xml

struts-2.3.dtd

  1 <?xml version="1.0" encoding="UTF-8" ?>
  2 <!--
  3 /*
  4  * $Id$
  5  *
  6  * Licensed to the Apache Software Foundation (ASF) under one
  7  * or more contributor license agreements.  See the NOTICE file
  8  * distributed with this work for additional information
  9  * regarding copyright ownership.  The ASF licenses this file
 10  * to you under the Apache License, Version 2.0 (the
 11  * "License"); you may not use this file except in compliance
 12  * with the License.  You may obtain a copy of the License at
 13  *
 14  *  http://www.apache.org/licenses/LICENSE-2.0
 15  *
 16  * Unless required by applicable law or agreed to in writing,
 17  * software distributed under the License is distributed on an
 18  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 19  * KIND, either express or implied.  See the License for the
 20  * specific language governing permissions and limitations
 21  * under the License.
 22  */
 23 -->
 24 
 25 <!--
 26     When declaring beans in this file you must either use name="struts" or don't name the bean at all.
 27 
 28     The name="struts" must be used when alias was defined in {@link org.apache.struts2.config.DefaultBeanSelectionProvider} -
 29     it is then the default bean's name and {@link org.apache.struts2.config.DefaultBeanSelectionProvider} links name "struts"
 30     with "default" (aliasing it)
 31 
 32     If name won't be defined then the "default" value will be used {@link com.opensymphony.xwork2.inject.Container#DEFAULT_NAME}
 33     and {@link com.opensymphony.xwork2.inject.Inject}
 34 -->
 35 <!DOCTYPE struts PUBLIC
 36     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 37     "http://struts.apache.org/dtds/struts-2.3.dtd">
 38 
 39 <struts>
 40 
 41     <constant name="struts.excludedClasses"
 42               value="
 43                 java.lang.Object,
 44                 java.lang.Runtime,
 45                 java.lang.System,
 46                 java.lang.Class,
 47                 java.lang.ClassLoader,
 48                 java.lang.Shutdown,
 49                 ognl.OgnlContext,
 50                 ognl.MemberAccess,
 51                 ognl.ClassResolver,
 52                 ognl.TypeConverter,
 53                 com.opensymphony.xwork2.ActionContext" />
 54     <!-- this must be valid regex, each '.' in package name must be escaped! -->
 55     <constant name="struts.excludedPackageNamePatterns" value="^java.lang..*,^ognl.*,^javax.*" />
 56 
 57     <bean class="com.opensymphony.xwork2.ObjectFactory" name="struts"/>
 58     <bean type="com.opensymphony.xwork2.factory.ResultFactory" name="struts" class="org.apache.struts2.factory.StrutsResultFactory" />
 59     <bean type="com.opensymphony.xwork2.factory.ActionFactory" name="struts" class="com.opensymphony.xwork2.factory.DefaultActionFactory" />
 60     <bean type="com.opensymphony.xwork2.factory.ConverterFactory" name="struts" class="com.opensymphony.xwork2.factory.DefaultConverterFactory" />
 61     <bean type="com.opensymphony.xwork2.factory.InterceptorFactory" name="struts" class="com.opensymphony.xwork2.factory.DefaultInterceptorFactory" />
 62     <bean type="com.opensymphony.xwork2.factory.ValidatorFactory" name="struts" class="com.opensymphony.xwork2.factory.DefaultValidatorFactory" />
 63     <bean type="com.opensymphony.xwork2.factory.UnknownHandlerFactory" name="struts" class="com.opensymphony.xwork2.factory.DefaultUnknownHandlerFactory" />
 64 
 65     <bean type="com.opensymphony.xwork2.FileManager" class="com.opensymphony.xwork2.util.fs.DefaultFileManager" name="system" scope="singleton"/>
 66     <bean type="com.opensymphony.xwork2.FileManagerFactory" class="com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory" name="struts" scope="singleton"/>
 67 
 68     <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="struts" class="org.apache.struts2.impl.StrutsActionProxyFactory"/>
 69     <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="prefix" class="org.apache.struts2.impl.PrefixBasedActionProxyFactory"/>
 70 
 71     <bean type="com.opensymphony.xwork2.conversion.ObjectTypeDeterminer" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultObjectTypeDeterminer"/>
 72 
 73     <bean type="com.opensymphony.xwork2.util.PatternMatcher" name="struts" class="com.opensymphony.xwork2.util.WildcardHelper" />
 74     <bean type="com.opensymphony.xwork2.util.PatternMatcher" name="namedVariable" class="com.opensymphony.xwork2.util.NamedVariablePatternMatcher"/>
 75     <bean type="com.opensymphony.xwork2.util.PatternMatcher" name="regex" class="org.apache.struts2.util.RegexPatternMatcher"/>
 76 
 77     <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="struts" class="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" />
 78     <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="composite" class="org.apache.struts2.dispatcher.mapper.CompositeActionMapper" />
 79     <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="restful" class="org.apache.struts2.dispatcher.mapper.RestfulActionMapper" />
 80     <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="restful2" class="org.apache.struts2.dispatcher.mapper.Restful2ActionMapper" />
 81 
 82     <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta" class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="default"/>
 83     <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta-stream" class="org.apache.struts2.dispatcher.multipart.JakartaStreamMultiPartRequest" scope="default"/>
 84 
 85     <bean type="org.apache.struts2.views.TagLibraryDirectiveProvider" name="s" class="org.apache.struts2.views.DefaultTagLibrary" />
 86     <bean type="org.apache.struts2.views.TagLibraryModelProvider" name="s" class="org.apache.struts2.views.DefaultTagLibrary" />
 87 
 88     <bean class="org.apache.struts2.views.freemarker.FreemarkerThemeTemplateLoader" />
 89     <bean class="org.apache.struts2.views.freemarker.FreemarkerManager" name="struts" />
 90     <bean class="org.apache.struts2.views.velocity.VelocityManager" name="struts" optional="true" />
 91 
 92     <bean class="org.apache.struts2.components.template.TemplateEngineManager" />
 93     <bean type="org.apache.struts2.components.template.TemplateEngine" name="ftl" class="org.apache.struts2.components.template.FreemarkerTemplateEngine" />
 94     <bean type="org.apache.struts2.components.template.TemplateEngine" name="vm" class="org.apache.struts2.components.template.VelocityTemplateEngine" />
 95     <bean type="org.apache.struts2.components.template.TemplateEngine" name="jsp" class="org.apache.struts2.components.template.JspTemplateEngine" />
 96 
 97     <bean type="com.opensymphony.xwork2.conversion.impl.XWorkConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.XWorkConverter" />
 98 
 99     <bean type="com.opensymphony.xwork2.conversion.ConversionPropertiesProcessor" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultConversionPropertiesProcessor" />
100     <bean type="com.opensymphony.xwork2.conversion.ConversionFileProcessor" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultConversionFileProcessor" />
101     <bean type="com.opensymphony.xwork2.conversion.ConversionAnnotationProcessor" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultConversionAnnotationProcessor" />
102     <bean type="com.opensymphony.xwork2.conversion.TypeConverterCreator" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultTypeConverterCreator" />
103     <bean type="com.opensymphony.xwork2.conversion.TypeConverterHolder" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultTypeConverterHolder" />
104 
105     <bean class="com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter" />
106 
107     <bean type="com.opensymphony.xwork2.conversion.impl.CollectionConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.CollectionConverter" scope="singleton"/>
108     <bean type="com.opensymphony.xwork2.conversion.impl.ArrayConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.ArrayConverter" scope="singleton"/>
109     <bean type="com.opensymphony.xwork2.conversion.impl.DateConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.DateConverter" scope="singleton"/>
110     <bean type="com.opensymphony.xwork2.conversion.impl.NumberConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.NumberConverter" scope="singleton"/>
111     <bean type="com.opensymphony.xwork2.conversion.impl.StringConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.StringConverter" scope="singleton"/>
112 
113     <bean type="com.opensymphony.xwork2.TextProvider" name="struts" class="com.opensymphony.xwork2.TextProviderSupport" scope="default" />
114     <bean type="com.opensymphony.xwork2.LocaleProvider" name="struts" class="com.opensymphony.xwork2.DefaultLocaleProvider" scope="singleton" />
115 
116     <bean type="org.apache.struts2.components.UrlRenderer" name="struts" class="org.apache.struts2.components.ServletUrlRenderer"/>
117     <bean type="org.apache.struts2.views.util.UrlHelper" name="struts" class="org.apache.struts2.views.util.DefaultUrlHelper"/>
118 
119     <bean type="com.opensymphony.xwork2.util.ValueStackFactory" name="struts" class="com.opensymphony.xwork2.ognl.OgnlValueStackFactory" />
120     <bean type="com.opensymphony.xwork2.util.reflection.ReflectionProvider" name="struts" class="com.opensymphony.xwork2.ognl.OgnlReflectionProvider" />
121     <bean type="com.opensymphony.xwork2.util.reflection.ReflectionContextFactory" name="struts" class="com.opensymphony.xwork2.ognl.OgnlReflectionContextFactory" />
122 
123     <bean type="com.opensymphony.xwork2.TextProvider" name="system" class="com.opensymphony.xwork2.DefaultTextProvider" />
124     <bean type="com.opensymphony.xwork2.conversion.NullHandler" name="java.lang.Object" class="com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler" />
125 
126     <bean type="com.opensymphony.xwork2.validator.ActionValidatorManager" name="struts" class="com.opensymphony.xwork2.validator.AnnotationActionValidatorManager" />
127     <bean type="com.opensymphony.xwork2.validator.ActionValidatorManager" name="no-annotations" class="com.opensymphony.xwork2.validator.DefaultActionValidatorManager" />
128 
129     <bean type="com.opensymphony.xwork2.validator.ValidatorFactory" class="com.opensymphony.xwork2.validator.DefaultValidatorFactory"/>
130     <bean type="com.opensymphony.xwork2.validator.ValidatorFileParser" class="com.opensymphony.xwork2.validator.DefaultValidatorFileParser" />
131 
132     <bean class="com.opensymphony.xwork2.ognl.OgnlUtil" />
133 
134     <bean type="com.opensymphony.xwork2.util.TextParser" name="struts" class="com.opensymphony.xwork2.util.OgnlTextParser" scope="singleton"/>
135 
136     <bean type="ognl.PropertyAccessor" name="com.opensymphony.xwork2.util.CompoundRoot" class="com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor" />
137     <bean type="ognl.PropertyAccessor" name="java.lang.Object" class="com.opensymphony.xwork2.ognl.accessor.ObjectAccessor" />
138     <bean type="ognl.PropertyAccessor" name="java.util.Iterator" class="com.opensymphony.xwork2.ognl.accessor.XWorkIteratorPropertyAccessor" />
139     <bean type="ognl.PropertyAccessor" name="java.util.Enumeration" class="com.opensymphony.xwork2.ognl.accessor.XWorkEnumerationAccessor" />
140     <bean type="ognl.PropertyAccessor" name="java.util.List" class="com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor" />
141     <bean type="ognl.PropertyAccessor" name="java.util.Set" class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor" />
142     <bean type="ognl.PropertyAccessor" name="java.util.Map" class="com.opensymphony.xwork2.ognl.accessor.XWorkMapPropertyAccessor" />
143     <bean type="ognl.PropertyAccessor" name="java.util.Collection" class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor" />
144     <bean type="ognl.PropertyAccessor" name="com.opensymphony.xwork2.ognl.ObjectProxy" class="com.opensymphony.xwork2.ognl.accessor.ObjectProxyPropertyAccessor" />
145 
146     <bean type="ognl.MethodAccessor" name="java.lang.Object" class="com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor" />
147     <bean type="ognl.MethodAccessor" name="com.opensymphony.xwork2.util.CompoundRoot" class="com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor" />
148 
149     <bean class="org.apache.struts2.views.jsp.ui.OgnlTool" />
150 
151     <bean type="org.apache.struts2.dispatcher.StaticContentLoader" class="org.apache.struts2.dispatcher.DefaultStaticContentLoader" name="struts" />
152     <bean type="com.opensymphony.xwork2.UnknownHandlerManager" class="com.opensymphony.xwork2.DefaultUnknownHandlerManager" name="struts" />
153 
154     <bean type="org.apache.struts2.dispatcher.DispatcherErrorHandler" name="struts" class="org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler" />
155     
156     <constant name="struts.dispatcher.errorHandler" value="struts" />
157 
158     <!--  Silly workarounds for OGNL since there is currently no way to flush its internal caches -->
159     <bean type="ognl.PropertyAccessor" name="java.util.ArrayList" class="com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor" />
160     <bean type="ognl.PropertyAccessor" name="java.util.HashSet" class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor" />
161     <bean type="ognl.PropertyAccessor" name="java.util.HashMap" class="com.opensymphony.xwork2.ognl.accessor.XWorkMapPropertyAccessor" />
162 
163     <bean type="com.opensymphony.xwork2.security.ExcludedPatternsChecker" name="struts" class="com.opensymphony.xwork2.security.DefaultExcludedPatternsChecker" scope="default" />
164     <bean type="com.opensymphony.xwork2.security.AcceptedPatternsChecker" name="struts" class="com.opensymphony.xwork2.security.DefaultAcceptedPatternsChecker" scope="default" />
165 
166     <package name="struts-default" abstract="true">
167         <result-types>
168             <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
169             <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
170             <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
171             <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
172             <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
173             <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
174             <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
175             <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
176             <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
177             <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
178             <result-type name="postback" class="org.apache.struts2.dispatcher.PostbackResult" />
179         </result-types>
180 
181         <interceptors>
182             <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/>
183             <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
184             <interceptor name="chain" class="com.opensymphony.xwork2.interceptor.ChainingInterceptor"/>
185             <interceptor name="conversionError" class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>
186             <interceptor name="cookie" class="org.apache.struts2.interceptor.CookieInterceptor"/>
187             <interceptor name="cookieProvider" class="org.apache.struts2.interceptor.CookieProviderInterceptor"/>
188             <interceptor name="clearSession" class="org.apache.struts2.interceptor.ClearSessionInterceptor" />
189             <interceptor name="createSession" class="org.apache.struts2.interceptor.CreateSessionInterceptor" />
190             <interceptor name="debugging" class="org.apache.struts2.interceptor.debugging.DebuggingInterceptor" />
191             <interceptor name="execAndWait" class="org.apache.struts2.interceptor.ExecuteAndWaitInterceptor"/>
192             <interceptor name="exception" class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/>
193             <interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>
194             <interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/>
195             <interceptor name="logger" class="com.opensymphony.xwork2.interceptor.LoggingInterceptor"/>
196             <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>
197             <interceptor name="scopedModelDriven" class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"/>
198             <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
199             <interceptor name="actionMappingParams" class="org.apache.struts2.interceptor.ActionMappingParametersInteceptor"/>
200             <interceptor name="prepare" class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/>
201             <interceptor name="staticParams" class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/>
202             <interceptor name="scope" class="org.apache.struts2.interceptor.ScopeInterceptor"/>
203             <interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>
204             <interceptor name="timer" class="com.opensymphony.xwork2.interceptor.TimerInterceptor"/>
205             <interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/>
206             <interceptor name="tokenSession" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"/>
207             <interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>
208             <interceptor name="workflow" class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"/>
209             <interceptor name="store" class="org.apache.struts2.interceptor.MessageStoreInterceptor" />
210             <interceptor name="checkbox" class="org.apache.struts2.interceptor.CheckboxInterceptor" />
211             <interceptor name="datetime" class="org.apache.struts2.interceptor.DateTextFieldInterceptor" />
212             <interceptor name="profiling" class="org.apache.struts2.interceptor.ProfilingActivationInterceptor" />
213             <interceptor name="roles" class="org.apache.struts2.interceptor.RolesInterceptor" />
214             <interceptor name="annotationWorkflow" class="com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor" />
215             <interceptor name="multiselect" class="org.apache.struts2.interceptor.MultiselectInterceptor" />
216             <interceptor name="deprecation" class="org.apache.struts2.interceptor.DeprecationInterceptor" />
217 
218             <!-- Basic stack -->
219             <interceptor-stack name="basicStack">
220                 <interceptor-ref name="exception"/>
221                 <interceptor-ref name="servletConfig"/>
222                 <interceptor-ref name="prepare"/>
223                 <interceptor-ref name="checkbox"/>
224                 <interceptor-ref name="datetime"/>
225                 <interceptor-ref name="multiselect"/>
226                 <interceptor-ref name="actionMappingParams"/>
227                 <interceptor-ref name="params">
228                     <param name="excludeParams">^action:.*,^method:.*</param>
229                 </interceptor-ref>
230                 <interceptor-ref name="conversionError"/>
231                 <interceptor-ref name="deprecation"/>
232             </interceptor-stack>
233 
234             <!-- Sample validation and workflow stack -->
235             <interceptor-stack name="validationWorkflowStack">
236                 <interceptor-ref name="basicStack"/>
237                 <interceptor-ref name="validation"/>
238                 <interceptor-ref name="workflow"/>
239             </interceptor-stack>
240 
241             <!-- Sample file upload stack -->
242             <interceptor-stack name="fileUploadStack">
243                 <interceptor-ref name="fileUpload"/>
244                 <interceptor-ref name="basicStack"/>
245             </interceptor-stack>
246 
247             <!-- Sample model-driven stack  -->
248             <interceptor-stack name="modelDrivenStack">
249                 <interceptor-ref name="modelDriven"/>
250                 <interceptor-ref name="basicStack"/>
251             </interceptor-stack>
252 
253             <!-- Sample action chaining stack -->
254             <interceptor-stack name="chainStack">
255                 <interceptor-ref name="chain"/>
256                 <interceptor-ref name="basicStack"/>
257             </interceptor-stack>
258 
259             <!-- Sample i18n stack -->
260             <interceptor-stack name="i18nStack">
261                 <interceptor-ref name="i18n"/>
262                 <interceptor-ref name="basicStack"/>
263             </interceptor-stack>
264 
265             <!-- An example of the paramsPrepareParams trick. This stack
266                  is exactly the same as the defaultStack, except that it
267                  includes one extra interceptor before the prepare interceptor:
268                  the params interceptor.
269 
270                  This is useful for when you wish to apply parameters directly
271                  to an object that you wish to load externally (such as a DAO
272                  or database or service layer), but can't load that object
273                  until at least the ID parameter has been loaded. By loading
274                  the parameters twice, you can retrieve the object in the
275                  prepare() method, allowing the second params interceptor to
276                  apply the values on the object. -->
277             <interceptor-stack name="paramsPrepareParamsStack">
278                 <interceptor-ref name="exception"/>
279                 <interceptor-ref name="alias"/>
280                 <interceptor-ref name="i18n"/>
281                 <interceptor-ref name="checkbox"/>
282                 <interceptor-ref name="datetime"/>
283                 <interceptor-ref name="multiselect"/>
284                 <interceptor-ref name="params">
285                     <param name="excludeParams">^action:.*,^method:.*</param>
286                 </interceptor-ref>
287                 <interceptor-ref name="servletConfig"/>
288                 <interceptor-ref name="prepare"/>
289                 <interceptor-ref name="chain"/>
290                 <interceptor-ref name="modelDriven"/>
291                 <interceptor-ref name="fileUpload"/>
292                 <interceptor-ref name="staticParams"/>
293                 <interceptor-ref name="actionMappingParams"/>
294                 <interceptor-ref name="params">
295                     <param name="excludeParams">^action:.*,^method:.*</param>
296                 </interceptor-ref>
297                 <interceptor-ref name="conversionError"/>
298                 <interceptor-ref name="validation">
299                     <param name="excludeMethods">input,back,cancel,browse</param>
300                 </interceptor-ref>
301                 <interceptor-ref name="workflow">
302                     <param name="excludeMethods">input,back,cancel,browse</param>
303                 </interceptor-ref>
304             </interceptor-stack>
305 
306             <!-- A complete stack with all the common interceptors in place.
307                  Generally, this stack should be the one you use, though it
308                  may do more than you need. Also, the ordering can be
309                  switched around (ex: if you wish to have your servlet-related
310                  objects applied before prepare() is called, you'd need to move
311                  servletConfig interceptor up.
312 
313                  This stack also excludes from the normal validation and workflow
314                  the method names input, back, and cancel. These typically are
315                  associated with requests that should not be validated.
316                  -->
317             <interceptor-stack name="defaultStack">
318                 <interceptor-ref name="exception"/>
319                 <interceptor-ref name="alias"/>
320                 <interceptor-ref name="servletConfig"/>
321                 <interceptor-ref name="i18n"/>
322                 <interceptor-ref name="prepare"/>
323                 <interceptor-ref name="chain"/>
324                 <interceptor-ref name="scopedModelDriven"/>
325                 <interceptor-ref name="modelDriven"/>
326                 <interceptor-ref name="fileUpload"/>
327                 <interceptor-ref name="checkbox"/>
328                 <interceptor-ref name="datetime"/>
329                 <interceptor-ref name="multiselect"/>
330                 <interceptor-ref name="staticParams"/>
331                 <interceptor-ref name="actionMappingParams"/>
332                 <interceptor-ref name="params">
333                     <param name="excludeParams">^action:.*,^method:.*</param>
334                 </interceptor-ref>
335                 <interceptor-ref name="conversionError"/>
336                 <interceptor-ref name="validation">
337                     <param name="excludeMethods">input,back,cancel,browse</param>
338                 </interceptor-ref>
339                 <interceptor-ref name="workflow">
340                     <param name="excludeMethods">input,back,cancel,browse</param>
341                 </interceptor-ref>
342                 <interceptor-ref name="debugging"/>
343                 <interceptor-ref name="deprecation"/>
344             </interceptor-stack>
345 
346             <!-- The completeStack is here for backwards compatibility for
347                  applications that still refer to the defaultStack by the
348                  old name -->
349             <interceptor-stack name="completeStack">
350                 <interceptor-ref name="defaultStack"/>
351             </interceptor-stack>
352 
353             <!-- Sample execute and wait stack.
354                  Note: execAndWait should always be the *last* interceptor. -->
355             <interceptor-stack name="executeAndWaitStack">
356                 <interceptor-ref name="execAndWait">
357                     <param name="excludeMethods">input,back,cancel</param>
358                 </interceptor-ref>
359                 <interceptor-ref name="defaultStack"/>
360                 <interceptor-ref name="execAndWait">
361                     <param name="excludeMethods">input,back,cancel</param>
362                 </interceptor-ref>
363             </interceptor-stack>
364 
365        </interceptors>
366 
367         <default-interceptor-ref name="defaultStack"/>
368 
369         <default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
370     </package>
371 
372 </struts>





<!ELEMENT struts ((package|include|bean|constant)*, unknown-handler-stack?)>
<!ATTLIST struts
    order CDATA #IMPLIED
>

<!ELEMENT package (result-types?, interceptors?, default-interceptor-ref?, default-action-ref?, default-class-ref?, global-results?, global-exception-mappings?, action*)>
<!ATTLIST package
    name CDATA #REQUIRED
    extends CDATA #IMPLIED
    namespace CDATA #IMPLIED
    abstract CDATA #IMPLIED
    strict-method-invocation CDATA #IMPLIED
    externalReferenceResolver NMTOKEN #IMPLIED
>

<!ELEMENT result-types (result-type+)>

<!ELEMENT result-type (param*)>
<!ATTLIST result-type
    name CDATA #REQUIRED
    class CDATA #REQUIRED
    default (true|false) "false"
>

<!ELEMENT interceptors (interceptor|interceptor-stack)+>

<!ELEMENT interceptor (param*)>
<!ATTLIST interceptor
    name CDATA #REQUIRED
    class CDATA #REQUIRED
>

<!ELEMENT interceptor-stack (interceptor-ref*)>
<!ATTLIST interceptor-stack
    name CDATA #REQUIRED
>

<!ELEMENT interceptor-ref (param*)>
<!ATTLIST interceptor-ref
    name CDATA #REQUIRED
>

<!ELEMENT default-interceptor-ref (#PCDATA)>
<!ATTLIST default-interceptor-ref
    name CDATA #REQUIRED
>

<!ELEMENT default-action-ref (#PCDATA)>
<!ATTLIST default-action-ref
    name CDATA #REQUIRED
>

<!ELEMENT default-class-ref (#PCDATA)>
<!ATTLIST default-class-ref
    class CDATA #REQUIRED
>

<!ELEMENT global-results (result+)>

<!ELEMENT global-exception-mappings (exception-mapping+)>

<!ELEMENT action ((param|result|interceptor-ref|exception-mapping)*,allowed-methods?)>
<!ATTLIST action
    name CDATA #REQUIRED
    class CDATA #IMPLIED
    method CDATA #IMPLIED
    converter CDATA #IMPLIED
>

<!ELEMENT param (#PCDATA)>
<!ATTLIST param
    name CDATA #REQUIRED
>

<!ELEMENT result (#PCDATA|param)*>
<!ATTLIST result
    name CDATA #IMPLIED
    type CDATA #IMPLIED
>

<!ELEMENT exception-mapping (#PCDATA|param)*>
<!ATTLIST exception-mapping
    name CDATA #IMPLIED
    exception CDATA #REQUIRED
    result CDATA #REQUIRED
>

<!ELEMENT allowed-methods (#PCDATA)>

<!ELEMENT include (#PCDATA)>
<!ATTLIST include
    file CDATA #REQUIRED
>

<!ELEMENT bean (#PCDATA)>
<!ATTLIST bean
    type CDATA #IMPLIED
    name CDATA #IMPLIED
    class CDATA #REQUIRED
    scope CDATA #IMPLIED
    static CDATA #IMPLIED
    optional CDATA #IMPLIED
>

<!ELEMENT constant (#PCDATA)>
<!ATTLIST constant
    name CDATA #REQUIRED
    value CDATA #REQUIRED
>

<!ELEMENT unknown-handler-stack (unknown-handler-ref*)>
<!ELEMENT unknown-handler-ref (#PCDATA)>
<!ATTLIST unknown-handler-ref
    name CDATA #REQUIRED
>

原文地址:https://www.cnblogs.com/zno2/p/4495227.html