Edit on GitHub << back to Core Developers

# default.properties

> All properties can also be set using Constant Configuration in an XML configuration file.

The framework uses a number of properties that can be changed to fit your needs. To change any of these properties, specify the property key and value in an `default.properties` file. The properties file can be locate anywhere on the classpath, but it is typically found under `/WEB-INF/classes`.

The list of properties can be found in `default.properties` (inside `struts2-core.jar`).

default.properties

    #
    # Licensed to the Apache Software Foundation (ASF) under one
    # or more contributor license agreements.  See the NOTICE file
    # distributed with this work for additional information
    # regarding copyright ownership.  The ASF licenses this file
    # to you under the Apache License, Version 2.0 (the
    # "License"); you may not use this file except in compliance
    # with the License.  You may obtain a copy of the License at
    #
    #  http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing,
    # software distributed under the License is distributed on an
    # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    # KIND, either express or implied.  See the License for the
    # specific language governing permissions and limitations
    # under the License.
    #
    ### START SNIPPET: complete_file

    ### Struts default properties
    ### (can be overridden by a struts.properties file in the root of the classpath)
    ###

    ### This can be used to set your default locale and encoding scheme
    # struts.locale=en_US
    struts.i18n.encoding=UTF-8

    ### if specified, the default object factory can be overridden here
    ### Note: short-hand notation is supported in some cases, such as "spring"
    ###       Alternatively, you can provide a org.apache.struts2.ObjectFactory subclass name here
    # struts.objectFactory = spring

    ### specifies the autoWiring logic when using the SpringObjectFactory.
    ### valid values are: name, type, auto, and constructor (name is the default)
    struts.objectFactory.spring.autoWire = name

    ### indicates to the struts-spring integration if Class instances should be cached
    ### this should, until a future Spring release makes it possible, be left as true
    ### unless you know exactly what you are doing!
    ### valid values are: true, false (true is the default)
    struts.objectFactory.spring.useClassCache = true

    ### ensures the autowire strategy is always respected.
    ### valid values are: true, false (true is the default)
    struts.objectFactory.spring.autoWire.alwaysRespect=true

    ### By default SpringObjectFactory doesn't support AOP
    ### This flag was added just temporally to check if nothing is broken
    ### See https://issues.apache.org/jira/browse/WW-4110
    struts.objectFactory.spring.enableAopSupport = false

    ### if specified, the default object type determiner can be overridden here
    ### Note: short-hand notation is supported in some cases, such as "tiger" or "notiger"
    ###       Alternatively, you can provide a org.apache.struts2.util.ObjectTypeDeterminer implementation name here
    ### Note: By default, org.apache.struts2.util.DefaultObjectTypeDeterminer is used which handles type detection
    ###       using generics. org.apache.struts2.util.GenericsObjectTypeDeterminer was deprecated since XWork 2, it's
    ###       functions are integrated in DefaultObjectTypeDeterminer now.
    ###       To disable tiger support use the "notiger" property value here.
    # struts.objectTypeDeterminer = tiger
    # struts.objectTypeDeterminer = notiger

    ### Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data
    # struts.multipart.parser=cos
    # struts.multipart.parser=jakarta-stream
    struts.multipart.parser=jakarta
    ### Uses jakarta.servlet.context.tempdir by default
    struts.multipart.saveDir=
    struts.multipart.maxSize=2097152
    # Maximum number of uploaded files (files only, not form fields)
    struts.multipart.maxFiles=256
    # Maximum number of non-file form fields (parameters)
    struts.multipart.maxParameterCount=256
    struts.multipart.maxStringLength=4096
    # struts.multipart.maxFileSize=

    ### Load custom property files (does not override struts.properties!)
    # struts.custom.properties=application,org/apache/struts2/extension/custom

    ### How request URLs are mapped to and from actions
    ### Vy default 'struts' name is used which maps to DefaultActionMapper
    # struts.mapper.class=restful

    ### Used by the DefaultActionMapper
    ### You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do
    ### The blank extension allows you to match directory listings as well as pure action names
    ### without interfering with static resources, which can be specified as an empty string
    ### prior to a comma e.g. struts.action.extension=, or struts.action.extension=x,y,z,,
    struts.action.extension=action,,

    ### Used by Dispatcher
    ### If true then Struts serves static content from inside its jar.
    ### If false then the static content must be available at <context_path>/static
    struts.serve.static=true

    ### A path from which a static content is served, it must start with "/"
    ### and it cannot end with "/"
    struts.ui.staticContentPath=/static

    ### Used by FilterDispatcher
    ### This is good for development where one wants changes to the static content be
    ### fetch on each request.
    ### NOTE: This will only have effect if struts.serve.static=true
    ### If true -> Struts will write out header for static contents such that they will
    ###             be cached by web browsers (using Date, Cache-Content, Pragma, Expires)
    ###             headers).
    ### If false -> Struts will write out header for static contents such that they are
    ###            NOT to be cached by web browser (using Cache-Content, Pragma, Expires
    ###            headers)
    struts.serve.static.browserCache=true

    ### WebJars support
    ### Master switch for resolving/serving WebJar assets under <staticContentPath>/webjars/**
    struts.webjars.enabled=true
    ### Optional comma-separated allowlist of WebJar names (empty = all WebJars on the classpath)
    struts.webjars.allowlist=

    ### Set this to false if you wish to disable implicit dynamic method invocation
    ### via the URL request. This includes URLs like foo!bar.action, as well as params
    ### like method:bar (but not action:foo).
    ### An alternative to implicit dynamic method invocation is to use wildcard
    ### mappings, such as <action name="*/*" method="{2}" class="actions.{1}">
    struts.enable.DynamicMethodInvocation = false

    ### Set this to true if you wish to allow slashes in your action names.  If false,
    ### Actions names cannot have slashes, and will be accessible via any directory
    ### prefix.  This is the traditional behavior expected of WebWork applications.
    ### Setting to true is useful when you want to use wildcards and store values
    ### in the URL, to be extracted by wildcard patterns, such as
    ### <action name="*/*" method="{2}" class="actions.{1}"> to match "/foo/edit" or
    ### "/foo/save".
    struts.enable.SlashesInActionNames = false

    ### Disables support for action: prefix
    struts.mapper.action.prefix.enabled = false

    ### Blocks access to actions in other namespace than current with action: prefix
    struts.mapper.action.prefix.crossNamespaces = false

    ### when set to true, Struts will act much more friendly for developers. This
    ### includes:
    ### - struts.i18n.reload = true
    ### - struts.configuration.xml.reload = true
    ### - raising various debug or ignorable problems to errors
    ###   For example: normally a request to foo.action?someUnknownField=true should
    ###                be ignored (given that any value can come from the web and it
    ###                should not be trusted). However, during development, it may be
    ###                useful to know when these errors are happening and be told of
    ###                them right away.
    struts.devMode = false

    ### When set to true, a field's remaining validators are skipped once that field
    ### has a type conversion error, avoiding a duplicate error (WW-2934).
    ### The field's own conversion validator still runs, so its message is still shown.
    ### valid values are: true, false (false is the default)
    struts.validators.skipValidatorsOnConversionError = false

    ### when set to true, resource bundles will be reloaded on _every_ request.
    ### this is good during development, but should never be used in production
    # struts.i18n.reload=false

    ### Standard UI theme
    ### Change this to reflect which path should be used for JSP control tag templates by default
    struts.ui.theme=xhtml
    struts.ui.templateDir=template
    ### Change this to use a different token to indicate template theme expansion
    struts.ui.theme.expansion.token=~~~
    ### Sets the default template type. Either ftl, vm, or jsp
    struts.ui.templateSuffix=ftl

    ### Sets a global flag which will escape html body of Anchor, Submit and Component tag
    ### You can control this flag per tag, e.g.: <s:a ... escapeHtmlTag="true">...</s:a>
    ### and this take precedence over the global flag
    # struts.ui.escapeHtmlBody=true

    ### Configuration reloading
    ### This will cause the configuration to reload struts.xml when it is changed
    # struts.configuration.xml.reload=false

    ### Location of velocity.properties file.  defaults to velocity.properties
    struts.velocity.configfile = velocity.properties

    ### Comma separated list of VelocityContext classnames to chain to the StrutsVelocityContext
    struts.velocity.contexts =

    ### Location of the velocity toolbox
    struts.velocity.toolboxlocation=

    ### used to build URLs, such as the UrlTag
    struts.url.http.port = 80
    struts.url.https.port = 443
    ### possible values are: none, get or all
    struts.url.includeParams = none

    ### Load custom default resource bundles
    # struts.custom.i18n.resources=testmessages,testmessages2

    ### Control whether to search the default resource bundes for messages first (if true) or not (if false).
    ### Default is false (when not set).
    # struts.i18n.search.defaultbundles.first=false

    ### workaround for some app servers that don't handle HttpServletRequest.getParameterMap()
    ### often used for WebLogic, Orion, and OC4J
    struts.dispatcher.parametersWorkaround = false

    ### configure the Freemarker Manager class to be used
    ### Allows user to plug-in customised Freemarker Manager if necessary
    ### MUST extends off org.apache.struts2.views.freemarker.FreemarkerManager
    # struts.freemarker.manager.classname=org.apache.struts2.views.freemarker.FreemarkerManager

    ### Enables caching of FreeMarker templates
    ### Has the same effect as copying the templates under WEB_APP/templates
    # struts.freemarker.templatesCache=false

    ### Enables caching of models on the BeanWrapper
    struts.freemarker.beanwrapperCache=false

    ### See the StrutsBeanWrapper javadocs for more information
    struts.freemarker.wrapper.altMap=true

    ### maxStrongSize for MruCacheStorage for freemarker, when set to 0 SoftCacheStorage which performs better in heavy loaded application
    ### check WW-3766 for more details
    struts.freemarker.mru.max.strong.size=0

    ### Controls FreeMarker whitespace stripping during template compilation.
    ### Automatically disabled when devMode is enabled.
    struts.freemarker.whitespaceStripping=true

    ### Controls whether the compress tag is enabled globally.
    struts.tag.compress.enabled=true

    ### Maximum size (in bytes) of body content that can be compressed.
    ### Content exceeding this limit will be skipped without compression.
    ### Default: 10MB (10485760 bytes)
    struts.tag.compress.maxSize=10485760

    ### Maximum length of body content to include in log messages.
    ### Content longer than this will be truncated with length indicator.
    ### Default: 200 characters
    struts.tag.compress.log.maxLength=200

    ### configure the XSLTResult class to use stylesheet caching.
    ### Set to true for developers and false for production.
    struts.xslt.nocache=false

    ### Whether to always select the namespace to be everything before the last slash or not
    struts.mapper.alwaysSelectFullNamespace=true

    ### Whether to fallback to empty namespace when request namespace does not match any in configuration
    struts.actionConfig.fallbackToEmptyNamespace=false

    ### Whether to allow static field access in OGNL expressions, not recommended!
    struts.ognl.allowStaticFieldAccess=false

    ### Whether OGNL can access these types of classes, not recommended!
    struts.disallowDefaultPackageAccess=true
    struts.disallowProxyObjectAccess=true

    ### Whether OGNL can instantiate arbitrary map classes, not recommended!
    struts.ognl.disallowCustomOgnlMap=true

    ### OGNL context access, highly recommended to uncomment if context access from expressions not needed!
    # struts.ognl.valueStackFallbackToContext=false
    # struts.ognl.excludedNodeTypes=ognl.ASTRootVarRef,ognl.ASTThisVarRef,ognl.ASTVarRef

    ### Whether to enable OGNL allowlist, protects against critical vulnerabilities, strongly recommended to keep enabled!
    struts.allowlist.enable=true
    ### Whether to require @StrutsParameter annotations on Action parameter injection methods
    ### Synergizes with OGNL allowlist, strongly recommended to keep enabled!
    struts.parameters.requireAnnotations=true
    ### Whether to drop @StrutsParameter annotation requirement on simple setter methods
    ### Useful for transitioning legacy applications, but highly recommended to set to false as soon as possible!
    struts.parameters.requireAnnotations.transitionMode=false

    ### Whether ChainingInterceptor enforces @StrutsParameter on the target action when copying properties.
    ### Opt-in hardening; default false preserves legacy chaining behaviour. Only has effect when
    ### struts.parameters.requireAnnotations is also enabled.
    struts.chaining.requireAnnotations=false

    ### Whether to throw a RuntimeException when a property is not found
    ### in an expression, or when the expression evaluation fails
    struts.el.throwExceptionOnFailure=false

    ### Logs as Warnings properties that are not found (very verbose)
    struts.ognl.logMissingProperties=false

    ### Specify the OGNL expression cache factory and BeanInfo cache factory to use.
    ### Currently, the default implementations are used, but can be replaced with custom ones if desired.
    # struts.ognl.expressionCacheFactory=customOgnlExpressionCacheFactory
    # struts.ognl.beanInfoCacheFactory=customOgnlBeanInfoCacheFactory

    ### Specifies the type of cache to use for parsed OGNL expressions. See StrutsConstants class for further information.
    struts.ognl.expressionCacheType=wtlfu

    ### Specifies the maximum cache size for parsed OGNL expressions. This should be configured based on the cache type
    ### chosen and application-specific needs.
    struts.ognl.expressionCacheMaxSize=10000

    ### Specifies the type of cache to use for BeanInfo objects. See StrutsConstants class for further information.
    struts.ognl.beanInfoCacheType=wtlfu

    ### Specifies the maximum cache size for BeanInfo objects. This should be configured based on the cache type chosen and
    ### application-specific needs.
    struts.ognl.beanInfoCacheMaxSize=10000

    ### Specifies the type of cache to use for proxy detection. See StrutsConstants class for further information.
    struts.proxy.cacheType=wtlfu

    ### Specifies the maximum cache size for proxy detection caches.
    struts.proxy.cacheMaxSize=10000

    ### Specifies the ProxyCacheFactory implementation class.
    struts.proxy.cacheFactory=struts

    ### Specifies the ProxyService implementation class.
    struts.proxyService=struts

    ### Indicates if Dispatcher should handle unexpected exceptions by calling sendError()
    ### or simply rethrow it as a ServletException to allow future processing by other frameworks like Spring Security
    struts.handle.exception=true

    ### Applies maximum length allowed on OGNL expressions for security enhancement (optional)
    ###
    ### **WARNING**: If developers change this option (by configuration) they should make sure that they understand
    ###   the implications of setting 'struts.ognl.expressionMaxLength'. They must choose a value large enough to permit
    ###   ALL valid OGNL expressions used within the application. Values larger than the 200-400 range have diminishing
    ###   security value (at which point it is really only a "style guard" for long OGNL expressions in an application.
    ###   Setting a value of null or "" will also disable the feature.
    struts.ognl.expressionMaxLength=256

    ### Defines which named instance of DateFormatter to use, there are two instances:
    ### - simpleDateFormatter (based on SimpleDateFormat)
    ### - dateTimeFormatter (based on Java 8 Date/Time API)
    ### These formatters are using a slightly different patterns, please check JavaDocs of both and more details is in WW-5016
    struts.date.formatter=dateTimeFormatter

    ### Defines which instance of QueryStringBuilder to use, Struts provides just one instance:
    ### - strutsQueryStringBuilder
    ### The builder is used by UrlHelp to create a proper Query String out of provided parameters map
    struts.url.queryStringBuilder=strutsQueryStringBuilder

    ### Defines which instance of QueryStringParser to use, Struts provides just one instance:
    ### - strutsQueryStringParser
    ### The parser is used to parse Query String into a map
    struts.url.queryStringParser=strutsQueryStringParser

    ### Defines which instances of encoder and decoder to use, Struts provides one default implementation for each
    struts.url.encoder=strutsUrlEncoder
    struts.url.decoder=strutsUrlDecoder

    ### Defines source to read nonce value from, possible values are: request, session
    struts.csp.nonceSource=session

    ### Checkbox hidden field prefix
    ### Default prefix for backward compatibility. Change to "struts_checkbox_" for HTML5 validation.
    struts.ui.checkbox.hiddenPrefix=__checkbox_

    ### END SNIPPET: complete_file

Follow @x