一般,struts.xml文件都會繼承一個struts-default.xml文件經過一些基本的攔截器來提供一些基本的配置設置之類的。java
配置例:web
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" 4 "http://struts.apache.org/dtds/struts-2.5.dtd"> 5 6 <struts> 7 <!-- 開啓debug模式,會自動加載配置文件等等,不用每次更改了配置文件就去從新啓動下服務器 --> 8 <constant name="struts.devMode" value="true" /> 9 10 <package name="test" namespace="/student" extends="struts-default"> 11 <action name="show" method="showStu" class="com.fuwh.demo.Show"> 12 <result name="success">hello.jsp</result> 13 14 </action> 15 16 </package> 17 18 </struts>
struts-default.xml的詳細內容spring
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.5//EN" 37 "http://struts.apache.org/dtds/struts-2.5.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 java.lang.ProcessBuilder, 50 ognl.OgnlContext, 51 ognl.ClassResolver, 52 ognl.TypeConverter, 53 ognl.MemberAccess, 54 ognl.DefaultMemberAccess, 55 com.opensymphony.xwork2.ognl.SecurityMemberAccess, 56 com.opensymphony.xwork2.ActionContext" /> 57 58 <!-- this must be valid regex, each '.' in package name must be escaped! --> 59 <!-- it's more flexible but slower than simple string comparison --> 60 <!-- constant name="struts.excludedPackageNamePatterns" value="^java\.lang\..*,^ognl.*,^(?!javax\.servlet\..+)(javax\..+)" / --> 61 62 <!-- this is simpler version of the above used with string comparison --> 63 <constant name="struts.excludedPackageNames" value="java.lang.,ognl,javax" /> 64 65 <bean class="com.opensymphony.xwork2.ObjectFactory" name="struts"/> 66 <bean type="com.opensymphony.xwork2.factory.ResultFactory" name="struts" class="org.apache.struts2.factory.StrutsResultFactory" /> 67 <bean type="com.opensymphony.xwork2.factory.ActionFactory" name="struts" class="com.opensymphony.xwork2.factory.DefaultActionFactory" /> 68 <bean type="com.opensymphony.xwork2.factory.ConverterFactory" name="struts" class="com.opensymphony.xwork2.factory.DefaultConverterFactory" /> 69 <bean type="com.opensymphony.xwork2.factory.InterceptorFactory" name="struts" class="com.opensymphony.xwork2.factory.DefaultInterceptorFactory" /> 70 <bean type="com.opensymphony.xwork2.factory.ValidatorFactory" name="struts" class="com.opensymphony.xwork2.factory.DefaultValidatorFactory" /> 71 <bean type="com.opensymphony.xwork2.factory.UnknownHandlerFactory" name="struts" class="com.opensymphony.xwork2.factory.DefaultUnknownHandlerFactory" /> 72 73 <bean type="com.opensymphony.xwork2.FileManager" class="com.opensymphony.xwork2.util.fs.DefaultFileManager" name="system" scope="singleton"/> 74 <bean type="com.opensymphony.xwork2.FileManagerFactory" class="com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory" name="struts" scope="singleton"/> 75 76 <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="struts" class="org.apache.struts2.factory.StrutsActionProxyFactory"/> 77 <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="prefix" class="org.apache.struts2.factory.PrefixBasedActionProxyFactory"/> 78 79 <bean type="com.opensymphony.xwork2.conversion.ObjectTypeDeterminer" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultObjectTypeDeterminer"/> 80 81 <bean type="com.opensymphony.xwork2.util.PatternMatcher" name="struts" class="com.opensymphony.xwork2.util.WildcardHelper" /> 82 <bean type="com.opensymphony.xwork2.util.PatternMatcher" name="namedVariable" class="com.opensymphony.xwork2.util.NamedVariablePatternMatcher"/> 83 <bean type="com.opensymphony.xwork2.util.PatternMatcher" name="regex" class="org.apache.struts2.util.RegexPatternMatcher"/> 84 85 <bean type="org.apache.struts2.util.ContentTypeMatcher" name="struts" class="org.apache.struts2.util.DefaultContentTypeMatcher"/> 86 87 <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="struts" class="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" /> 88 <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="composite" class="org.apache.struts2.dispatcher.mapper.CompositeActionMapper" /> 89 <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="restful" class="org.apache.struts2.dispatcher.mapper.RestfulActionMapper" /> 90 <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="restful2" class="org.apache.struts2.dispatcher.mapper.Restful2ActionMapper" /> 91 92 <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta" class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="prototype"/> 93 <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta-stream" class="org.apache.struts2.dispatcher.multipart.JakartaStreamMultiPartRequest" scope="prototype"/> 94 95 <bean type="org.apache.struts2.views.TagLibraryDirectiveProvider" name="s" class="org.apache.struts2.views.DefaultTagLibrary" /> 96 <bean type="org.apache.struts2.views.TagLibraryModelProvider" name="s" class="org.apache.struts2.views.DefaultTagLibrary" /> 97 98 <bean class="org.apache.struts2.views.freemarker.FreemarkerThemeTemplateLoader" /> 99 <bean class="org.apache.struts2.views.freemarker.FreemarkerManager" name="struts" /> 100 <bean class="org.apache.struts2.views.velocity.VelocityManager" name="struts" optional="true" /> 101 102 <bean class="org.apache.struts2.components.template.TemplateEngineManager" /> 103 <bean type="org.apache.struts2.components.template.TemplateEngine" name="ftl" class="org.apache.struts2.components.template.FreemarkerTemplateEngine" /> 104 <bean type="org.apache.struts2.components.template.TemplateEngine" name="vm" class="org.apache.struts2.components.template.VelocityTemplateEngine" /> 105 <bean type="org.apache.struts2.components.template.TemplateEngine" name="jsp" class="org.apache.struts2.components.template.JspTemplateEngine" /> 106 107 <bean type="com.opensymphony.xwork2.conversion.impl.XWorkConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.XWorkConverter" /> 108 109 <bean type="com.opensymphony.xwork2.conversion.ConversionPropertiesProcessor" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultConversionPropertiesProcessor" /> 110 <bean type="com.opensymphony.xwork2.conversion.ConversionFileProcessor" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultConversionFileProcessor" /> 111 <bean type="com.opensymphony.xwork2.conversion.ConversionAnnotationProcessor" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultConversionAnnotationProcessor" /> 112 <bean type="com.opensymphony.xwork2.conversion.TypeConverterCreator" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultTypeConverterCreator" /> 113 <bean type="com.opensymphony.xwork2.conversion.TypeConverterHolder" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultTypeConverterHolder" /> 114 115 <bean class="com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter" /> 116 117 <bean type="com.opensymphony.xwork2.conversion.impl.CollectionConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.CollectionConverter" scope="singleton"/> 118 <bean type="com.opensymphony.xwork2.conversion.impl.ArrayConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.ArrayConverter" scope="singleton"/> 119 <bean type="com.opensymphony.xwork2.conversion.impl.DateConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.DateConverter" scope="singleton"/> 120 <bean type="com.opensymphony.xwork2.conversion.impl.NumberConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.NumberConverter" scope="singleton"/> 121 <bean type="com.opensymphony.xwork2.conversion.impl.StringConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.StringConverter" scope="singleton"/> 122 123 <bean type="com.opensymphony.xwork2.TextProvider" name="struts" class="com.opensymphony.xwork2.TextProviderSupport" scope="prototype" /> 124 <bean type="com.opensymphony.xwork2.LocaleProvider" name="struts" class="com.opensymphony.xwork2.DefaultLocaleProvider" scope="singleton" /> 125 126 <bean type="org.apache.struts2.components.UrlRenderer" name="struts" class="org.apache.struts2.components.ServletUrlRenderer"/> 127 <bean type="org.apache.struts2.views.util.UrlHelper" name="struts" class="org.apache.struts2.views.util.DefaultUrlHelper"/> 128 129 <bean type="com.opensymphony.xwork2.util.ValueStackFactory" name="struts" class="com.opensymphony.xwork2.ognl.OgnlValueStackFactory" /> 130 <bean type="com.opensymphony.xwork2.util.reflection.ReflectionProvider" name="struts" class="com.opensymphony.xwork2.ognl.OgnlReflectionProvider" /> 131 <bean type="com.opensymphony.xwork2.util.reflection.ReflectionContextFactory" name="struts" class="com.opensymphony.xwork2.ognl.OgnlReflectionContextFactory" /> 132 133 <bean type="com.opensymphony.xwork2.TextProvider" name="system" class="com.opensymphony.xwork2.DefaultTextProvider" /> 134 <bean type="com.opensymphony.xwork2.conversion.NullHandler" name="java.lang.Object" class="com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler" /> 135 136 <bean type="com.opensymphony.xwork2.validator.ActionValidatorManager" name="struts" class="com.opensymphony.xwork2.validator.AnnotationActionValidatorManager" /> 137 <bean type="com.opensymphony.xwork2.validator.ActionValidatorManager" name="no-annotations" class="com.opensymphony.xwork2.validator.DefaultActionValidatorManager" /> 138 139 <bean type="com.opensymphony.xwork2.validator.ValidatorFactory" class="com.opensymphony.xwork2.validator.DefaultValidatorFactory"/> 140 <bean type="com.opensymphony.xwork2.validator.ValidatorFileParser" class="com.opensymphony.xwork2.validator.DefaultValidatorFileParser" /> 141 142 <bean class="com.opensymphony.xwork2.ognl.OgnlUtil" /> 143 144 <bean type="com.opensymphony.xwork2.util.TextParser" name="struts" class="com.opensymphony.xwork2.util.OgnlTextParser" scope="singleton"/> 145 146 <bean type="ognl.PropertyAccessor" name="com.opensymphony.xwork2.util.CompoundRoot" class="com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor" /> 147 <bean type="ognl.PropertyAccessor" name="java.lang.Object" class="com.opensymphony.xwork2.ognl.accessor.ObjectAccessor" /> 148 <bean type="ognl.PropertyAccessor" name="java.util.Iterator" class="com.opensymphony.xwork2.ognl.accessor.XWorkIteratorPropertyAccessor" /> 149 <bean type="ognl.PropertyAccessor" name="java.util.Enumeration" class="com.opensymphony.xwork2.ognl.accessor.XWorkEnumerationAccessor" /> 150 <bean type="ognl.PropertyAccessor" name="java.util.List" class="com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor" /> 151 <bean type="ognl.PropertyAccessor" name="java.util.Set" class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor" /> 152 <bean type="ognl.PropertyAccessor" name="java.util.Map" class="com.opensymphony.xwork2.ognl.accessor.XWorkMapPropertyAccessor" /> 153 <bean type="ognl.PropertyAccessor" name="java.util.Collection" class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor" /> 154 <bean type="ognl.PropertyAccessor" name="com.opensymphony.xwork2.ognl.ObjectProxy" class="com.opensymphony.xwork2.ognl.accessor.ObjectProxyPropertyAccessor" /> 155 <bean type="ognl.PropertyAccessor" name="org.apache.struts2.dispatcher.HttpParameters" class="com.opensymphony.xwork2.ognl.accessor.HttpParametersPropertyAccessor" /> 156 <bean type="ognl.PropertyAccessor" name="org.apache.struts2.dispatcher.Parameter" class="com.opensymphony.xwork2.ognl.accessor.ParameterPropertyAccessor" /> 157 158 <bean type="ognl.MethodAccessor" name="java.lang.Object" class="com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor" /> 159 <bean type="ognl.MethodAccessor" name="com.opensymphony.xwork2.util.CompoundRoot" class="com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor" /> 160 161 <bean class="org.apache.struts2.views.jsp.ui.OgnlTool" /> 162 163 <bean type="org.apache.struts2.dispatcher.StaticContentLoader" class="org.apache.struts2.dispatcher.DefaultStaticContentLoader" name="struts" /> 164 <bean type="com.opensymphony.xwork2.UnknownHandlerManager" class="com.opensymphony.xwork2.DefaultUnknownHandlerManager" name="struts" /> 165 166 <bean type="org.apache.struts2.dispatcher.DispatcherErrorHandler" name="struts" class="org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler" /> 167 168 <constant name="struts.dispatcher.errorHandler" value="struts" /> 169 170 <!-- Silly workarounds for OGNL since there is currently no way to flush its internal caches --> 171 <bean type="ognl.PropertyAccessor" name="java.util.ArrayList" class="com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor" /> 172 <bean type="ognl.PropertyAccessor" name="java.util.HashSet" class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor" /> 173 <bean type="ognl.PropertyAccessor" name="java.util.HashMap" class="com.opensymphony.xwork2.ognl.accessor.XWorkMapPropertyAccessor" /> 174 175 <bean type="com.opensymphony.xwork2.security.ExcludedPatternsChecker" name="struts" class="com.opensymphony.xwork2.security.DefaultExcludedPatternsChecker" scope="prototype" /> 176 <bean type="com.opensymphony.xwork2.security.AcceptedPatternsChecker" name="struts" class="com.opensymphony.xwork2.security.DefaultAcceptedPatternsChecker" scope="prototype" /> 177 178 <bean type="com.opensymphony.xwork2.config.providers.ValueSubstitutor" class="com.opensymphony.xwork2.config.providers.EnvsValueSubstitutor" scope="singleton"/> 179 180 <package name="struts-default" abstract="true" strict-method-invocation="true"> 181 <result-types> 182 <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/> 183 <result-type name="dispatcher" class="org.apache.struts2.result.ServletDispatcherResult" default="true"/> 184 <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/> 185 <result-type name="httpheader" class="org.apache.struts2.result.HttpHeaderResult"/> 186 <result-type name="redirect" class="org.apache.struts2.result.ServletRedirectResult"/> 187 <result-type name="redirectAction" class="org.apache.struts2.result.ServletActionRedirectResult"/> 188 <result-type name="stream" class="org.apache.struts2.result.StreamResult"/> 189 <result-type name="velocity" class="org.apache.struts2.result.VelocityResult"/> 190 <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/> 191 <result-type name="plainText" class="org.apache.struts2.result.PlainTextResult" /> 192 <result-type name="postback" class="org.apache.struts2.result.PostbackResult" /> 193 </result-types> 194 195 <interceptors> 196 <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/> 197 <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/> 198 <interceptor name="chain" class="com.opensymphony.xwork2.interceptor.ChainingInterceptor"/> 199 <interceptor name="conversionError" class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/> 200 <interceptor name="cookie" class="org.apache.struts2.interceptor.CookieInterceptor"/> 201 <interceptor name="cookieProvider" class="org.apache.struts2.interceptor.CookieProviderInterceptor"/> 202 <interceptor name="clearSession" class="org.apache.struts2.interceptor.ClearSessionInterceptor" /> 203 <interceptor name="createSession" class="org.apache.struts2.interceptor.CreateSessionInterceptor" /> 204 <interceptor name="debugging" class="org.apache.struts2.interceptor.debugging.DebuggingInterceptor" /> 205 <interceptor name="execAndWait" class="org.apache.struts2.interceptor.ExecuteAndWaitInterceptor"/> 206 <interceptor name="exception" class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/> 207 <interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/> 208 <interceptor name="i18n" class="org.apache.struts2.interceptor.I18nInterceptor"/> 209 <interceptor name="logger" class="com.opensymphony.xwork2.interceptor.LoggingInterceptor"/> 210 <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/> 211 <interceptor name="scopedModelDriven" class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"/> 212 <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/> 213 <interceptor name="actionMappingParams" class="org.apache.struts2.interceptor.ActionMappingParametersInteceptor"/> 214 <interceptor name="prepare" class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/> 215 <interceptor name="staticParams" class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/> 216 <interceptor name="scope" class="org.apache.struts2.interceptor.ScopeInterceptor"/> 217 <interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/> 218 <interceptor name="timer" class="com.opensymphony.xwork2.interceptor.TimerInterceptor"/> 219 <interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/> 220 <interceptor name="tokenSession" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"/> 221 <interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/> 222 <interceptor name="workflow" class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"/> 223 <interceptor name="store" class="org.apache.struts2.interceptor.MessageStoreInterceptor" /> 224 <interceptor name="checkbox" class="org.apache.struts2.interceptor.CheckboxInterceptor" /> 225 <interceptor name="datetime" class="org.apache.struts2.interceptor.DateTextFieldInterceptor" /> 226 <interceptor name="profiling" class="org.apache.struts2.interceptor.ProfilingActivationInterceptor" /> 227 <interceptor name="roles" class="org.apache.struts2.interceptor.RolesInterceptor" /> 228 <interceptor name="annotationWorkflow" class="com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor" /> 229 <interceptor name="multiselect" class="org.apache.struts2.interceptor.MultiselectInterceptor" /> 230 231 <!-- Basic stack --> 232 <interceptor-stack name="basicStack"> 233 <interceptor-ref name="exception"/> 234 <interceptor-ref name="servletConfig"/> 235 <interceptor-ref name="prepare"/> 236 <interceptor-ref name="checkbox"/> 237 <interceptor-ref name="datetime"/> 238 <interceptor-ref name="multiselect"/> 239 <interceptor-ref name="actionMappingParams"/> 240 <interceptor-ref name="params"/> 241 <interceptor-ref name="conversionError"/> 242 </interceptor-stack> 243 244 <!-- Sample validation and workflow stack --> 245 <interceptor-stack name="validationWorkflowStack"> 246 <interceptor-ref name="basicStack"/> 247 <interceptor-ref name="validation"/> 248 <interceptor-ref name="workflow"/> 249 </interceptor-stack> 250 251 <!-- Sample file upload stack --> 252 <interceptor-stack name="fileUploadStack"> 253 <interceptor-ref name="fileUpload"/> 254 <interceptor-ref name="basicStack"/> 255 </interceptor-stack> 256 257 <!-- Sample model-driven stack --> 258 <interceptor-stack name="modelDrivenStack"> 259 <interceptor-ref name="modelDriven"/> 260 <interceptor-ref name="basicStack"/> 261 </interceptor-stack> 262 263 <!-- Sample action chaining stack --> 264 <interceptor-stack name="chainStack"> 265 <interceptor-ref name="chain"/> 266 <interceptor-ref name="basicStack"/> 267 </interceptor-stack> 268 269 <!-- Sample i18n stack --> 270 <interceptor-stack name="i18nStack"> 271 <interceptor-ref name="i18n"/> 272 <interceptor-ref name="basicStack"/> 273 </interceptor-stack> 274 275 <!-- An example of the paramsPrepareParams trick. This stack 276 is exactly the same as the defaultStack, except that it 277 includes one extra interceptor before the prepare interceptor: 278 the params interceptor. 279 280 This is useful for when you wish to apply parameters directly 281 to an object that you wish to load externally (such as a DAO 282 or database or service layer), but can't load that object 283 until at least the ID parameter has been loaded. By loading 284 the parameters twice, you can retrieve the object in the 285 prepare() method, allowing the second params interceptor to 286 apply the values on the object. --> 287 <interceptor-stack name="paramsPrepareParamsStack"> 288 <interceptor-ref name="exception"/> 289 <interceptor-ref name="alias"/> 290 <interceptor-ref name="i18n"/> 291 <interceptor-ref name="checkbox"/> 292 <interceptor-ref name="datetime"/> 293 <interceptor-ref name="multiselect"/> 294 <interceptor-ref name="params"/> 295 <interceptor-ref name="servletConfig"/> 296 <interceptor-ref name="prepare"/> 297 <interceptor-ref name="chain"/> 298 <interceptor-ref name="modelDriven"/> 299 <interceptor-ref name="fileUpload"/> 300 <interceptor-ref name="staticParams"/> 301 <interceptor-ref name="actionMappingParams"/> 302 <interceptor-ref name="params"/> 303 <interceptor-ref name="conversionError"/> 304 <interceptor-ref name="validation"> 305 <param name="excludeMethods">input,back,cancel,browse</param> 306 </interceptor-ref> 307 <interceptor-ref name="workflow"> 308 <param name="excludeMethods">input,back,cancel,browse</param> 309 </interceptor-ref> 310 </interceptor-stack> 311 312 <!-- A complete stack with all the common interceptors in place. 313 Generally, this stack should be the one you use, though it 314 may do more than you need. Also, the ordering can be 315 switched around (ex: if you wish to have your servlet-related 316 objects applied before prepare() is called, you'd need to move 317 servletConfig interceptor up. 318 319 This stack also excludes from the normal validation and workflow 320 the method names input, back, and cancel. These typically are 321 associated with requests that should not be validated. 322 --> 323 <interceptor-stack name="defaultStack"> 324 <interceptor-ref name="exception"/> 325 <interceptor-ref name="alias"/> 326 <interceptor-ref name="servletConfig"/> 327 <interceptor-ref name="i18n"/> 328 <interceptor-ref name="prepare"/> 329 <interceptor-ref name="chain"/> 330 <interceptor-ref name="scopedModelDriven"/> 331 <interceptor-ref name="modelDriven"/> 332 <interceptor-ref name="fileUpload"/> 333 <interceptor-ref name="checkbox"/> 334 <interceptor-ref name="datetime"/> 335 <interceptor-ref name="multiselect"/> 336 <interceptor-ref name="staticParams"/> 337 <interceptor-ref name="actionMappingParams"/> 338 <interceptor-ref name="params"/> 339 <interceptor-ref name="conversionError"/> 340 <interceptor-ref name="validation"> 341 <param name="excludeMethods">input,back,cancel,browse</param> 342 </interceptor-ref> 343 <interceptor-ref name="workflow"> 344 <param name="excludeMethods">input,back,cancel,browse</param> 345 </interceptor-ref> 346 <interceptor-ref name="debugging"/> 347 </interceptor-stack> 348 349 <!-- The completeStack is here for backwards compatibility for 350 applications that still refer to the defaultStack by the 351 old name --> 352 <interceptor-stack name="completeStack"> 353 <interceptor-ref name="defaultStack"/> 354 </interceptor-stack> 355 356 <!-- Sample execute and wait stack. 357 Note: execAndWait should always be the *last* interceptor. --> 358 <interceptor-stack name="executeAndWaitStack"> 359 <interceptor-ref name="execAndWait"> 360 <param name="excludeMethods">input,back,cancel</param> 361 </interceptor-ref> 362 <interceptor-ref name="defaultStack"/> 363 <interceptor-ref name="execAndWait"> 364 <param name="excludeMethods">input,back,cancel</param> 365 </interceptor-ref> 366 </interceptor-stack> 367 368 </interceptors> 369 370 <default-interceptor-ref name="defaultStack"/> 371 372 <default-class-ref class="com.opensymphony.xwork2.ActionSupport" /> 373 374 <global-allowed-methods>execute,input,back,cancel,browse,save,delete,list,index</global-allowed-methods> 375 376 </package> 377 378 </struts> 379 <?xml version="1.0" encoding="UTF-8" ?> 380 <!-- 381 /* 382 * $Id$ 383 * 384 * Licensed to the Apache Software Foundation (ASF) under one 385 * or more contributor license agreements. See the NOTICE file 386 * distributed with this work for additional information 387 * regarding copyright ownership. The ASF licenses this file 388 * to you under the Apache License, Version 2.0 (the 389 * "License"); you may not use this file except in compliance 390 * with the License. You may obtain a copy of the License at 391 * 392 * http://www.apache.org/licenses/LICENSE-2.0 393 * 394 * Unless required by applicable law or agreed to in writing, 395 * software distributed under the License is distributed on an 396 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 397 * KIND, either express or implied. See the License for the 398 * specific language governing permissions and limitations 399 * under the License. 400 */ 401 --> 402 403 <!-- 404 When declaring beans in this file you must either use name="struts" or don't name the bean at all. 405 406 The name="struts" must be used when alias was defined in {@link org.apache.struts2.config.DefaultBeanSelectionProvider} - 407 it is then the default bean's name and {@link org.apache.struts2.config.DefaultBeanSelectionProvider} links name "struts" 408 with "default" (aliasing it) 409 410 If name won't be defined then the "default" value will be used {@link com.opensymphony.xwork2.inject.Container#DEFAULT_NAME} 411 and {@link com.opensymphony.xwork2.inject.Inject} 412 --> 413 <!DOCTYPE struts PUBLIC 414 "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" 415 "http://struts.apache.org/dtds/struts-2.5.dtd"> 416 417 <struts> 418 419 <constant name="struts.excludedClasses" 420 value=" 421 java.lang.Object, 422 java.lang.Runtime, 423 java.lang.System, 424 java.lang.Class, 425 java.lang.ClassLoader, 426 java.lang.Shutdown, 427 java.lang.ProcessBuilder, 428 ognl.OgnlContext, 429 ognl.ClassResolver, 430 ognl.TypeConverter, 431 ognl.MemberAccess, 432 ognl.DefaultMemberAccess, 433 com.opensymphony.xwork2.ognl.SecurityMemberAccess, 434 com.opensymphony.xwork2.ActionContext" /> 435 436 <!-- this must be valid regex, each '.' in package name must be escaped! --> 437 <!-- it's more flexible but slower than simple string comparison --> 438 <!-- constant name="struts.excludedPackageNamePatterns" value="^java\.lang\..*,^ognl.*,^(?!javax\.servlet\..+)(javax\..+)" / --> 439 440 <!-- this is simpler version of the above used with string comparison --> 441 <constant name="struts.excludedPackageNames" value="java.lang.,ognl,javax" /> 442 443 <bean class="com.opensymphony.xwork2.ObjectFactory" name="struts"/> 444 <bean type="com.opensymphony.xwork2.factory.ResultFactory" name="struts" class="org.apache.struts2.factory.StrutsResultFactory" /> 445 <bean type="com.opensymphony.xwork2.factory.ActionFactory" name="struts" class="com.opensymphony.xwork2.factory.DefaultActionFactory" /> 446 <bean type="com.opensymphony.xwork2.factory.ConverterFactory" name="struts" class="com.opensymphony.xwork2.factory.DefaultConverterFactory" /> 447 <bean type="com.opensymphony.xwork2.factory.InterceptorFactory" name="struts" class="com.opensymphony.xwork2.factory.DefaultInterceptorFactory" /> 448 <bean type="com.opensymphony.xwork2.factory.ValidatorFactory" name="struts" class="com.opensymphony.xwork2.factory.DefaultValidatorFactory" /> 449 <bean type="com.opensymphony.xwork2.factory.UnknownHandlerFactory" name="struts" class="com.opensymphony.xwork2.factory.DefaultUnknownHandlerFactory" /> 450 451 <bean type="com.opensymphony.xwork2.FileManager" class="com.opensymphony.xwork2.util.fs.DefaultFileManager" name="system" scope="singleton"/> 452 <bean type="com.opensymphony.xwork2.FileManagerFactory" class="com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory" name="struts" scope="singleton"/> 453 454 <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="struts" class="org.apache.struts2.factory.StrutsActionProxyFactory"/> 455 <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="prefix" class="org.apache.struts2.factory.PrefixBasedActionProxyFactory"/> 456 457 <bean type="com.opensymphony.xwork2.conversion.ObjectTypeDeterminer" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultObjectTypeDeterminer"/> 458 459 <bean type="com.opensymphony.xwork2.util.PatternMatcher" name="struts" class="com.opensymphony.xwork2.util.WildcardHelper" /> 460 <bean type="com.opensymphony.xwork2.util.PatternMatcher" name="namedVariable" class="com.opensymphony.xwork2.util.NamedVariablePatternMatcher"/> 461 <bean type="com.opensymphony.xwork2.util.PatternMatcher" name="regex" class="org.apache.struts2.util.RegexPatternMatcher"/> 462 463 <bean type="org.apache.struts2.util.ContentTypeMatcher" name="struts" class="org.apache.struts2.util.DefaultContentTypeMatcher"/> 464 465 <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="struts" class="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" /> 466 <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="composite" class="org.apache.struts2.dispatcher.mapper.CompositeActionMapper" /> 467 <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="restful" class="org.apache.struts2.dispatcher.mapper.RestfulActionMapper" /> 468 <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="restful2" class="org.apache.struts2.dispatcher.mapper.Restful2ActionMapper" /> 469 470 <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta" class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="prototype"/> 471 <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta-stream" class="org.apache.struts2.dispatcher.multipart.JakartaStreamMultiPartRequest" scope="prototype"/> 472 473 <bean type="org.apache.struts2.views.TagLibraryDirectiveProvider" name="s" class="org.apache.struts2.views.DefaultTagLibrary" /> 474 <bean type="org.apache.struts2.views.TagLibraryModelProvider" name="s" class="org.apache.struts2.views.DefaultTagLibrary" /> 475 476 <bean class="org.apache.struts2.views.freemarker.FreemarkerThemeTemplateLoader" /> 477 <bean class="org.apache.struts2.views.freemarker.FreemarkerManager" name="struts" /> 478 <bean class="org.apache.struts2.views.velocity.VelocityManager" name="struts" optional="true" /> 479 480 <bean class="org.apache.struts2.components.template.TemplateEngineManager" /> 481 <bean type="org.apache.struts2.components.template.TemplateEngine" name="ftl" class="org.apache.struts2.components.template.FreemarkerTemplateEngine" /> 482 <bean type="org.apache.struts2.components.template.TemplateEngine" name="vm" class="org.apache.struts2.components.template.VelocityTemplateEngine" /> 483 <bean type="org.apache.struts2.components.template.TemplateEngine" name="jsp" class="org.apache.struts2.components.template.JspTemplateEngine" /> 484 485 <bean type="com.opensymphony.xwork2.conversion.impl.XWorkConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.XWorkConverter" /> 486 487 <bean type="com.opensymphony.xwork2.conversion.ConversionPropertiesProcessor" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultConversionPropertiesProcessor" /> 488 <bean type="com.opensymphony.xwork2.conversion.ConversionFileProcessor" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultConversionFileProcessor" /> 489 <bean type="com.opensymphony.xwork2.conversion.ConversionAnnotationProcessor" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultConversionAnnotationProcessor" /> 490 <bean type="com.opensymphony.xwork2.conversion.TypeConverterCreator" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultTypeConverterCreator" /> 491 <bean type="com.opensymphony.xwork2.conversion.TypeConverterHolder" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultTypeConverterHolder" /> 492 493 <bean class="com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter" /> 494 495 <bean type="com.opensymphony.xwork2.conversion.impl.CollectionConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.CollectionConverter" scope="singleton"/> 496 <bean type="com.opensymphony.xwork2.conversion.impl.ArrayConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.ArrayConverter" scope="singleton"/> 497 <bean type="com.opensymphony.xwork2.conversion.impl.DateConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.DateConverter" scope="singleton"/> 498 <bean type="com.opensymphony.xwork2.conversion.impl.NumberConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.NumberConverter" scope="singleton"/> 499 <bean type="com.opensymphony.xwork2.conversion.impl.StringConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.StringConverter" scope="singleton"/> 500 501 <bean type="com.opensymphony.xwork2.TextProvider" name="struts" class="com.opensymphony.xwork2.TextProviderSupport" scope="prototype" /> 502 <bean type="com.opensymphony.xwork2.LocaleProvider" name="struts" class="com.opensymphony.xwork2.DefaultLocaleProvider" scope="singleton" /> 503 504 <bean type="org.apache.struts2.components.UrlRenderer" name="struts" class="org.apache.struts2.components.ServletUrlRenderer"/> 505 <bean type="org.apache.struts2.views.util.UrlHelper" name="struts" class="org.apache.struts2.views.util.DefaultUrlHelper"/> 506 507 <bean type="com.opensymphony.xwork2.util.ValueStackFactory" name="struts" class="com.opensymphony.xwork2.ognl.OgnlValueStackFactory" /> 508 <bean type="com.opensymphony.xwork2.util.reflection.ReflectionProvider" name="struts" class="com.opensymphony.xwork2.ognl.OgnlReflectionProvider" /> 509 <bean type="com.opensymphony.xwork2.util.reflection.ReflectionContextFactory" name="struts" class="com.opensymphony.xwork2.ognl.OgnlReflectionContextFactory" /> 510 511 <bean type="com.opensymphony.xwork2.TextProvider" name="system" class="com.opensymphony.xwork2.DefaultTextProvider" /> 512 <bean type="com.opensymphony.xwork2.conversion.NullHandler" name="java.lang.Object" class="com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler" /> 513 514 <bean type="com.opensymphony.xwork2.validator.ActionValidatorManager" name="struts" class="com.opensymphony.xwork2.validator.AnnotationActionValidatorManager" /> 515 <bean type="com.opensymphony.xwork2.validator.ActionValidatorManager" name="no-annotations" class="com.opensymphony.xwork2.validator.DefaultActionValidatorManager" /> 516 517 <bean type="com.opensymphony.xwork2.validator.ValidatorFactory" class="com.opensymphony.xwork2.validator.DefaultValidatorFactory"/> 518 <bean type="com.opensymphony.xwork2.validator.ValidatorFileParser" class="com.opensymphony.xwork2.validator.DefaultValidatorFileParser" /> 519 520 <bean class="com.opensymphony.xwork2.ognl.OgnlUtil" /> 521 522 <bean type="com.opensymphony.xwork2.util.TextParser" name="struts" class="com.opensymphony.xwork2.util.OgnlTextParser" scope="singleton"/> 523 524 <bean type="ognl.PropertyAccessor" name="com.opensymphony.xwork2.util.CompoundRoot" class="com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor" /> 525 <bean type="ognl.PropertyAccessor" name="java.lang.Object" class="com.opensymphony.xwork2.ognl.accessor.ObjectAccessor" /> 526 <bean type="ognl.PropertyAccessor" name="java.util.Iterator" class="com.opensymphony.xwork2.ognl.accessor.XWorkIteratorPropertyAccessor" /> 527 <bean type="ognl.PropertyAccessor" name="java.util.Enumeration" class="com.opensymphony.xwork2.ognl.accessor.XWorkEnumerationAccessor" /> 528 <bean type="ognl.PropertyAccessor" name="java.util.List" class="com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor" /> 529 <bean type="ognl.PropertyAccessor" name="java.util.Set" class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor" /> 530 <bean type="ognl.PropertyAccessor" name="java.util.Map" class="com.opensymphony.xwork2.ognl.accessor.XWorkMapPropertyAccessor" /> 531 <bean type="ognl.PropertyAccessor" name="java.util.Collection" class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor" /> 532 <bean type="ognl.PropertyAccessor" name="com.opensymphony.xwork2.ognl.ObjectProxy" class="com.opensymphony.xwork2.ognl.accessor.ObjectProxyPropertyAccessor" /> 533 <bean type="ognl.PropertyAccessor" name="org.apache.struts2.dispatcher.HttpParameters" class="com.opensymphony.xwork2.ognl.accessor.HttpParametersPropertyAccessor" /> 534 <bean type="ognl.PropertyAccessor" name="org.apache.struts2.dispatcher.Parameter" class="com.opensymphony.xwork2.ognl.accessor.ParameterPropertyAccessor" /> 535 536 <bean type="ognl.MethodAccessor" name="java.lang.Object" class="com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor" /> 537 <bean type="ognl.MethodAccessor" name="com.opensymphony.xwork2.util.CompoundRoot" class="com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor" /> 538 539 <bean class="org.apache.struts2.views.jsp.ui.OgnlTool" /> 540 541 <bean type="org.apache.struts2.dispatcher.StaticContentLoader" class="org.apache.struts2.dispatcher.DefaultStaticContentLoader" name="struts" /> 542 <bean type="com.opensymphony.xwork2.UnknownHandlerManager" class="com.opensymphony.xwork2.DefaultUnknownHandlerManager" name="struts" /> 543 544 <bean type="org.apache.struts2.dispatcher.DispatcherErrorHandler" name="struts" class="org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler" /> 545 546 <constant name="struts.dispatcher.errorHandler" value="struts" /> 547 548 <!-- Silly workarounds for OGNL since there is currently no way to flush its internal caches --> 549 <bean type="ognl.PropertyAccessor" name="java.util.ArrayList" class="com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor" /> 550 <bean type="ognl.PropertyAccessor" name="java.util.HashSet" class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor" /> 551 <bean type="ognl.PropertyAccessor" name="java.util.HashMap" class="com.opensymphony.xwork2.ognl.accessor.XWorkMapPropertyAccessor" /> 552 553 <bean type="com.opensymphony.xwork2.security.ExcludedPatternsChecker" name="struts" class="com.opensymphony.xwork2.security.DefaultExcludedPatternsChecker" scope="prototype" /> 554 <bean type="com.opensymphony.xwork2.security.AcceptedPatternsChecker" name="struts" class="com.opensymphony.xwork2.security.DefaultAcceptedPatternsChecker" scope="prototype" /> 555 556 <bean type="com.opensymphony.xwork2.config.providers.ValueSubstitutor" class="com.opensymphony.xwork2.config.providers.EnvsValueSubstitutor" scope="singleton"/> 557 558 <package name="struts-default" abstract="true" strict-method-invocation="true"> 559 <result-types> 560 <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/> 561 <result-type name="dispatcher" class="org.apache.struts2.result.ServletDispatcherResult" default="true"/> 562 <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/> 563 <result-type name="httpheader" class="org.apache.struts2.result.HttpHeaderResult"/> 564 <result-type name="redirect" class="org.apache.struts2.result.ServletRedirectResult"/> 565 <result-type name="redirectAction" class="org.apache.struts2.result.ServletActionRedirectResult"/> 566 <result-type name="stream" class="org.apache.struts2.result.StreamResult"/> 567 <result-type name="velocity" class="org.apache.struts2.result.VelocityResult"/> 568 <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/> 569 <result-type name="plainText" class="org.apache.struts2.result.PlainTextResult" /> 570 <result-type name="postback" class="org.apache.struts2.result.PostbackResult" /> 571 </result-types> 572 573 <interceptors> 574 <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/> 575 <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/> 576 <interceptor name="chain" class="com.opensymphony.xwork2.interceptor.ChainingInterceptor"/> 577 <interceptor name="conversionError" class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/> 578 <interceptor name="cookie" class="org.apache.struts2.interceptor.CookieInterceptor"/> 579 <interceptor name="cookieProvider" class="org.apache.struts2.interceptor.CookieProviderInterceptor"/> 580 <interceptor name="clearSession" class="org.apache.struts2.interceptor.ClearSessionInterceptor" /> 581 <interceptor name="createSession" class="org.apache.struts2.interceptor.CreateSessionInterceptor" /> 582 <interceptor name="debugging" class="org.apache.struts2.interceptor.debugging.DebuggingInterceptor" /> 583 <interceptor name="execAndWait" class="org.apache.struts2.interceptor.ExecuteAndWaitInterceptor"/> 584 <interceptor name="exception" class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/> 585 <interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/> 586 <interceptor name="i18n" class="org.apache.struts2.interceptor.I18nInterceptor"/> 587 <interceptor name="logger" class="com.opensymphony.xwork2.interceptor.LoggingInterceptor"/> 588 <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/> 589 <interceptor name="scopedModelDriven" class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"/> 590 <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/> 591 <interceptor name="actionMappingParams" class="org.apache.struts2.interceptor.ActionMappingParametersInteceptor"/> 592 <interceptor name="prepare" class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/> 593 <interceptor name="staticParams" class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/> 594 <interceptor name="scope" class="org.apache.struts2.interceptor.ScopeInterceptor"/> 595 <interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/> 596 <interceptor name="timer" class="com.opensymphony.xwork2.interceptor.TimerInterceptor"/> 597 <interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/> 598 <interceptor name="tokenSession" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"/> 599 <interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/> 600 <interceptor name="workflow" class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"/> 601 <interceptor name="store" class="org.apache.struts2.interceptor.MessageStoreInterceptor" /> 602 <interceptor name="checkbox" class="org.apache.struts2.interceptor.CheckboxInterceptor" /> 603 <interceptor name="datetime" class="org.apache.struts2.interceptor.DateTextFieldInterceptor" /> 604 <interceptor name="profiling" class="org.apache.struts2.interceptor.ProfilingActivationInterceptor" /> 605 <interceptor name="roles" class="org.apache.struts2.interceptor.RolesInterceptor" /> 606 <interceptor name="annotationWorkflow" class="com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor" /> 607 <interceptor name="multiselect" class="org.apache.struts2.interceptor.MultiselectInterceptor" /> 608 609 <!-- Basic stack --> 610 <interceptor-stack name="basicStack"> 611 <interceptor-ref name="exception"/> 612 <interceptor-ref name="servletConfig"/> 613 <interceptor-ref name="prepare"/> 614 <interceptor-ref name="checkbox"/> 615 <interceptor-ref name="datetime"/> 616 <interceptor-ref name="multiselect"/> 617 <interceptor-ref name="actionMappingParams"/> 618 <interceptor-ref name="params"/> 619 <interceptor-ref name="conversionError"/> 620 </interceptor-stack> 621 622 <!-- Sample validation and workflow stack --> 623 <interceptor-stack name="validationWorkflowStack"> 624 <interceptor-ref name="basicStack"/> 625 <interceptor-ref name="validation"/> 626 <interceptor-ref name="workflow"/> 627 </interceptor-stack> 628 629 <!-- Sample file upload stack --> 630 <interceptor-stack name="fileUploadStack"> 631 <interceptor-ref name="fileUpload"/> 632 <interceptor-ref name="basicStack"/> 633 </interceptor-stack> 634 635 <!-- Sample model-driven stack --> 636 <interceptor-stack name="modelDrivenStack"> 637 <interceptor-ref name="modelDriven"/> 638 <interceptor-ref name="basicStack"/> 639 </interceptor-stack> 640 641 <!-- Sample action chaining stack --> 642 <interceptor-stack name="chainStack"> 643 <interceptor-ref name="chain"/> 644 <interceptor-ref name="basicStack"/> 645 </interceptor-stack> 646 647 <!-- Sample i18n stack --> 648 <interceptor-stack name="i18nStack"> 649 <interceptor-ref name="i18n"/> 650 <interceptor-ref name="basicStack"/> 651 </interceptor-stack> 652 653 <!-- An example of the paramsPrepareParams trick. This stack 654 is exactly the same as the defaultStack, except that it 655 includes one extra interceptor before the prepare interceptor: 656 the params interceptor. 657 658 This is useful for when you wish to apply parameters directly 659 to an object that you wish to load externally (such as a DAO 660 or database or service layer), but can't load that object 661 until at least the ID parameter has been loaded. By loading 662 the parameters twice, you can retrieve the object in the 663 prepare() method, allowing the second params interceptor to 664 apply the values on the object. --> 665 <interceptor-stack name="paramsPrepareParamsStack"> 666 <interceptor-ref name="exception"/> 667 <interceptor-ref name="alias"/> 668 <interceptor-ref name="i18n"/> 669 <interceptor-ref name="checkbox"/> 670 <interceptor-ref name="datetime"/> 671 <interceptor-ref name="multiselect"/> 672 <interceptor-ref name="params"/> 673 <interceptor-ref name="servletConfig"/> 674 <interceptor-ref name="prepare"/> 675 <interceptor-ref name="chain"/> 676 <interceptor-ref name="modelDriven"/> 677 <interceptor-ref name="fileUpload"/> 678 <interceptor-ref name="staticParams"/> 679 <interceptor-ref name="actionMappingParams"/> 680 <interceptor-ref name="params"/> 681 <interceptor-ref name="conversionError"/> 682 <interceptor-ref name="validation"> 683 <param name="excludeMethods">input,back,cancel,browse</param> 684 </interceptor-ref> 685 <interceptor-ref name="workflow"> 686 <param name="excludeMethods">input,back,cancel,browse</param> 687 </interceptor-ref> 688 </interceptor-stack> 689 690 <!-- A complete stack with all the common interceptors in place. 691 Generally, this stack should be the one you use, though it 692 may do more than you need. Also, the ordering can be 693 switched around (ex: if you wish to have your servlet-related 694 objects applied before prepare() is called, you'd need to move 695 servletConfig interceptor up. 696 697 This stack also excludes from the normal validation and workflow 698 the method names input, back, and cancel. These typically are 699 associated with requests that should not be validated. 700 --> 701 <interceptor-stack name="defaultStack"> 702 <interceptor-ref name="exception"/> 703 <interceptor-ref name="alias"/> 704 <interceptor-ref name="servletConfig"/> 705 <interceptor-ref name="i18n"/> 706 <interceptor-ref name="prepare"/> 707 <interceptor-ref name="chain"/> 708 <interceptor-ref name="scopedModelDriven"/> 709 <interceptor-ref name="modelDriven"/> 710 <interceptor-ref name="fileUpload"/> 711 <interceptor-ref name="checkbox"/> 712 <interceptor-ref name="datetime"/> 713 <interceptor-ref name="multiselect"/> 714 <interceptor-ref name="staticParams"/> 715 <interceptor-ref name="actionMappingParams"/> 716 <interceptor-ref name="params"/> 717 <interceptor-ref name="conversionError"/> 718 <interceptor-ref name="validation"> 719 <param name="excludeMethods">input,back,cancel,browse</param> 720 </interceptor-ref> 721 <interceptor-ref name="workflow"> 722 <param name="excludeMethods">input,back,cancel,browse</param> 723 </interceptor-ref> 724 <interceptor-ref name="debugging"/> 725 </interceptor-stack> 726 727 <!-- The completeStack is here for backwards compatibility for 728 applications that still refer to the defaultStack by the 729 old name --> 730 <interceptor-stack name="completeStack"> 731 <interceptor-ref name="defaultStack"/> 732 </interceptor-stack> 733 734 <!-- Sample execute and wait stack. 735 Note: execAndWait should always be the *last* interceptor. --> 736 <interceptor-stack name="executeAndWaitStack"> 737 <interceptor-ref name="execAndWait"> 738 <param name="excludeMethods">input,back,cancel</param> 739 </interceptor-ref> 740 <interceptor-ref name="defaultStack"/> 741 <interceptor-ref name="execAndWait"> 742 <param name="excludeMethods">input,back,cancel</param> 743 </interceptor-ref> 744 </interceptor-stack> 745 746 </interceptors> 747 748 <default-interceptor-ref name="defaultStack"/> 749 750 <default-class-ref class="com.opensymphony.xwork2.ActionSupport" /> 751 752 <global-allowed-methods>execute,input,back,cancel,browse,save,delete,list,index</global-allowed-methods> 753 754 </package> 755 756 </struts>
<bean>標籤express
bean標籤有一個必須屬性那就是class,指定類名,基本上不多須要擴展,主要有兩個做用apache
|- 建立的Bean實例做爲Struts2框架的核心組件使用。服務器
|- Bean的靜態方法須要一個值注入。restful
六個屬性:cookie
|-class:指定類名session
|-type:指定實現的接口app
|-name:指定惟一的名字
|-scope:指定做用範圍(default
, singleton
, request
, session
, thread
)
|-static:指定是否是須要注入靜態方法
|-sptional:指定這個bean是否是可選的
<constant/>標籤
用來定製容器的一些屬性,好比限制上傳文件的大小之類的,指明具體實現哪一個接口
|-name:常量的名字
|-value:常量的值
<include/>標籤
用來引入配置文件
例:
<
include
file
=
"Hello.xml"
/>
<package/>標籤
|- name(必須):定義一個包的名字,能夠給別的包引用
|- extends:用來繼承別的包;例如繼承默認的包extends="struts-default",繼承多個包的時候用逗號分隔
|- namespace:用來劃分模塊,默認的namespace是一個""(空字符串),在訪問的時候須要在路徑上加上namespace,在不一樣的namespace裏面能夠有相同名字的action
|-abstract:定義一個抽象包,包裏不須要定義action,默認的struts-default包就是一個抽象包
<result-types/>標籤
在<result-types>標籤裏面能夠定義不少個<result-type>
一個action在執行完以後,會返回一個字符串,這個字符串的值就用來選擇一個result,返回到出力中。這個字符串的值在ActionSupport類中提供瞭如下幾個固定值,固然咱們也能夠根據本身的實際狀況來自定義。
String SUCCESS="success";
String NONE="none";
String EOOR="error";
String INPUT="input";
String LOGIN="login";
還能夠經過default選項來把這個result設置爲默認的result,當沒有其餘的result匹配的時候,這個默認的就會被匹配。
在<result/>標籤中,除了須要提供一個匹配的名字外,還有一個可選的type以下:
Chain Result:用來鏈接到另外一個action
Dispatcher Result:轉發(默認)
Redirect Reslut:重定向
Redirect Action Result:用來重定向到一個action
固然還有 HttpHeader Result、FreeMarker Result、Stream Result、Velocity Result、XSL Result、PlainText Result、Tiles 2 Result、Tiles 3 Result、Postback Result、JSON Result等等
全局reslult
有的時候一些result是不少地方都須要使用的,就能夠直接定義一個global-result,而後在其餘地方均可以引用它。
<global-results> <result name="error">/Error.jsp</result> <result name="invalid.token">/Error.jsp</result> <result name="login" type="redirectAction">Logon!input</result> </global-results>
在給result指定跳轉的目的地的時候,還可使用動態的result,使用EL表達式來實現訪問action的屬性。就像使用Struts2的標籤同樣。
<interceptors/>標籤
在interceptors標籤裏面能夠定義多個</interceptor>和<interceptor-stack/>
示例:
1 <package name="default" extends="struts-default"> 2 <interceptors> 3 <interceptor name="timer" class=".."/> 4 <interceptor name="logger" class=".."/> 5 <interceptor-stack name="myStack"> 6 <interceptor-ref name="timer"/> 7 <interceptor-ref name="logger"/> 8 </interceptor-stack> 9 </interceptors> 10 11 <action name="login" 12 class="tutuorial.Login"> 13 <interceptor-ref name="myStack"/> 14 <result name="input">login.jsp</result> 15 <result name="success" 16 type="redirectAction">/secure/home</result> 17 </action> 18 </package>
<action/>標籤
|-name:給action指定一個惟一的名字
|-class:action對應的類
|-method:指定類的入口方法
|-converter:類型轉換器
在action標籤中,支持使用通配符(wildcard),
<default-action-ref/>
當一個請求的action name不能找到匹配的時候,就能夠經過這個指定一個默認的,通常用於指定頁面找不到的404頁面。
通配符
例:
<action name="/edit*" class="org.apache.struts.webapp.example.Edit{1}Action"> <result name="failure">/mainMenu.jsp</result> <result>{1}.jsp</result> </action>
*:匹配零個或多個字符,除了‘/’
**:匹配零個或多個字符,包括‘/’
\*:匹配'*'
\\:匹配‘/’