struts-default.xml是Struts 2 框架的基础配置文件,为框架提供默认设置,这个文件包含在Struts2-core-2.0.11.jar中,由框架自动加载。
struts-default.xml文件会自动被包含在struts.xml文件中,以提供标准的配置设置而不需要复制其内容。我们在配置strut.xml文件时,给出了下面这句代码
<package name="default" extends="struts-default">
struts-default.xml包就是在struts-default.xml文件中定义的,在这个包中定义了Struts2 内置的结果类型(包括Servlet转发、Servlet重定向、FreeMarker模板输出、XSTL渲染和ActionChainResult等),内置的拦截器,以及由不同拦截器组成的拦截器栈,这些拦截器栈可以直接使用,也可以作为自定义的拦截器栈的基础。在Struts-default.xml文件中最后还定义了默认的拦截器引用。
struts-default代码的详细解释如下:
- <?xml version="1.0" encoding="UTF-8" ?>
- <!--
- /*
- * $Id: struts-default.xml 559615 2007-07-25 21:25:25Z apetrelli $
- *
- * 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.
- */
- -->
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <!--struts2中工厂bean的定义-->
- <bean class="com.opensymphony.xwork2.ObjectFactory" name="xwork" />
- <bean type="com.opensymphony.xwork2.ObjectFactory" name="struts" class="org.apache.struts2.impl.StrutsObjectFactory" />
- <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="xwork" class="com.opensymphony.xwork2.DefaultActionProxyFactory"/>
- <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="struts" class="org.apache.struts2.impl.StrutsActionProxyFactory"/>
- <!--类型检测bean的定义-->
- <bean type="com.opensymphony.xwork2.util.ObjectTypeDeterminer" name="tiger" class="com.opensymphony.xwork2.util.GenericsObjectTypeDeterminer"/>
- <bean type="com.opensymphony.xwork2.util.ObjectTypeDeterminer" name="notiger" class="com.opensymphony.xwork2.util.DefaultObjectTypeDeterminer"/>
- <bean type="com.opensymphony.xwork2.util.ObjectTypeDeterminer" name="struts" class="com.opensymphony.xwork2.util.DefaultObjectTypeDeterminer"/>
- <!--文件上传bean的定义-->
- <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="struts" class="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" />
- <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="composite" class="org.apache.struts2.dispatcher.mapper.CompositeActionMapper" />
- <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="restful" class="org.apache.struts2.dispatcher.mapper.RestfulActionMapper" />
- <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="restful2" class="org.apache.struts2.dispatcher.mapper.Restful2ActionMapper" />
- <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="struts" class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="default" optional="true"/>
- <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta" class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="default" optional="true" />
- <!--标签库bean的定义-->
- <bean type="org.apache.struts2.views.TagLibrary" name="s" class="org.apache.struts2.views.DefaultTagLibrary" />
- <!--一些常用视图bean的定义-->
- <bean class="org.apache.struts2.views.freemarker.FreemarkerManager" name="struts" optional="true"/>
- <bean class="org.apache.struts2.views.velocity.VelocityManager" name="struts" optional="true" />
- <bean class="org.apache.struts2.components.template.TemplateEngineManager" />
- <bean type="org.apache.struts2.components.template.TemplateEngine" name="ftl" class="org.apache.struts2.components.template.FreemarkerTemplateEngine" />
- <bean type="org.apache.struts2.components.template.TemplateEngine" name="vm" class="org.apache.struts2.components.template.VelocityTemplateEngine" />
- <bean type="org.apache.struts2.components.template.TemplateEngine" name="jsp" class="org.apache.struts2.components.template.JspTemplateEngine" />
- <!--类型转换bean的定义-->
- <bean type="com.opensymphony.xwork2.util.XWorkConverter" name="xwork1" class="com.opensymphony.xwork2.util.XWorkConverter" />
- <bean type="com.opensymphony.xwork2.util.XWorkConverter" name="struts" class="com.opensymphony.xwork2.util.AnnotationXWorkConverter" />
- <bean type="com.opensymphony.xwork2.TextProvider" name="xwork1" class="com.opensymphony.xwork2.TextProviderSupport" />
- <bean type="com.opensymphony.xwork2.TextProvider" name="struts" class="com.opensymphony.xwork2.TextProviderSupport" />
- <!--Struts2中一些可以静态注入的bean,也就是不需要实例化的-->
- <bean class="com.opensymphony.xwork2.ObjectFactory" static="true" />
- <bean class="com.opensymphony.xwork2.util.XWorkConverter" static="true" />
- <bean class="com.opensymphony.xwork2.util.OgnlValueStack" static="true" />
- <bean class="org.apache.struts2.dispatcher.Dispatcher" static="true" />
- <bean class="org.apache.struts2.components.Include" static="true" />
- <bean class="org.apache.struts2.dispatcher.FilterDispatcher" static="true" />
- <bean class="org.apache.struts2.views.util.ContextUtil" static="true" />
- <bean class="org.apache.struts2.views.util.UrlHelper" static="true" />
- <!--定义Struts2默认包-->
- <package name="struts-default" abstract="true">
- <!--结果类型的种类-->
- <result-types>
- <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
- <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
- <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
- <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
- <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
- <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
- <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
- <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
- <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
- <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
- <!-- Deprecated name form scheduled for removal in Struts 2.1.0. The camelCase versions are preferred. See ww-1707 -->
- <result-type name="redirect-action" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
- <result-type name="plaintext" class="org.apache.struts2.dispatcher.PlainTextResult" />
- </result-types>
- `<!--Struts2中拦截器的定义-->
- <interceptors>
- <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/>
- <interceptor name="autowiring" class="com.opensymphony.xwork2.<a href="http://lib.csdn.net/base/javaee" class='replace_word' title="Java EE知识库" target='_blank' style='color:#df3434; font-weight:bold;'>spring</a>.interceptor.ActionAutowiringInterceptor"/>
- <interceptor name="chain" class="com.opensymphony.xwork2.interceptor.ChainingInterceptor"/>
- <interceptor name="conversionError" class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>
- <interceptor name="cookie" class="org.apache.struts2.interceptor.CookieInterceptor"/>
- <interceptor name="createSession" class="org.apache.struts2.interceptor.CreateSessionInterceptor" />
- <interceptor name="debugging" class="org.apache.struts2.interceptor.debugging.DebuggingInterceptor" />
- <interceptor name="externalRef" class="com.opensymphony.xwork2.interceptor.ExternalReferencesInterceptor"/>
- <interceptor name="execAndWait" class="org.apache.struts2.interceptor.ExecuteAndWaitInterceptor"/>
- <interceptor name="exception" class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/>
- <interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>
- <interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/>
- <interceptor name="logger" class="com.opensymphony.xwork2.interceptor.LoggingInterceptor"/>
- <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>
- <interceptor name="scopedModelDriven" class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"/>
- <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
- <interceptor name="prepare" class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/>
- <interceptor name="staticParams" class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/>
- <interceptor name="scope" class="org.apache.struts2.interceptor.ScopeInterceptor"/>
- <interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>
- <interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>
- <interceptor name="timer" class="com.opensymphony.xwork2.interceptor.TimerInterceptor"/>
- <interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/>
- <interceptor name="tokenSession" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"/>
- <interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>
- <interceptor name="workflow" class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"/>
- <interceptor name="store" class="org.apache.struts2.interceptor.MessageStoreInterceptor" />
- <interceptor name="checkbox" class="org.apache.struts2.interceptor.CheckboxInterceptor" />
- <interceptor name="profiling" class="org.apache.struts2.interceptor.ProfilingActivationInterceptor" />
- <interceptor name="roles" class="org.apache.struts2.interceptor.RolesInterceptor" />
- <!--一个基本的拦截器栈-->
- <interceptor-stack name="basicStack">
- <interceptor-ref name="exception"/>
- <interceptor-ref name="servletConfig"/>
- <interceptor-ref name="prepare"/>
- <interceptor-ref name="checkbox"/>
- <interceptor-ref name="params"/>
- <interceptor-ref name="conversionError"/>
- </interceptor-stack>
- <!-- 简单的validation and workflow栈 -->
- <interceptor-stack name="validationWorkflowStack">
- <interceptor-ref name="basicStack"/>
- <interceptor-ref name="validation"/>
- <interceptor-ref name="workflow"/>
- </interceptor-stack>
- <!--文件上传的拦截器栈-->
- <interceptor-stack name="fileUploadStack">
- <interceptor-ref name="fileUpload"/>
- <interceptor-ref name="basicStack"/>
- </interceptor-stack>
- <!-- Sample model-driven stack -->
- <interceptor-stack name="modelDrivenStack">
- <interceptor-ref name="modelDriven"/>
- <interceptor-ref name="basicStack"/>
- </interceptor-stack>
- <!--Action链的拦截器栈-->
- <interceptor-stack name="chainStack">
- <interceptor-ref name="chain"/>
- <interceptor-ref name="basicStack"/>
- </interceptor-stack>
- <!--i18n拦截器栈-->
- <interceptor-stack name="i18nStack">
- <interceptor-ref name="i18n"/>
- <interceptor-ref name="basicStack"/>
- </interceptor-stack>
- <!-- An example of the params-prepare-params trick. This stack
- is exactly the same as the defaultStack, except that it
- includes one extra interceptor before the prepare interceptor:
- the params interceptor.
- This is useful for when you wish to apply parameters directly
- to an object that you wish to load externally (such as a DAO
- or database or service layer), but can't load that object
- until at least the ID parameter has been loaded. By loading
- the parameters twice, you can retrieve the object in the
- prepare() method, allowing the second params interceptor to
- apply the values on the object. -->
- <interceptor-stack name="paramsPrepareParamsStack">
- <interceptor-ref name="exception"/>
- <interceptor-ref name="alias"/>
- <interceptor-ref name="params"/>
- <interceptor-ref name="servletConfig"/>
- <interceptor-ref name="prepare"/>
- <interceptor-ref name="i18n"/>
- <interceptor-ref name="chain"/>
- <interceptor-ref name="modelDriven"/>
- <interceptor-ref name="fileUpload"/>
- <interceptor-ref name="checkbox"/>
- <interceptor-ref name="staticParams"/>
- <interceptor-ref name="params"/>
- <interceptor-ref name="conversionError"/>
- <interceptor-ref name="validation">
- <param name="excludeMethods">input,back,cancel</param>
- </interceptor-ref>
- <interceptor-ref name="workflow">
- <param name="excludeMethods">input,back,cancel</param>
- </interceptor-ref>
- </interceptor-stack>
- <!-- A complete stack with all the common interceptors in place.
- Generally, this stack should be the one you use, though it
- may do more than you need. Also, the ordering can be
- switched around (ex: if you wish to have your servlet-related
- objects applied before prepare() is called, you'd need to move
- servlet-config interceptor up.
- This stack also excludes from the normal validation and workflow
- the method names input, back, and cancel. These typically are
- associated with requests that should not be validated.
- -->
- <interceptor-stack name="defaultStack">
- <interceptor-ref name="exception"/>
- <interceptor-ref name="alias"/>
- <interceptor-ref name="servletConfig"/>
- <interceptor-ref name="prepare"/>
- <interceptor-ref name="i18n"/>
- <interceptor-ref name="chain"/>
- <interceptor-ref name="debugging"/>
- <interceptor-ref name="profiling"/>
- <interceptor-ref name="scopedModelDriven"/>
- <interceptor-ref name="modelDriven"/>
- <interceptor-ref name="fileUpload"/>
- <interceptor-ref name="checkbox"/>
- <interceptor-ref name="staticParams"/>
- <interceptor-ref name="params">
- <param name="excludeParams">dojo/..*</param>
- </interceptor-ref>
- <interceptor-ref name="conversionError"/>
- <interceptor-ref name="validation">
- <param name="excludeMethods">input,back,cancel,browse</param>
- </interceptor-ref>
- <interceptor-ref name="workflow">
- <param name="excludeMethods">input,back,cancel,browse</param>
- </interceptor-ref>
- </interceptor-stack>
- <!-- The completeStack is here for backwards compatibility for
- applications that still refer to the defaultStack by the
- old name -->
- <interceptor-stack name="completeStack">
- <interceptor-ref name="defaultStack"/>
- </interceptor-stack>
- <!-- Sample execute and wait stack.
- Note: execAndWait should always be the *last* interceptor. -->
- <interceptor-stack name="executeAndWaitStack">
- <interceptor-ref name="execAndWait">
- <param name="excludeMethods">input,back,cancel</param>
- </interceptor-ref>
- <interceptor-ref name="defaultStack"/>
- <interceptor-ref name="execAndWait">
- <param name="excludeMethods">input,back,cancel</param>
- </interceptor-ref>
- </interceptor-stack>
- <!-- Deprecated name forms scheduled for removal in Struts 2.1.0. The camelCase versions are preferred. See ww-1707 -->
- <interceptor name="external-ref" class="com.opensymphony.xwork2.interceptor.ExternalReferencesInterceptor"/>
- <interceptor name="model-driven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>
- <interceptor name="static-params" class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/>
- <interceptor name="scoped-model-driven" class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"/>
- <interceptor name="servlet-config" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>
- <interceptor name="token-session" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"/>
- </interceptors>
- <default-interceptor-ref name="defaultStack"/>
- </package>
- </struts>