struts2 配置静态资源
Struts2框架有两个核心配置文件:struts.xml和Struts2默认属性文件default.properties(在struts2-core-2.3.20.jar中)
default.properties可以通过自己在classpath下写一个struts.properties文件进行定制改写
为什么是struts.properties,这可以看org.apache.struts2.config下的DefaultSettings和PropertiesSettings源码
DefaultSettings.java
1
2
3
4
5
6
7
8
9
10
|
public DefaultSettings() { ArrayList<Settings> list = new ArrayList<Settings>(); // stuts.properties, default.properties try { list.add( new PropertiesSettings( "struts" )); } catch (Exception e) { log.warn( "DefaultSettings: Could not find or error in struts.properties" , e); } |
PropertiesSettings.java
1
2
3
4
5
6
7
8
9
10
11
|
public PropertiesSettings(String name) { URL settingsUrl = ClassLoaderUtil.getResource(name + ".properties" , getClass()); if (settingsUrl == null ) { if (LOG.isDebugEnabled()) { LOG.debug(name + ".properties missing" ); } settings = new LocatableProperties(); return ; } |
也可以把你想写在struts.properties的自定义配置写在struts.xml文件下<constant>节点中,java培训如果同时都在两个文件配置了,一个相同的项目, 先加载 struts.xml,再加载struts.properties也就是说 struts.properties 是可以覆盖 struts.xml里面的配置的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<constant name= "struts.devMode" value= "false" /> <constant name= "struts.i18n.encoding" value= "UTF-8" /> <constant name= "struts.action.extension" value= "action," /> <constant name= "struts.objectFactory" value= "spring" /> <constant name= "struts.custom.i18n.resources" value= "ApplicationResources,errors" /> <constant name= "struts.multipart.maxSize" value= "2097152" /> <constant name= "struts.ui.theme" value= "css_xhtml" /> <constant name= "struts.codebehind.pathPrefix" value= "/WEB-INF/pages/" /> <constant name= "struts.enable.SlashesInActionNames" value= "true" /> <constant name= "struts.convention.action.disableScanning" value= "true" /> <constant name= "struts.mapper.alwaysSelectFullNamespace" value= "false" /> <!-- Allow <s:submit> to call method names directly --> <constant name= "struts.enable.DynamicMethodInvocation" value= "true" /> <constant name= "struts.multipart.saveDir" value= "/tmp" ></constant> |
在strut源码StrutsConstants.class包含了所有可配置项
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
|
package org.apache.struts2; import org.apache.struts2.dispatcher.mapper.CompositeActionMapper; /** * This class provides a central location for framework configuration keys * used to retrieve and store Struts configuration settings. */ public final class StrutsConstants { /** Whether Struts is in development mode or not */ public static final String STRUTS_DEVMODE = "struts.devMode" ; /** Whether the localization messages should automatically be reloaded */ public static final String STRUTS_I18N_RELOAD = "struts.i18n.reload" ; /** The encoding to use for localization messages */ public static final String STRUTS_I18N_ENCODING = "struts.i18n.encoding" ; /** Whether to reload the XML configuration or not */ public static final String STRUTS_CONFIGURATION_XML_RELOAD = "struts.configuration.xml.reload" ; /** The URL extension to use to determine if the request is meant for a Struts action */ public static final String STRUTS_ACTION_EXTENSION = "struts.action.extension" ; /** Comma separated list of patterns (java.util.regex.Pattern) to be excluded from Struts2-processing */ public static final String STRUTS_ACTION_EXCLUDE_PATTERN = "struts.action.excludePattern" ; /** Whether to use the alterative syntax for the tags or not */ public static final String STRUTS_TAG_ALTSYNTAX = "struts.tag.altSyntax" ; /** The HTTP port used by Struts URLs */ public static final String STRUTS_URL_HTTP_PORT = "struts.url.http.port" ; /** The HTTPS port used by Struts URLs */ public static final String STRUTS_URL_HTTPS_PORT = "struts.url.https.port" ; /** The default includeParams method to generate Struts URLs */ public static final String STRUTS_URL_INCLUDEPARAMS = "struts.url.includeParams" ; public static final String STRUTS_URL_RENDERER = "struts.urlRenderer" ; /** The com.opensymphony.xwork2.ObjectFactory implementation class */ public static final String STRUTS_OBJECTFACTORY = "struts.objectFactory" ; public static final String STRUTS_OBJECTFACTORY_ACTIONFACTORY = "struts.objectFactory.actionFactory" ; public static final String STRUTS_OBJECTFACTORY_RESULTFACTORY = "struts.objectFactory.resultFactory" ; public static final String STRUTS_OBJECTFACTORY_CONVERTERFACTORY = "struts.objectFactory.converterFactory" ; public static final String STRUTS_OBJECTFACTORY_INTERCEPTORFACTORY = "struts.objectFactory.interceptorFactory" ; public static final String STRUTS_OBJECTFACTORY_VALIDATORFACTORY = "struts.objectFactory.validatorFactory" ; public static final String STRUTS_OBJECTFACTORY_UNKNOWNHANDLERFACTORY = "struts.objectFactory.unknownHandlerFactory" ; /** The com.opensymphony.xwork2.util.FileManager implementation class */ public static final String STRUTS_FILE_MANAGER_FACTORY = "struts.fileManagerFactory" ; /** The com.opensymphony.xwork2.util.fs.FileManager implementation class */ public static final String STRUTS_FILE_MANAGER = "struts.fileManager" ; /** The com.opensymphony.xwork2.util.ObjectTypeDeterminer implementation class */ public static final String STRUTS_OBJECTTYPEDETERMINER = "struts.objectTypeDeterminer" ; /** The package containing actions that use Rife continuations */ public static final String STRUTS_CONTINUATIONS_PACKAGE = "struts.continuations.package" ; /** The org.apache.struts2.config.Configuration implementation class */ public static final String STRUTS_CONFIGURATION = "struts.configuration" ; /** The default locale for the Struts application */ public static final String STRUTS_LOCALE = "struts.locale" ; /** Whether to use a Servlet request parameter workaround necessary for some versions of WebLogic */ public static final String STRUTS_DISPATCHER_PARAMETERSWORKAROUND = "struts.dispatcher.parametersWorkaround" ; /** The org.apache.struts2.views.freemarker.FreemarkerManager implementation class */ public static final String STRUTS_FREEMARKER_MANAGER_CLASSNAME = "struts.freemarker.manager.classname" ; @Deprecated /** Cache Freemarker templates, this cache is managed by struts2,instead of native freemarker cache,set STRUTS_FREEMARKER_MRU_MAX_STRONG_SIZE >0&&STRUTS_FREEMARKER_TEMPLATES_CACHE_UPDATE_DELAY>0*/ public static final String STRUTS_FREEMARKER_TEMPLATES_CACHE = "struts.freemarker.templatesCache" ; /** Update freemarker templates cache in seconds*/ public static final String STRUTS_FREEMARKER_TEMPLATES_CACHE_UPDATE_DELAY = "struts.freemarker.templatesCache.updateDelay" ; /** Cache model instances at BeanWrapper level */ public static final String STRUTS_FREEMARKER_BEANWRAPPER_CACHE = "struts.freemarker.beanwrapperCache" ; /** Maximum strong sizing for MruCacheStorage for freemarker */ public static final String STRUTS_FREEMARKER_MRU_MAX_STRONG_SIZE = "struts.freemarker.mru.max.strong.size" ; /** org.apache.struts2.views.velocity.VelocityManager implementation class */ public static final String STRUTS_VELOCITY_MANAGER_CLASSNAME = "struts.velocity.manager.classname" ; /** The Velocity configuration file path */ public static final String STRUTS_VELOCITY_CONFIGFILE = "struts.velocity.configfile" ; /** The location of the Velocity toolbox */ public static final String STRUTS_VELOCITY_TOOLBOXLOCATION = "struts.velocity.toolboxlocation" ; /** List of Velocity context names */ public static final String STRUTS_VELOCITY_CONTEXTS = "struts.velocity.contexts" ; /** The directory containing UI templates. All templates must reside in this directory. */ public static final String STRUTS_UI_TEMPLATEDIR = "struts.ui.templateDir" ; /** The default UI template theme */ public static final String STRUTS_UI_THEME = "struts.ui.theme" ; /** Token to use to indicate start of theme to be expanded. */ public static final String STRUTS_UI_THEME_EXPANSION_TOKEN = "struts.ui.theme.expansion.token" ; /** The maximize size of a multipart request (file upload) */ public static final String STRUTS_MULTIPART_MAXSIZE = "struts.multipart.maxSize" ; /** The directory to use for storing uploaded files */ public static final String STRUTS_MULTIPART_SAVEDIR = "struts.multipart.saveDir" ; /** Declares the buffer size to be used during streaming multipart content to disk. Used only with {@link org.apache.struts2.dispatcher.multipart.JakartaStreamMultiPartRequest} */ public static final String STRUTS_MULTIPART_BUFFERSIZE = "struts.multipart.bufferSize" ; /** * The org.apache.struts2.dispatcher.multipart.MultiPartRequest parser implementation * for a multipart request (file upload) */ public static final String STRUTS_MULTIPART_PARSER = "struts.multipart.parser" ; /** How Spring should autowire. Valid values are 'name', 'type', 'auto', and 'constructor' */ public static final String STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE = "struts.objectFactory.spring.autoWire" ; /** Whether the autowire strategy chosen by STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE is always respected. Defaults * to false, which is the legacy behavior that tries to determine the best strategy for the situation. * @since 2.1.3 */ public static final String STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE_ALWAYS_RESPECT = "struts.objectFactory.spring.autoWire.alwaysRespect" ; /** Whether Spring should use its class cache or not */ public static final String STRUTS_OBJECTFACTORY_SPRING_USE_CLASS_CACHE = "struts.objectFactory.spring.useClassCache" ; /** Uses different logic to construct beans, see https://issues.apache.org/jira/browse/WW-4110 */ public static final String STRUTS_OBJECTFACTORY_SPRING_ENABLE_AOP_SUPPORT = "struts.objectFactory.spring.enableAopSupport" ; /** Whether or not XSLT templates should not be cached */ public static final String STRUTS_XSLT_NOCACHE = "struts.xslt.nocache" ; /** Location of additional configuration properties files to load */ public static final String STRUTS_CUSTOM_PROPERTIES = "struts.custom.properties" ; /** Location of additional localization properties files to load */ public static final String STRUTS_CUSTOM_I18N_RESOURCES = "struts.custom.i18n.resources" ; /** The org.apache.struts2.dispatcher.mapper.ActionMapper implementation class */ public static final String STRUTS_MAPPER_CLASS = "struts.mapper.class" ; /** * A prefix based action mapper that is capable of delegating to other * {@link org.apache.struts2.dispatcher.mapper.ActionMapper}s based on the request's prefix * You can specify different prefixes that will be handled by different mappers */ public static final String PREFIX_BASED_MAPPER_CONFIGURATION = "struts.mapper.prefixMapping" ; /** Whether the Struts filter should serve static content or not */ public static final String STRUTS_SERVE_STATIC_CONTENT = "struts.serve.static" ; /** If static content served by the Struts filter should set browser caching header properties or not */ public static final String STRUTS_SERVE_STATIC_BROWSER_CACHE = "struts.serve.static.browserCache" ; /** Allows one to disable dynamic method invocation from the URL */ public static final String STRUTS_ENABLE_DYNAMIC_METHOD_INVOCATION = "struts.enable.DynamicMethodInvocation" ; /** Whether slashes in action names are allowed or not */ public static final String STRUTS_ENABLE_SLASHES_IN_ACTION_NAMES = "struts.enable.SlashesInActionNames" ; /** Prefix used by {@link CompositeActionMapper} to identify its containing {@link org.apache.struts2.dispatcher.mapper.ActionMapper} class. */ public static final String STRUTS_MAPPER_COMPOSITE = "struts.mapper.composite" ; public static final String STRUTS_ACTIONPROXYFACTORY = "struts.actionProxyFactory" ; public static final String STRUTS_FREEMARKER_WRAPPER_ALT_MAP = "struts.freemarker.wrapper.altMap" ; /** The name of the xwork converter implementation */ public static final String STRUTS_XWORKCONVERTER = "struts.xworkConverter" ; public static final String STRUTS_ALWAYS_SELECT_FULL_NAMESPACE = "struts.mapper.alwaysSelectFullNamespace" ; /** XWork default text provider */ public static final String STRUTS_XWORKTEXTPROVIDER = "struts.xworkTextProvider" ; /** The {@link com.opensymphony.xwork2.LocaleProvider} implementation class */ public static final String STRUTS_LOCALE_PROVIDER = "struts.localeProvider" ; /** The name of the parameter to create when mapping an id (used by some action mappers) */ public static final String STRUTS_ID_PARAMETER_NAME = "struts.mapper.idParameterName" ; /** The name of the parameter to determine whether static method access will be allowed in OGNL expressions or not */ public static final String STRUTS_ALLOW_STATIC_METHOD_ACCESS = "struts.ognl.allowStaticMethodAccess" ; /** The com.opensymphony.xwork2.validator.ActionValidatorManager implementation class */ public static final String STRUTS_ACTIONVALIDATORMANAGER = "struts.actionValidatorManager" ; /** The {@link com.opensymphony.xwork2.util.ValueStackFactory} implementation class */ public static final String STRUTS_VALUESTACKFACTORY = "struts.valueStackFactory" ; /** The {@link com.opensymphony.xwork2.util.reflection.ReflectionProvider} implementation class */ public static final String STRUTS_REFLECTIONPROVIDER = "struts.reflectionProvider" ; /** The {@link com.opensymphony.xwork2.util.reflection.ReflectionContextFactory} implementation class */ public static final String STRUTS_REFLECTIONCONTEXTFACTORY = "struts.reflectionContextFactory" ; /** The {@link com.opensymphony.xwork2.util.PatternMatcher} implementation class */ public static final String STRUTS_PATTERNMATCHER = "struts.patternMatcher" ; /** The {@link org.apache.struts2.dispatcher.StaticContentLoader} implementation class */ public static final String STRUTS_STATIC_CONTENT_LOADER = "struts.staticContentLoader" ; /** The {@link com.opensymphony.xwork2.UnknownHandlerManager} implementation class */ public static final String STRUTS_UNKNOWN_HANDLER_MANAGER = "struts.unknownHandlerManager" ; /** Throw RuntimeException when a property is not found, or the evaluation of the espression fails*/ public static final String STRUTS_EL_THROW_EXCEPTION = "struts.el.throwExceptionOnFailure" ; /** Logs properties that are not found (very verbose) **/ public static final String STRUTS_LOG_MISSING_PROPERTIES = "struts.ognl.logMissingProperties" ; /** Enables caching of parsed OGNL expressions **/ public static final String STRUTS_ENABLE_OGNL_EXPRESSION_CACHE = "struts.ognl.enableExpressionCache" ; /** Enables evaluation of OGNL expressions **/ public static final String STRUTS_ENABLE_OGNL_EVAL_EXPRESSION = "struts.ognl.enableOGNLEvalExpression" ; /** Disables {@link org.apache.struts2.dispatcher.StrutsRequestWrapper} request attribute value stack lookup (JSTL accessibility) **/ public static final String STRUTS_DISABLE_REQUEST_ATTRIBUTE_VALUE_STACK_LOOKUP = "struts.disableRequestAttributeValueStackLookup" ; /** The{@link org.apache.struts2.views.util.UrlHelper} implementation class **/ public static final String STRUTS_URL_HELPER = "struts.view.urlHelper" ; /** {@link com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter} **/ public static final String STRUTS_CONVERTER_COLLECTION = "struts.converter.collection" ; public static final String STRUTS_CONVERTER_ARRAY = "struts.converter.array" ; public static final String STRUTS_CONVERTER_DATE = "struts.converter.date" ; public static final String STRUTS_CONVERTER_NUMBER = "struts.converter.number" ; public static final String STRUTS_CONVERTER_STRING = "struts.converter.string" ; /** Enable handling exceptions by Dispatcher - true by default **/ public static final String STRUTS_HANDLE_EXCEPTION = "struts.handle.exception" ; public static final String STRUTS_CONVERTER_PROPERTIES_PROCESSOR = "struts.converter.properties.processor" ; public static final String STRUTS_CONVERTER_FILE_PROCESSOR = "struts.converter.file.processor" ; public static final String STRUTS_CONVERTER_ANNOTATION_PROCESSOR = "struts.converter.annotation.processor" ; public static final String STRUTS_CONVERTER_CREATOR = "struts.converter.creator" ; public static final String STRUTS_CONVERTER_HOLDER = "struts..converter.holder" ; public static final String STRUTS_EXPRESSION_PARSER = "struts.expression.parser" ; /** actions names' whitelist **/ public static final String STRUTS_ALLOWED_ACTION_NAMES = "struts.allowed.action.names" ; /** enables action: prefix **/ public static final String STRUTS_MAPPER_ACTION_PREFIX_ENABLED = "struts.mapper.action.prefix.enabled" ; /** enables access to actions in other namespaces than current with action: prefix **/ public static final String STRUTS_MAPPER_ACTION_PREFIX_CROSSNAMESPACES = "struts.mapper.action.prefix.crossNamespaces" ; public static final String DEFAULT_TEMPLATE_TYPE_CONFIG_KEY = "struts.ui.templateSuffix" ; /** Allows override default DispatcherErrorHandler **/ public static final String STRUTS_DISPATCHER_ERROR_HANDLER = "struts.dispatcher.errorHandler" ; /** Comma delimited set of excluded classes and package names which cannot be accessed via expressions **/ public static final String STRUTS_EXCLUDED_CLASSES = "struts.excludedClasses" ; public static final String STRUTS_EXCLUDED_PACKAGE_NAME_PATTERNS = "struts.excludedPackageNamePatterns" ; /** Dedicated services to check if passed string is excluded/accepted **/ public static final String STRUTS_EXCLUDED_PATTERNS_CHECKER = "struts.excludedPatterns.checker" ; public static final String STRUTS_ACCEPTED_PATTERNS_CHECKER = "struts.acceptedPatterns.checker" ; /** Constant is used to override framework's default excluded patterns **/ public static final String STRUTS_OVERRIDE_EXCLUDED_PATTERNS = "struts.override.excludedPatterns" ; public static final String STRUTS_OVERRIDE_ACCEPTED_PATTERNS = "struts.override.acceptedPatterns" ; public static final String STRUTS_ADDITIONAL_EXCLUDED_PATTERNS = "struts.additional.excludedPatterns" ; public static final String STRUTS_ADDITIONAL_ACCEPTED_PATTERNS = "struts.additional.acceptedPatterns" ; } |
其中
1
2
|
/** Comma separated list of patterns (java.util.regex.Pattern) to be excluded from Struts2-processing */ public static final String STRUTS_ACTION_EXCLUDE_PATTERN = "struts.action.excludePattern" ; |
保存了不由struts2处理的路径,我们在struts.properties或者struts.xml中配置即可.
struts.action.excludePattern=/dwr/.*,/dwr/test/.*
正则表达式,并非URL匹配地址