You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2017/02/03 13:47:42 UTC

svn commit: r1006138 [2/2] - in /websites/production/struts/content: ./ docs/

Modified: websites/production/struts/content/docs/interceptors.html
==============================================================================
--- websites/production/struts/content/docs/interceptors.html (original)
+++ websites/production/struts/content/docs/interceptors.html Fri Feb  3 13:47:41 2017
@@ -139,15 +139,15 @@ under the License.
     <div class="pagecontent">
         <div class="wiki-content">
             <div id="ConfluenceContent"><div class="confluence-information-macro confluence-information-macro-tip"><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>The default Interceptor stack is designed to serve the needs of most applications. Most applications will <strong>not</strong> need to add Interceptors or change the Interceptor stack.</p></div></div><p>Many Actions share common concerns. Some Actions need input validated. Other Actions may need a file upload to be pre-processed. Another Action might need protection from a double submit. Many Actions need drop-down lists and other controls pre-populated before the page displays.</p><p>The framework makes it easy to share solutions to these concerns using an "Interceptor" strategy. When you request a resource that maps to an "action", the framework invokes the Action object. But, before the Action is executed, the invocatio
 n can be intercepted by another object. After the Action executes, the invocation could be intercepted again. Unsurprisingly, we call these objects "Interceptors."</p><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1480661696460 {padding: 0px;}
-div.rbtoc1480661696460 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1480661696460 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1484828429504 {padding: 0px;}
+div.rbtoc1484828429504 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1484828429504 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1480661696460">
+/*]]>*/</style></p><div class="toc-macro rbtoc1484828429504">
 <ul class="toc-indentation"><li><a shape="rect" href="#Interceptors-UnderstandingInterceptors">Understanding Interceptors</a></li><li><a shape="rect" href="#Interceptors-ConfiguringInterceptors">Configuring Interceptors</a></li><li><a shape="rect" href="#Interceptors-StackingInterceptors">Stacking Interceptors</a>
 <ul class="toc-indentation"><li><a shape="rect" href="#Interceptors-TheDefaultConfiguration">The Default Configuration</a></li></ul>
 </li><li><a shape="rect" href="#Interceptors-FrameworkInterceptors">Framework Interceptors</a>
-<ul class="toc-indentation"><li><a shape="rect" href="#Interceptors-MethodFiltering">Method Filtering</a></li><li><a shape="rect" href="#Interceptors-InterceptorParameterOverriding">Interceptor Parameter Overriding</a></li><li><a shape="rect" href="#Interceptors-InterceptorParameterOverridingInheritance">Interceptor Parameter Overriding Inheritance</a></li><li><a shape="rect" href="#Interceptors-OrderofInterceptorExecution">Order of Interceptor Execution</a></li></ul>
+<ul class="toc-indentation"><li><a shape="rect" href="#Interceptors-MethodFiltering">Method Filtering</a></li><li><a shape="rect" href="#Interceptors-InterceptorParameterOverriding">Interceptor Parameter Overriding</a></li><li><a shape="rect" href="#Interceptors-InterceptorParameterOverridingInheritance">Interceptor Parameter Overriding Inheritance</a></li><li><a shape="rect" href="#Interceptors-Lazyparameters">Lazy parameters</a></li><li><a shape="rect" href="#Interceptors-OrderofInterceptorExecution">Order of Interceptor Execution</a></li></ul>
 </li><li><a shape="rect" href="#Interceptors-FAQ">FAQ</a></li><li><a shape="rect" href="#Interceptors-Next:">Next: Writing Interceptors</a></li></ul>
 </div><h2 id="Interceptors-UnderstandingInterceptors">Understanding Interceptors</h2><p>Interceptors can execute code before and after an Action is invoked. Most of the framework's core functionality is implemented as Interceptors. Features like double-submit guards, type conversion, object population, validation, file upload, page preparation, and more, are all implemented with the help of Interceptors. Each and every Interceptor is pluggable, so you can decide exactly which features an Action needs to support.</p><p>Interceptors can be configured on a per-action basis. Your own custom Interceptors can be mixed-and-matched with the Interceptors bundled with the framework. Interceptors "set the stage" for the Action classes, doing much of the "heavy lifting" before the Action executes.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Action Lifecyle</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceT
 d"><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="interceptors.data/overview.png"></span></p></td></tr></tbody></table></div><p>In some cases, an Interceptor might keep an Action from firing, because of a double-submit or because validation failed. Interceptors can also change the state of an Action before it executes.</p><p>The Interceptors are defined in a stack that specifies the execution order. In some cases, the order of the Interceptors on the stack can be very important.</p><h2 id="Interceptors-ConfiguringInterceptors">Configuring Interceptors</h2><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>struts.xml</b></div><div class="codeContent panelContent pdl">
 <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;package name="default" extends="struts-default"&gt;
@@ -156,13 +156,11 @@ div.rbtoc1480661696460 li {margin-left:
        &lt;interceptor name="logger" class=".."/&gt;
    &lt;/interceptors&gt;
 
-   &lt;action name="login"
-      class="tutorial.Login"&gt;
-        &lt;interceptor-ref name="timer"/&gt;
-        &lt;interceptor-ref name="logger"/&gt;
-         &lt;result name="input"&gt;login.jsp&lt;/result&gt;
-         &lt;result name="success"
-            type="redirectAction"&gt;/secure/home&lt;/result&gt;
+   &lt;action name="login" class="tutorial.Login"&gt;
+      &lt;interceptor-ref name="timer"/&gt;
+      &lt;interceptor-ref name="logger"/&gt;
+      &lt;result name="input"&gt;login.jsp&lt;/result&gt;
+      &lt;result name="success" type="redirectAction"&gt;/secure/home&lt;/result&gt;
    &lt;/action&gt;
 &lt;/package&gt;
 </pre>
@@ -177,13 +175,11 @@ div.rbtoc1480661696460 li {margin-left:
         &lt;/interceptor-stack&gt;
     &lt;/interceptors&gt;
 
-&lt;action name="login"
-     class="tutuorial.Login"&gt;
+   &lt;action name="login" class="tutuorial.Login"&gt;
          &lt;interceptor-ref name="myStack"/&gt;
          &lt;result name="input"&gt;login.jsp&lt;/result&gt;
-         &lt;result name="success"
-             type="redirectAction"&gt;/secure/home&lt;/result&gt;
-&lt;/action&gt;
+         &lt;result name="success" type="redirectAction"&gt;/secure/home&lt;/result&gt;
+   &lt;/action&gt;
 &lt;/package&gt;
 </pre>
 </div></div><p>Looking inside <code>struts-default.xml</code>, we can see how it's done.</p><h3 id="Interceptors-TheDefaultConfiguration">The Default Configuration</h3><p></p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
@@ -250,7 +246,7 @@ div.rbtoc1480661696460 li {margin-left:
     &lt;!-- constant name=&quot;struts.excludedPackageNamePatterns&quot; value=&quot;^java\.lang\..*,^ognl.*,^(?!javax\.servlet\..+)(javax\..+)&quot; / --&gt;
 
     &lt;!-- this is simpler version of the above used with string comparison --&gt;
-    &lt;constant name=&quot;struts.excludedPackageNames&quot; value=&quot;java.lang.,ognl,javax&quot; /&gt;
+    &lt;constant name=&quot;struts.excludedPackageNames&quot; value=&quot;java.lang.,ognl,javax,freemarker.core,freemarker.template&quot; /&gt;
 
     &lt;bean class=&quot;com.opensymphony.xwork2.ObjectFactory&quot; name=&quot;struts&quot;/&gt;
     &lt;bean type=&quot;com.opensymphony.xwork2.factory.ResultFactory&quot; name=&quot;struts&quot; class=&quot;org.apache.struts2.factory.StrutsResultFactory&quot; /&gt;
@@ -650,7 +646,28 @@ includeMethods takes precedence over exc
   &lt;/action&gt;
 &lt;/package&gt;
 </pre>
-</div></div><p>Then, only "allowed" will be overridden for the "postPrepareParameterFilter" interceptor in that action, the other params will be null.</p><h3 id="Interceptors-OrderofInterceptorExecution">Order of Interceptor Execution</h3><p>Interceptors provide an excellent means to wrap before/after processing. The concept reduces code duplication (think AOP).</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>Then, only "allowed" will be overridden for the "postPrepareParameterFilter" interceptor in that action, the other params will be null.</p><h3 id="Interceptors-Lazyparameters">Lazy parameters</h3><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>This functionality was added in Struts 2.5.9</p></div></div><p>It is possible to define an interceptor with parameters evaluated during action invocation. In such case the interceptor must be marked with&#160;<code>WithLazyParams</code>&#160;interface. This must be developer's decision as interceptor must be aware of having those parameters set during invocation and not when the interceptor is created as it happens in normal way.</p><p>Params are evaluated as any other expression starting with from action as a top object.</p><div class="code panel pdl" s
 tyle="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;action name="LazyFoo" class="com.opensymphony.xwork2.SimpleAction"&gt;
+  &lt;result name="success"&gt;result.jsp&lt;/result&gt;
+  &lt;interceptor-ref name="lazy"&gt;
+    &lt;param name="foo"&gt;${bar}&lt;/param&gt;
+  &lt;/interceptor-ref&gt;
+&lt;/action&gt;</pre>
+</div></div><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">public class MockLazyInterceptor extends AbstractInterceptor implements WithLazyParams {
+
+    private String foo = "";
+
+    public void setFoo(String foo) {
+        this.foo = foo;
+    }
+
+    public String intercept(ActionInvocation invocation) throws Exception {
+        ....
+        return invocation.invoke();
+    }
+}</pre>
+</div></div><p>Please be aware that order of interceptors can matter when want to access parameters passed via request as those parameters are set by&#160;<a shape="rect" href="parameters-interceptor.html">Parameters Interceptor</a>.</p><h3 id="Interceptors-OrderofInterceptorExecution">Order of Interceptor Execution</h3><p>Interceptors provide an excellent means to wrap before/after processing. The concept reduces code duplication (think AOP).</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;interceptor-stack name="xaStack"&gt;
   &lt;interceptor-ref name="thisWillRunFirstInterceptor"/&gt;
   &lt;interceptor-ref name="thisWillRunNextInterceptor"/&gt;

Modified: websites/production/struts/content/docs/migration-guide.html
==============================================================================
--- websites/production/struts/content/docs/migration-guide.html (original)
+++ websites/production/struts/content/docs/migration-guide.html Fri Feb  3 13:47:41 2017
@@ -125,7 +125,7 @@ under the License.
 
     <div class="pagecontent">
         <div class="wiki-content">
-            <div id="ConfluenceContent"><p>Getting here from there.</p><h3 id="MigrationGuide-VersionNotes2.5.x">Version Notes 2.5.x</h3><ul><li><a shape="rect" href="version-notes-257.html">Version Notes 2.5.7</a></li><li><a shape="rect" href="version-notes-255.html">Version Notes 2.5.5</a></li><li><a shape="rect" href="version-notes-252.html">Version Notes 2.5.2</a></li><li><a shape="rect" href="version-notes-251.html">Version Notes 2.5.1</a></li><li><a shape="rect" href="version-notes-25.html">Version Notes 2.5</a></li></ul><h3 id="MigrationGuide-VersionNotes2.3.x">Version Notes 2.3.x</h3><ul><li><a shape="rect" href="version-notes-2331.html">Version Notes 2.3.31</a></li><li><a shape="rect" href="version-notes-2330.html">Version Notes 2.3.30</a></li><li><a shape="rect" href="version-notes-2329.html">Version Notes 2.3.29</a></li><li><a shape="rect" href="version-notes-23281.html">Version Notes 2.3.28.1</a></li><li><a shape="rect" href="version-notes-2328.html">Version Notes 2.3.28
 </a></li><li><a shape="rect" href="version-notes-23243.html">Version Notes 2.3.24.3</a></li><li><a shape="rect" href="version-notes-23241.html">Version Notes 2.3.24.1</a></li><li><a shape="rect" href="version-notes-2324.html">Version Notes 2.3.24</a></li><li><a shape="rect" href="version-notes-23203.html">Version Notes 2.3.20.3</a></li><li><a shape="rect" href="version-notes-23201.html">Version Notes 2.3.20.1</a></li><li><a shape="rect" href="version-notes-2320.html">Version Notes 2.3.20</a></li><li><a shape="rect" href="version-notes-23163.html">Version Notes 2.3.16.3</a></li><li><a shape="rect" href="version-notes-23162.html">Version Notes 2.3.16.2</a></li><li><a shape="rect" href="version-notes-2316.html">Version Notes 2.3.16.1</a></li><li><a shape="rect" href="version-notes-2316.html">Version Notes 2.3.16</a></li><li><a shape="rect" href="version-notes-23153.html">Version Notes 2.3.15.3</a></li><li><a shape="rect" href="version-notes-23152.html">Version Notes 2.3.15.2</a></li><l
 i><a shape="rect" href="version-notes-23151.html">Version Notes 2.3.15.1</a></li><li><a shape="rect" href="version-notes-2315.html">Version Notes 2.3.15</a></li><li><a shape="rect" href="version-notes-23143.html">Version Notes 2.3.14.3</a></li><li><a shape="rect" href="version-notes-23142.html">Version Notes 2.3.14.2</a></li><li><a shape="rect" href="version-notes-23141.html">Version Notes 2.3.14.1</a></li><li><a shape="rect" href="version-notes-2314.html">Version Notes 2.3.14</a></li><li><a shape="rect" href="version-notes-23120.html">Version Notes 2.3.12.0</a></li><li><a shape="rect" href="version-notes-238.html">Version Notes 2.3.8</a></li><li><a shape="rect" href="version-notes-237.html">Version Notes 2.3.7</a></li><li><a shape="rect" href="version-notes-2341.html">Version Notes 2.3.4.1</a></li><li><a shape="rect" href="version-notes-234.html">Version Notes 2.3.4</a></li><li><a shape="rect" href="version-notes-233.html">Version Notes 2.3.3</a></li><li><a shape="rect" href="versi
 on-notes-2312.html">Version Notes 2.3.1.2</a></li><li><a shape="rect" href="version-notes-2311.html">Version Notes 2.3.1.1</a></li><li><a shape="rect" href="version-notes-231.html">Version Notes 2.3.1</a></li></ul><h3 id="MigrationGuide-VersionNotes2.2.x">Version Notes 2.2.x</h3><ul><li><a shape="rect" href="version-notes-2231.html">Version Notes 2.2.3.1</a></li><li><a shape="rect" href="version-notes-223.html">Version Notes 2.2.3</a></li><li><a shape="rect" href="version-notes-2211.html">Version Notes 2.2.1.1</a></li><li><a shape="rect" href="version-notes-221.html">Version Notes 2.2.1</a></li></ul><h3 id="MigrationGuide-VersionNotes2.1.x">Version Notes 2.1.x</h3><ul><li><a shape="rect" href="version-notes-2181.html">Version Notes 2.1.8.1</a></li><li><a shape="rect" href="version-notes-218.html">Version Notes 2.1.8</a></li><li><a shape="rect" href="version-notes-216.html">Version Notes 2.1.6</a></li><li><a shape="rect" href="version-notes-215.html">Version Notes 2.1.5</a></li><li><
 a shape="rect" href="version-notes-214.html">Version Notes 2.1.4</a></li><li><a shape="rect" href="version-notes-213.html">Version Notes 2.1.3</a></li><li><a shape="rect" href="version-notes-212.html">Version Notes 2.1.2</a></li><li><a shape="rect" href="version-notes-211.html">Version Notes 2.1.1</a></li><li><a shape="rect" href="version-notes-210.html">Version Notes 2.1.0</a></li></ul><h3 id="MigrationGuide-ReleaseNotes2.0.x">Release Notes 2.0.x</h3><ul><li><a shape="rect" href="release-notes-2014.html">Release Notes 2.0.14</a></li><li><a shape="rect" href="release-notes-2013.html">Release Notes 2.0.13</a></li><li><a shape="rect" href="release-notes-2012.html">Release Notes 2.0.12</a></li><li><a shape="rect" href="release-notes-20112.html">Release Notes 2.0.11.2</a></li><li><a shape="rect" href="release-notes-20111.html">Release Notes 2.0.11.1</a></li><li><a shape="rect" href="release-notes-2011.html">Release Notes 2.0.11</a></li><li><a shape="rect" href="release-notes-2010.html">
 Release Notes 2.0.10</a></li><li><a shape="rect" href="release-notes-209.html">Release Notes 2.0.9</a></li><li><a shape="rect" href="release-notes-208.html">Release Notes 2.0.8</a></li><li><a shape="rect" href="release-notes-207.html">Release Notes 2.0.7</a></li><li><a shape="rect" href="release-notes-206.html">Release Notes 2.0.6</a></li><li><a shape="rect" href="release-notes-205.html">Release Notes 2.0.5</a></li><li><a shape="rect" href="release-notes-204.html">Release Notes 2.0.4</a></li><li><a shape="rect" href="release-notes-203.html">Release Notes 2.0.3</a></li><li><a shape="rect" href="release-notes-202.html">Release Notes 2.0.2</a></li><li><a shape="rect" href="release-notes-201.html">Release Notes 2.0.1</a></li><li><a shape="rect" href="release-notes-200.html">Release Notes 2.0.0</a></li></ul><h3 id="MigrationGuide-Struts2.3toStruts2.5">Struts 2.3 to Struts 2.5</h3><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluen
 ceTh"><p><a shape="rect" href="struts-23-to-25-migration.html">Struts 2.3 to 2.5 migration</a></p></th><td colspan="1" rowspan="1" class="confluenceTd">Migration guide.</td></tr></tbody></table></div><h3 id="MigrationGuide-Struts1toStruts2">Struts 1 to Struts 2</h3><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect" href="comparing-struts-1-and-2.html">Comparing Struts 1 and 2</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>How are Struts 1 and Struts 2 alike? How are they different?</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect" href="struts-1-solutions.html">Struts 1 Solutions</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Various issues (and hopefully their solutions!) encountered during migrations to Struts 2.</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect" href="migration-strategies.html">Mi
 gration Strategies</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Steps and overall strategies for migrating Struts 1 applications to Struts 2.</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect" href="migration-tools.html">Migration Tools</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Development tools to help aid the migration process.</p></td></tr></tbody></table></div><h4 id="MigrationGuide-Tutorials">Tutorials</h4><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect" class="external-link" href="http://www.infoq.com/news/migrating-struts2" rel="nofollow">Migrating Applications to Struts 2 </a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>A three-part series by Ian Roughley (Sep 2006)</p></td></tr></tbody></table></div><h4 id="MigrationGuide-Roadmap">Roadmap</h4><div class="table-wrap"><table class="confluenceTable"><tbo
 dy><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect" class="external-link" href="http://struts.apache.org/roadmap.html#new">Roadmap FAQ</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>What's in store for Struts 2?</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect" class="external-link" href="http://www.oreillynet.com/onjava/blog/2006/10/my_history_of_struts_2.html" rel="nofollow">A History of Struts 2</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Don Brown's summary of events</p></td></tr></tbody></table></div><h3 id="MigrationGuide-Webwork2.2toStruts2">Webwork 2.2 to Struts 2</h3><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect" href="key-changes-from-webwork-2.html">Key Changes From WebWork 2</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>What has been removed or changed from WebWork 2.2 to St
 ruts 2</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect" href="webwork-2-migration-strategies.html">WebWork 2 Migration Strategies</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Steps and overall strategies for migrating WebWork 2 applications to Struts 2.</p></td></tr></tbody></table></div><h2 id="MigrationGuide-FAQs">FAQs</h2><ul><li><a shape="rect" href="where-do-we-get-the-latest-version-the-framework.html">Where do we get the latest version the framework</a>?</li><li><a shape="rect" href="what-are-some-of-the-frameworks-best-features.html">What are some of the framework's best features</a>?</li><li><a shape="rect" href="what-is-the-actioncontext.html">What is the ActionContext?</a></li></ul><h2 id="MigrationGuide-Next:">Next: <a shape="rect" href="contributors-guide.html">Contributors Guide</a></h2></div>
+            <div id="ConfluenceContent"><p>Getting here from there.</p><h3 id="MigrationGuide-VersionNotes2.5.x">Version Notes 2.5.x</h3><ul><li><a shape="rect" href="version-notes-259.html">Version Notes 2.5.9</a></li><li><a shape="rect" href="version-notes-258.html">Version Notes 2.5.8</a></li><li><a shape="rect" href="version-notes-255.html">Version Notes 2.5.5</a></li><li><a shape="rect" href="version-notes-252.html">Version Notes 2.5.2</a></li><li><a shape="rect" href="version-notes-251.html">Version Notes 2.5.1</a></li><li><a shape="rect" href="version-notes-25.html">Version Notes 2.5</a></li></ul><h3 id="MigrationGuide-VersionNotes2.3.x">Version Notes 2.3.x</h3><ul><li><a shape="rect" href="version-notes-2331.html">Version Notes 2.3.31</a></li><li><a shape="rect" href="version-notes-2330.html">Version Notes 2.3.30</a></li><li><a shape="rect" href="version-notes-2329.html">Version Notes 2.3.29</a></li><li><a shape="rect" href="version-notes-23281.html">Version Notes 2.3.28.1</
 a></li><li><a shape="rect" href="version-notes-2328.html">Version Notes 2.3.28</a></li><li><a shape="rect" href="version-notes-23243.html">Version Notes 2.3.24.3</a></li><li><a shape="rect" href="version-notes-23241.html">Version Notes 2.3.24.1</a></li><li><a shape="rect" href="version-notes-2324.html">Version Notes 2.3.24</a></li><li><a shape="rect" href="version-notes-23203.html">Version Notes 2.3.20.3</a></li><li><a shape="rect" href="version-notes-23201.html">Version Notes 2.3.20.1</a></li><li><a shape="rect" href="version-notes-2320.html">Version Notes 2.3.20</a></li><li><a shape="rect" href="version-notes-23163.html">Version Notes 2.3.16.3</a></li><li><a shape="rect" href="version-notes-23162.html">Version Notes 2.3.16.2</a></li><li><a shape="rect" href="version-notes-2316.html">Version Notes 2.3.16.1</a></li><li><a shape="rect" href="version-notes-2316.html">Version Notes 2.3.16</a></li><li><a shape="rect" href="version-notes-23153.html">Version Notes 2.3.15.3</a></li><li><a 
 shape="rect" href="version-notes-23152.html">Version Notes 2.3.15.2</a></li><li><a shape="rect" href="version-notes-23151.html">Version Notes 2.3.15.1</a></li><li><a shape="rect" href="version-notes-2315.html">Version Notes 2.3.15</a></li><li><a shape="rect" href="version-notes-23143.html">Version Notes 2.3.14.3</a></li><li><a shape="rect" href="version-notes-23142.html">Version Notes 2.3.14.2</a></li><li><a shape="rect" href="version-notes-23141.html">Version Notes 2.3.14.1</a></li><li><a shape="rect" href="version-notes-2314.html">Version Notes 2.3.14</a></li><li><a shape="rect" href="version-notes-23120.html">Version Notes 2.3.12.0</a></li><li><a shape="rect" href="version-notes-238.html">Version Notes 2.3.8</a></li><li><a shape="rect" href="version-notes-237.html">Version Notes 2.3.7</a></li><li><a shape="rect" href="version-notes-2341.html">Version Notes 2.3.4.1</a></li><li><a shape="rect" href="version-notes-234.html">Version Notes 2.3.4</a></li><li><a shape="rect" href="versi
 on-notes-233.html">Version Notes 2.3.3</a></li><li><a shape="rect" href="version-notes-2312.html">Version Notes 2.3.1.2</a></li><li><a shape="rect" href="version-notes-2311.html">Version Notes 2.3.1.1</a></li><li><a shape="rect" href="version-notes-231.html">Version Notes 2.3.1</a></li></ul><h3 id="MigrationGuide-VersionNotes2.2.x">Version Notes 2.2.x</h3><ul><li><a shape="rect" href="version-notes-2231.html">Version Notes 2.2.3.1</a></li><li><a shape="rect" href="version-notes-223.html">Version Notes 2.2.3</a></li><li><a shape="rect" href="version-notes-2211.html">Version Notes 2.2.1.1</a></li><li><a shape="rect" href="version-notes-221.html">Version Notes 2.2.1</a></li></ul><h3 id="MigrationGuide-VersionNotes2.1.x">Version Notes 2.1.x</h3><ul><li><a shape="rect" href="version-notes-2181.html">Version Notes 2.1.8.1</a></li><li><a shape="rect" href="version-notes-218.html">Version Notes 2.1.8</a></li><li><a shape="rect" href="version-notes-216.html">Version Notes 2.1.6</a></li><li><
 a shape="rect" href="version-notes-215.html">Version Notes 2.1.5</a></li><li><a shape="rect" href="version-notes-214.html">Version Notes 2.1.4</a></li><li><a shape="rect" href="version-notes-213.html">Version Notes 2.1.3</a></li><li><a shape="rect" href="version-notes-212.html">Version Notes 2.1.2</a></li><li><a shape="rect" href="version-notes-211.html">Version Notes 2.1.1</a></li><li><a shape="rect" href="version-notes-210.html">Version Notes 2.1.0</a></li></ul><h3 id="MigrationGuide-ReleaseNotes2.0.x">Release Notes 2.0.x</h3><ul><li><a shape="rect" href="release-notes-2014.html">Release Notes 2.0.14</a></li><li><a shape="rect" href="release-notes-2013.html">Release Notes 2.0.13</a></li><li><a shape="rect" href="release-notes-2012.html">Release Notes 2.0.12</a></li><li><a shape="rect" href="release-notes-20112.html">Release Notes 2.0.11.2</a></li><li><a shape="rect" href="release-notes-20111.html">Release Notes 2.0.11.1</a></li><li><a shape="rect" href="release-notes-2011.html">Re
 lease Notes 2.0.11</a></li><li><a shape="rect" href="release-notes-2010.html">Release Notes 2.0.10</a></li><li><a shape="rect" href="release-notes-209.html">Release Notes 2.0.9</a></li><li><a shape="rect" href="release-notes-208.html">Release Notes 2.0.8</a></li><li><a shape="rect" href="release-notes-207.html">Release Notes 2.0.7</a></li><li><a shape="rect" href="release-notes-206.html">Release Notes 2.0.6</a></li><li><a shape="rect" href="release-notes-205.html">Release Notes 2.0.5</a></li><li><a shape="rect" href="release-notes-204.html">Release Notes 2.0.4</a></li><li><a shape="rect" href="release-notes-203.html">Release Notes 2.0.3</a></li><li><a shape="rect" href="release-notes-202.html">Release Notes 2.0.2</a></li><li><a shape="rect" href="release-notes-201.html">Release Notes 2.0.1</a></li><li><a shape="rect" href="release-notes-200.html">Release Notes 2.0.0</a></li></ul><h3 id="MigrationGuide-Struts2.3toStruts2.5">Struts 2.3 to Struts 2.5</h3><div class="table-wrap"><table 
 class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect" href="struts-23-to-25-migration.html">Struts 2.3 to 2.5 migration</a></p></th><td colspan="1" rowspan="1" class="confluenceTd">Migration guide.</td></tr></tbody></table></div><h3 id="MigrationGuide-Struts1toStruts2">Struts 1 to Struts 2</h3><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect" href="comparing-struts-1-and-2.html">Comparing Struts 1 and 2</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>How are Struts 1 and Struts 2 alike? How are they different?</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect" href="struts-1-solutions.html">Struts 1 Solutions</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Various issues (and hopefully their solutions!) encountered during migrations to Struts 2.</p></td></tr><tr><th colspan="1" rowspan="
 1" class="confluenceTh"><p><a shape="rect" href="migration-strategies.html">Migration Strategies</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Steps and overall strategies for migrating Struts 1 applications to Struts 2.</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect" href="migration-tools.html">Migration Tools</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Development tools to help aid the migration process.</p></td></tr></tbody></table></div><h4 id="MigrationGuide-Tutorials">Tutorials</h4><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect" class="external-link" href="http://www.infoq.com/news/migrating-struts2" rel="nofollow">Migrating Applications to Struts 2 </a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>A three-part series by Ian Roughley (Sep 2006)</p></td></tr></tbody></table></div><h4 id="MigrationGuide-Ro
 admap">Roadmap</h4><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect" class="external-link" href="http://struts.apache.org/roadmap.html#new">Roadmap FAQ</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>What's in store for Struts 2?</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect" class="external-link" href="http://www.oreillynet.com/onjava/blog/2006/10/my_history_of_struts_2.html" rel="nofollow">A History of Struts 2</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Don Brown's summary of events</p></td></tr></tbody></table></div><h3 id="MigrationGuide-Webwork2.2toStruts2">Webwork 2.2 to Struts 2</h3><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect" href="key-changes-from-webwork-2.html">Key Changes From WebWork 2</a></p></th><td colspan="1" rowspan="1" c
 lass="confluenceTd"><p>What has been removed or changed from WebWork 2.2 to Struts 2</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><a shape="rect" href="webwork-2-migration-strategies.html">WebWork 2 Migration Strategies</a></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>Steps and overall strategies for migrating WebWork 2 applications to Struts 2.</p></td></tr></tbody></table></div><h2 id="MigrationGuide-FAQs">FAQs</h2><ul><li><a shape="rect" href="where-do-we-get-the-latest-version-the-framework.html">Where do we get the latest version the framework</a>?</li><li><a shape="rect" href="what-are-some-of-the-frameworks-best-features.html">What are some of the framework's best features</a>?</li><li><a shape="rect" href="what-is-the-actioncontext.html">What is the ActionContext?</a></li></ul><h2 id="MigrationGuide-Next:">Next: <a shape="rect" href="contributors-guide.html">Contributors Guide</a></h2></div>
         </div>
 
                     <div class="tabletitle">
@@ -140,6 +140,9 @@ under the License.
                     <span class="smalltext">(Apache Struts 2 Documentation)</span>
                     <br>
                                     $page.link($child)
+                    <span class="smalltext">(Apache Struts 2 Documentation)</span>
+                    <br>
+                                    $page.link($child)
                     <span class="smalltext">(Apache Struts 2 Documentation)</span>
                     <br>
                                     $page.link($child)

Modified: websites/production/struts/content/docs/security.html
==============================================================================
--- websites/production/struts/content/docs/security.html (original)
+++ websites/production/struts/content/docs/security.html Fri Feb  3 13:47:41 2017
@@ -139,11 +139,11 @@ under the License.
     <div class="pagecontent">
         <div class="wiki-content">
             <div id="ConfluenceContent"><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1480662013471 {padding: 0px;}
-div.rbtoc1480662013471 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1480662013471 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1486129599528 {padding: 0px;}
+div.rbtoc1486129599528 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1486129599528 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1480662013471">
+/*]]>*/</style></p><div class="toc-macro rbtoc1486129599528">
 <ul class="toc-indentation"><li><a shape="rect" href="#Security-Securitytips">Security tips</a>
 <ul class="toc-indentation"><li><a shape="rect" href="#Security-RestrictaccesstotheConfigBrowser">Restrict access to the Config Browser</a></li><li><a shape="rect" href="#Security-Don'tmixdifferentaccesslevelsinthesamenamespace">Don't mix different access levels in the same namespace</a></li><li><a shape="rect" href="#Security-NeverexposeJSPfilesdirectly">Never expose JSP files directly</a></li><li><a shape="rect" href="#Security-DisabledevMode">Disable devMode</a></li><li><a shape="rect" href="#Security-Reducelogginglevel">Reduce logging level</a></li><li><a shape="rect" href="#Security-UseUTF-8encoding">Use UTF-8 encoding</a></li><li><a shape="rect" href="#Security-Donotdefinedsetterswhennotneeded">Do not defined setters when not needed</a></li><li><a shape="rect" href="#Security-Donotuseincomingvaluesasaninputforlocalisationlogic">Do not use incoming values as an input for localisation logic</a></li></ul>
 </li><li><a shape="rect" href="#Security-Internalsecuritymechanism">Internal security mechanism</a>
@@ -177,7 +177,7 @@ div.rbtoc1480662013471 li {margin-left:
     &lt;description&gt;Don't assign users to this role&lt;/description&gt;
     &lt;role-name&gt;no-users&lt;/role-name&gt;
 &lt;/security-role&gt;</pre>
-</div></div><p>The best approach is to used the both solutions.</p><h4 id="Security-DisabledevMode">Disable devMode</h4><p>The&#160;<code style="line-height: 1.4285715;">devMode</code> is a very useful option during development time, allowing for deep introspection and debugging into you app.</p><p>However, in production it exposes your application to be presenting too many informations on application's internals or to evaluating risky parameter expressions.</p><div class="confluence-information-macro confluence-information-macro-note"><p class="title">How to disable devMode in production</p><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Please <strong>always disable&#160;<code>devMode</code></strong>&#160;before deploying your application to a production environment. While it is disabled by default, your struts.xml might include a line setting it to true. The best way is to ensure
  the following setting is applied to our struts.xml for production deployment:</p><pre><span>&lt;</span><span style="color: rgb(0,0,128);">constant </span><span style="color: rgb(0,0,255);">name</span><span style="color: rgb(0,128,0);">="struts.devMode" </span><span style="color: rgb(0,0,255);">value</span><span style="color: rgb(0,128,0);">="false"</span><span>/&gt;</span></pre></div></div><h4 id="Security-Reducelogginglevel">Reduce logging level</h4><p>It's a good practice to reduce logging level from <strong>DEBUG</strong> to <strong>INFO</strong> or less. Framework's classes can produce a lot of logging entries which will pollute the log file. You can even set logging level to <strong>WARN</strong> for classes that belongs to the framework, see example Log4j2 configuration:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>The best approach is to used the both solutions.</p><h4 id="Security-DisabledevMode">Disable devMode</h4><p>The&#160;<code style="line-height: 1.4285715;">devMode</code> is a very useful option during development time, allowing for deep introspection and debugging into you app.</p><p>However, in production it exposes your application to be presenting too many informations on application's internals or to evaluating risky parameter expressions.&#160;Please&#160;<strong>always disable&#160;<code>devMode</code></strong>&#160;before deploying your application to a production environment. While it is disabled by default, your <code>struts.xml</code>&#160;might include a line setting it to <code>true</code>. The best way is to ensure the following setting is applied to our <code>struts.xml</code>&#160;for production deployment:</p><div class="confluence-information-macro confluence-information-macro-note"><p class="title">How to disable devMode in production</p><span class=
 "aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p><span>&lt;</span><span style="color: rgb(0,0,128);">constant </span><span style="color: rgb(0,0,255);">name</span><span style="color: rgb(0,128,0);">="struts.devMode" </span><span style="color: rgb(0,0,255);">value</span><span style="color: rgb(0,128,0);">="false"</span><span>/&gt;</span></p></div></div><h4 id="Security-Reducelogginglevel">Reduce logging level</h4><p>It's a good practice to reduce logging level from <strong>DEBUG</strong> to <strong>INFO</strong> or less. Framework's classes can produce a lot of logging entries which will pollute the log file. You can even set logging level to <strong>WARN</strong> for classes that belongs to the framework, see example Log4j2 configuration:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
 &lt;Configuration&gt;
     &lt;Appenders&gt;

Added: websites/production/struts/content/docs/version-notes-2510.html
==============================================================================
--- websites/production/struts/content/docs/version-notes-2510.html (added)
+++ websites/production/struts/content/docs/version-notes-2510.html Fri Feb  3 13:47:41 2017
@@ -0,0 +1,168 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- 
+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. 
+-->
+<html>
+<head>
+    <link type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
+    <style type="text/css">
+        .dp-highlighter {
+            width:95% !important;
+        }
+    </style>
+    <style type="text/css">
+        .footer {
+            background-image:      url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif');
+            background-repeat:     repeat-x;
+            background-position:   left top;
+            padding-top:           4px;
+            color:                 #666;
+        }
+    </style>
+    <link href='https://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' />
+    <link href='https://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' />
+    <script src='https://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script>
+    <script src='https://struts.apache.org/highlighter/js/shBrushPlain.js' type='text/javascript'></script>
+    <script src='https://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script>
+    <script src='https://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script>
+    <script src='https://struts.apache.org/highlighter/js/shBrushJScript.js' type='text/javascript'></script>
+    <script src='https://struts.apache.org/highlighter/js/shBrushGroovy.js' type='text/javascript'></script>
+    <script src='https://struts.apache.org/highlighter/js/shBrushBash.js' type='text/javascript'></script>
+    <script type="text/javascript">
+        SyntaxHighlighter.defaults['toolbar'] = false;
+        SyntaxHighlighter.all();
+    </script>
+    <script type="text/javascript" language="javascript">
+        var hide = null;
+        var show = null;
+        var children = null;
+
+        function init() {
+            /* Search form initialization */
+            var form = document.forms['search'];
+            if (form != null) {
+                form.elements['domains'].value = location.hostname;
+                form.elements['sitesearch'].value = location.hostname;
+            }
+
+            /* Children initialization */
+            hide = document.getElementById('hide');
+            show = document.getElementById('show');
+            children = document.all != null ?
+                    document.all['children'] :
+                    document.getElementById('children');
+            if (children != null) {
+                children.style.display = 'none';
+                show.style.display = 'inline';
+                hide.style.display = 'none';
+            }
+        }
+
+        function showChildren() {
+            children.style.display = 'block';
+            show.style.display = 'none';
+            hide.style.display = 'inline';
+        }
+
+        function hideChildren() {
+            children.style.display = 'none';
+            show.style.display = 'inline';
+            hide.style.display = 'none';
+        }
+    </script>
+    <title>Version Notes 2.5.10</title>
+</head>
+<body onload="init()">
+<table border="0" cellpadding="2" cellspacing="0" width="100%">
+    <tr class="topBar">
+        <td align="left" valign="middle" class="topBarDiv" align="left" nowrap>
+            &nbsp;<a href="home.html">Home</a>&nbsp;&gt;&nbsp;<a href="guides.html">Guides</a>&nbsp;&gt;&nbsp;<a href="migration-guide.html">Migration Guide</a>&nbsp;&gt;&nbsp;<a href="version-notes-2510.html">Version Notes 2.5.10</a>
+        </td>
+        <td align="right" valign="middle" nowrap>
+            <form name="search" action="https://www.google.com/search" method="get">
+                <input type="hidden" name="ie" value="UTF-8" />
+                <input type="hidden" name="oe" value="UTF-8" />
+                <input type="hidden" name="domains" value="" />
+                <input type="hidden" name="sitesearch" value="" />
+                <input type="text" name="q" maxlength="255" value="" />
+                <input type="submit" name="btnG" value="Google Search" />
+            </form>
+        </td>
+    </tr>
+</table>
+
+<div id="PageContent">
+    <div class="pageheader" style="padding: 6px 0px 0px 0px;">
+        <!-- We'll enable this once we figure out how to access (and save) the logo resource -->
+        <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"-->
+        <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div>
+        <div style="margin: 0px 10px 8px 10px"  class="pagetitle">Version Notes 2.5.10</div>
+
+        <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;">
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=67638791">
+                <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=67638791">Edit Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">
+                <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=67638791">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add Page"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=67638791">Add Page</a>
+            &nbsp;
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=67638791">
+                <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif"
+                     height="16" width="16" border="0" align="absmiddle" title="Add News"></a>
+            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=67638791">Add News</a>
+        </div>
+    </div>
+
+    <div class="pagecontent">
+        <div class="wiki-content">
+            <div id="ConfluenceContent"><p><img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"> These are the notes for the Struts 2.5.10 distribution.</p><p><img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"> For prior notes in this release series, see <a shape="rect" href="version-notes-258.html">Version Notes 2.5.8</a></p><ul><li>If you are a Maven user, you might want to get started using the <a shape="rect" href="struts-2-maven-archetypes.html">Maven Archetype</a>.</li></ul><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Maven Dependency</b></div><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;dependency&gt;
+  &lt;groupId&gt;org.apache.struts&lt;/groupId&gt;
+  &lt;artifactId&gt;struts2-core&lt;/artifactId&gt;
+  &lt;version&gt;2.5.10&lt;/version&gt;
+&lt;/dependency&gt;
+</pre>
+</div></div><p>You can also use Struts Archetype Catalog like below</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Struts Archetype Catalog</b></div><div class="codeContent panelContent pdl">
+<pre class="brush: text; gutter: false; theme: Default" style="font-size:12px;">mvn archetype:generate -DarchetypeCatalog=http://struts.apache.org/</pre>
+</div></div><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Staging Repository</b></div><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;repositories&gt;
+  &lt;repository&gt;
+    &lt;id&gt;apache.nexus&lt;/id&gt;
+    &lt;name&gt;ASF Nexus Staging&lt;/name&gt;
+    &lt;url&gt;https://repository.apache.org/content/groups/staging/&lt;/url&gt;
+  &lt;/repository&gt;
+&lt;/repositories&gt;</pre>
+</div></div><h2 id="VersionNotes2.5.10-InternalChanges">Internal Changes</h2><h3 id="VersionNotes2.5.10-Bug">Bug</h3><ul><li>[<a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-4693">WW-4693</a>] - How to handle 404 when using wildcard instead of error 500 when the wildcard method doesn't exist</li><li>[<a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-4725">WW-4725</a>] - MessageStoreInterceptor must handle all redirects</li><li>[<a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-4726">WW-4726</a>] - MaxMultiPartUpload limited to 2GB (Long --&gt; Integer)</li><li>[<a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-4727">WW-4727</a>] - Struts 2.5.8 no longer supports the &lt;include&gt; directive in the struts.xml</li><li>[<a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-4728">WW-4728</a>] - JSONValidationInterce
 ptor change static parameters names</li><li>[<a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-4729">WW-4729</a>] - ServletDispatcherResult can't handle parameters anymore</li><li>[<a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-4730">WW-4730</a>] - TokenInterceptor synchronized on session.getId().intern()</li><li>[<a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-4731">WW-4731</a>] - XSLT error during transformation</li><li>[<a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-4733">WW-4733</a>] - No default parameter defined for result [json] of type [org.apache.struts2.json.JSONResult]</li><li>[<a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-4734">WW-4734</a>] - I18Interceptor ignores session or cookie Locale after first lookup failure</li><li>[<a shape="rect" class="external-link" href="https://issues.apac
 he.org/jira/browse/WW-4735">WW-4735</a>] - EmailValidator does not accept new domain suffixes</li></ul><h3 id="VersionNotes2.5.10-Improvement">Improvement</h3><ul><li>[<a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-3961">WW-3961</a>] - struts.xml include not loading in dependant jar files</li><li>[<a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-4050">WW-4050</a>] - AnnotationValidationInterceptor should consult UnknownHandler before throwing NoSuchMethodException</li><li>[<a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-4102">WW-4102</a>] - ActionSupport.LOG should be private</li><li>[<a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-4159">WW-4159</a>] - Remove StrutsObjectFactory and define StrutsInterceptorFactory instead</li><li>[<a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-4174">WW-4174</a>] - Ma
 ke OgnlValueStack and OgnlValueStackFactory More Extensible</li><li>[<a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-4687">WW-4687</a>] - Make interceptor parameters dynamic</li></ul><h3 id="VersionNotes2.5.10-NewFeature">New Feature</h3><p>&#160;</p><ul><li>[<a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/WW-3787">WW-3787</a>] - allow include other config files from classpath</li></ul><h2 id="VersionNotes2.5.10-IssueDetail">Issue Detail</h2><ul><li><a shape="rect" class="external-link" href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12311041&amp;version=12339162">JIRA Release Notes 2.5.10</a></li></ul><h2 id="VersionNotes2.5.10-IssueList">Issue List</h2><ul><li><a shape="rect" class="external-link" href="https://issues.apache.org/jira/issues/?filter=12339470">Struts 2.5.10 DONE</a></li><li><a shape="rect" class="external-link" href="https://issues.apache.org/jira/issues/?filter=12335667">S
 truts 2.5.x TODO</a></li></ul><h2 id="VersionNotes2.5.10-Otherresources">Other resources</h2><ul><li><a shape="rect" class="external-link" href="http://www.mail-archive.com/commits%40struts.apache.org/" rel="nofollow">Commit Logs</a></li><li><a shape="rect" class="external-link" href="https://git-wip-us.apache.org/repos/asf?p=struts.git;a=tree;h=refs/heads/develop;hb=develop">Source Code Repository</a></li></ul><div><span style="font-size: 24.0px;line-height: 30.0px;"><br clear="none"></span></div><div><span style="font-size: 24.0px;line-height: 30.0px;background-color: rgb(245,245,245);"><br clear="none"></span></div></div>
+        </div>
+
+        
+    </div>
+</div>
+<div class="footer">
+    Generated by CXF SiteExporter
+</div>
+</body>
+</html>

Modified: websites/production/struts/content/docs/xsl-result.html
==============================================================================
--- websites/production/struts/content/docs/xsl-result.html (original)
+++ websites/production/struts/content/docs/xsl-result.html Fri Feb  3 13:47:41 2017
@@ -138,131 +138,50 @@ under the License.
 
     <div class="pagecontent">
         <div class="wiki-content">
-            <div id="ConfluenceContent">
-
-<p>XSLTResult uses XSLT to transform an action object to XML. The recent version
-has been specifically modified to deal with Xalan flaws. When using Xalan you
-may notice that even though you have a very minimal stylesheet like this one
-</p><pre>
-&lt;xsl:template match="/result"&gt;
-  &lt;result/&gt;
+            <div id="ConfluenceContent"><p><style type="text/css">/*<![CDATA[*/
+div.rbtoc1484828432579 {padding: 0px;}
+div.rbtoc1484828432579 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1484828432579 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1484828432579">
+<ul class="toc-indentation"><li><a shape="rect" href="#XSLResult-Description">Description</a></li><li><a shape="rect" href="#XSLResult-Parameters">Parameters</a></li><li><a shape="rect" href="#XSLResult-Examples">Examples</a></li></ul>
+</div><h1 id="XSLResult-Description">Description</h1><p>XSLTResult uses XSLT to transform an action object to XML. The recent version has been specifically modified to deal with Xalan flaws. When using Xalan you may notice that even though you have a very minimal stylesheet like this one</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;xsl:template match="/result"&gt;
+&lt;result/&gt;
 &lt;/xsl:template&gt;</pre>
-
-<p></p><p>
-Xalan would still iterate through every property of your action and all
-its descendants.
-</p>
-
-<p></p><p>
-If you had double-linked objects, Xalan would work forever analysing an
-infinite object tree. Even if your stylesheet was not constructed to process
-them all. It's because the current Xalan eagerly and extensively converts
-everything to its internal DTM model before further processing.
-</p>
-
-<p></p><p>
-That's why there's a loop eliminator added that works by indexing every
-object-property combination during processing. If it notices that some
-object's property was already walked through, it doesn't go any deeper.
-Say you have two objects, x and y, with the following properties set
-(pseudocode):
-</p>
-<pre>
-x.y = y;
+</div></div><p>Xalan would still iterate through every property of your action and all its descendants.</p><p>If you had double-linked objects, Xalan would work forever analysing an infinite object tree. Even if your stylesheet was not constructed to process them all. It's because the current Xalan eagerly and extensively converts<br clear="none">everything to its internal DTM model before further processing.</p><p>That's why there's a loop eliminator added that works by indexing every object-property combination during processing. If it notices that some object's property was already walked through, it doesn't go any deeper. Say you have two objects, x and y, with the following properties set (pseudocode):</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">x.y = y;
 and
 y.x = x;
 action.x=x;</pre>
-
-<p></p><p>
-Due to that modification, the resulting XML document based on x would be:
-</p>
-
-<p></p><pre>
-&lt;result&gt;
-  &lt;x&gt;
-    &lt;y/&gt;
-  &lt;/x&gt;
+</div></div><p>Due to that modification, the resulting XML document based on x would be:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;result&gt;
+&lt;x&gt;
+&lt;y/&gt;
+&lt;/x&gt;
 &lt;/result&gt;</pre>
-
-<p></p><p>
-Without it there would be endless x/y/x/y/x/y/... elements.
-</p>
-
-<p></p><p>
-The XSLTResult code tries also to deal with the fact that DTM model is built
-in a manner that children are processed before siblings. The result is that if
-there is object x that is both set in action's x property, and very deeply
-under action's a property then it would only appear under a, not under x.
-That's not what we expect, and that's why XSLTResult allows objects to repeat
-in various places to some extent.
-</p>
-
-<p></p><p>
-Sometimes the object mesh is still very dense and you may notice that even
-though you have a relatively simple stylesheet, execution takes a tremendous
-amount of time. To help you to deal with that obstacle of Xalan, you may
-attach regexp filters to elements paths (xpath).
-</p>
-
-<p></p><p>
-<b>Note:</b> In your .xsl file the root match must be named <tt>result</tt>.
-<br clear="none">This example will output the username by using <tt>getUsername</tt> on your
-action class:
-</p><pre>
-&lt;xsl:template match="result"&gt;
-  &lt;html&gt;
-  &lt;body&gt;
+</div></div><p>Without it there would be endless <code>x/y/x/y/x/y/...</code>&#160;elements.</p><p>The <code>XSLTResult</code>&#160;code tries also to deal with the fact that DTM model is built in a manner that children are processed before siblings. The result is that if there is object x that is both set in action's x property, and very deeply under action's a property then it would only appear under a, not under x. That's not what we expect, and that's why <code>XSLTResult</code>&#160;allows objects to repeat in various places to some extent.</p><p>Sometimes the object mesh is still very dense and you may notice that even though you have a relatively simple stylesheet, execution takes a tremendous amount of time. To help you to deal with that obstacle of Xalan, you may attach regexp filters to elements paths (xpath).</p><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro
 -icon"></span><div class="confluence-information-macro-body"><p>In your .xsl file the root match must be named <strong>result</strong>. This example will output the username by using <strong>getUsername</strong> on your action class:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;xsl:template match="result"&gt;
+&lt;html&gt;
+&lt;body&gt;
   Hello &lt;xsl:value-of select="username"/&gt; how are you?
-  &lt;/body&gt;
-  &lt;/html&gt;
-&lt;/xsl:template&gt;
-</pre>
-
-<p></p><p>
-In the following example the XSLT result would only walk through action's
-properties without their childs. It would also skip every property that has
-"hugeCollection" in their name. Element's path is first compared to
-excludingPattern - if it matches it's no longer processed. Then it is
-compared to matchingPattern and processed only if there's a match.
-</p>
-
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
-&lt;result name=&quot;success&quot; type=&quot;xslt&quot;&gt;
-  &lt;param name=&quot;location&quot;&gt;foo.xslt&lt;/param&gt;
-  &lt;param name=&quot;matchingPattern&quot;&gt;^/result/[^/*]$&lt;/param&gt;
-  &lt;param name=&quot;excludingPattern&quot;&gt;.*(hugeCollection).*&lt;/param&gt;
-&lt;/result&gt;
-]]></script>
-</div></div>
-
-<h1 id="XSLResult-Parameters">Parameters</h1>
-
-
-<p></p><ul></ul><p></p><ul><li><b>location (default)</b> - the location to go to after execution.</li><li><b>encoding</b> - character encoding used in XML, default UTF-8.</li></ul><p></p><ul><li><b>parse</b> - true by default. If set to false, the location param will
-not be parsed for Ognl expressions.</li></ul><p></p>
-
-<p></p>
-
-<p></p><p>
-<code>struts.properties</code> related configuration:
-</p>
-<ul></ul><p></p><ul><li><b>struts.xslt.nocache</b> - Defaults to false. If set to true, disables
-stylesheet caching. Good for development, bad for production.</li></ul><p></p>
-
-
-<h1 id="XSLResult-Examples">Examples</h1>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
-&lt;result name=&quot;success&quot; type=&quot;xslt&quot;&gt;
-  &lt;param name=&quot;location&quot;&gt;foo.xslt&lt;/param&gt;
-  &lt;param name=&quot;matchingPattern&quot;&gt;^/result/[^/*]$&lt;/param&gt;
-  &lt;param name=&quot;excludingPattern&quot;&gt;.*(hugeCollection).*&lt;/param&gt;
-&lt;/result&gt;
-]]></script>
-</div></div></div>
+&lt;/body&gt;
+&lt;/html&gt;
+&lt;/xsl:template&gt;</pre>
+</div></div></div></div><p>In the following example the XSLT result would only walk through action's properties without their childs. It would also skip every property that has <code>hugeCollection</code>&#160;in their name. Element's path is first compared to <code>excludingPattern</code>&#160;- if it matches it's no longer processed. Then it is compared to <code>matchingPattern</code>&#160;and processed only if there's a match.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;result name="success" type="xslt"&gt;
+  &lt;param name="stylesheetLocation"&gt;foo.xslt&lt;/param&gt;
+  &lt;param name="matchingPattern"&gt;^/result/[^/*]$&lt;/param&gt;
+  &lt;param name="excludingPattern"&gt;.*(hugeCollection).*&lt;/param&gt;
+&lt;/result&gt;</pre>
+</div></div><p>In the following example the XSLT result would use the action's user property instead of the action as it's base document and walk through it's properties. The <code>exposedValue</code>&#160;uses an OGNL expression to derive it's value.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;result name="success" type="xslt"&gt;
+  &lt;param name="stylesheetLocation"&gt;foo.xslt&lt;/param&gt;
+  &lt;param name="exposedValue"&gt;${user}&lt;/param&gt;
+&lt;/result&gt;</pre>
+</div></div><h1 id="XSLResult-Parameters">Parameters</h1><p>This result type takes the following parameters:</p><ul style="list-style-type: square;"><li><strong>stylesheetLocation</strong> (default) - the location to go to after execution.</li><li><strong>location</strong> (deprecated) - the same as <strong>stylesheetLocation</strong> but it was dropped since Struts 2.5.</li><li><strong>encoding&#160;</strong>- character encoding used in XML, default UTF-8.</li><li><strong>parse</strong>&#160;- <code>true</code>&#160;by default. If set to false, the location param will not be parsed for Ognl expressions.</li><li><strong>matchingPattern&#160;</strong>- <code>Pattern</code>&#160;that matches only desired elements, by default it matches everything.</li><li><strong>excludingPattern</strong>&#160;- <code>Pattern</code>&#160;that eliminates unwanted elements, by default it matches none.</li></ul><p><code>struts.properties</code>&#160;related configuration:</p><ul style="list-style-type: s
 quare;"><li><strong>struts.xslt.nocache</strong>&#160;- Defaults to false. If set to true, disables stylesheet caching. Good for development, bad for production.</li></ul><h1 id="XSLResult-Examples"><span style="font-size: 24.0px;">Examples</span></h1><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;result name="success" type="xslt"&gt;foo.xslt&lt;/result&gt;</pre>
+</div></div><p>&#160;</p><p>&#160;</p></div>
         </div>
 
         

Modified: websites/production/struts/content/download.html
==============================================================================
--- websites/production/struts/content/download.html (original)
+++ websites/production/struts/content/download.html Fri Feb  3 13:47:41 2017
@@ -177,27 +177,27 @@
 <h1>Full Releases</h1>
 <a class="anchor" name="struts-ga"></a>
 
-<a class="anchor" name="struts258"></a>
-<h2>Struts 2.5.8</h2>
+<a class="anchor" name="struts2510"></a>
+<h2>Struts 2.5.10</h2>
 
 <p>
-  <a href="http://struts.apache.org/">Apache Struts 2.5.8</a> is an elegant, extensible
+  <a href="http://struts.apache.org/">Apache Struts 2.5.10</a> is an elegant, extensible
   framework for creating enterprise-ready Java web applications. It is available in a full distribution,
   or as separate library, source, example and documentation distributions.
-  Struts 2.5.8 is the "best available" version of Struts in the 2.5 series.
+  Struts 2.5.10 is the "best available" version of Struts in the 2.5 series.
 </p>
 
 <ul>
   <li>
-    <a href="http://struts.apache.org/docs/version-notes-258.html">Version Notes</a>
+    <a href="http://struts.apache.org/docs/version-notes-2510.html">Version Notes</a>
   </li>
 
   <li>Full Distribution:
     <ul>
       <li>
-        <a href="[preferred]struts/2.5.8/struts-2.5.8-all.zip">struts-2.5.8-all.zip</a> (65MB)
-        [<a href="http://www.apache.org/dist/struts/2.5.8/struts-2.5.8-all.zip.asc">PGP</a>]
-        [<a href="http://www.apache.org/dist/struts/2.5.8/struts-2.5.8-all.zip.md5">MD5</a>]
+        <a href="[preferred]struts/2.5.10/struts-2.5.10-all.zip">struts-2.5.10-all.zip</a> (65MB)
+        [<a href="http://www.apache.org/dist/struts/2.5.10/struts-2.5.10-all.zip.asc">PGP</a>]
+        [<a href="http://www.apache.org/dist/struts/2.5.10/struts-2.5.10-all.zip.md5">MD5</a>]
       </li>
     </ul>
   </li>
@@ -205,9 +205,9 @@
   <li>Example Applications:
     <ul>
       <li>
-        <a href="[preferred]struts/2.5.8/struts-2.5.8-apps.zip">struts-2.5.8-apps.zip</a> (35MB)
-        [<a href="http://www.apache.org/dist/struts/2.5.8/struts-2.5.8-apps.zip.asc">PGP</a>]
-        [<a href="http://www.apache.org/dist/struts/2.5.8/struts-2.5.8-apps.zip.md5">MD5</a>]
+        <a href="[preferred]struts/2.5.10/struts-2.5.10-apps.zip">struts-2.5.10-apps.zip</a> (35MB)
+        [<a href="http://www.apache.org/dist/struts/2.5.10/struts-2.5.10-apps.zip.asc">PGP</a>]
+        [<a href="http://www.apache.org/dist/struts/2.5.10/struts-2.5.10-apps.zip.md5">MD5</a>]
       </li>
     </ul>
   </li>
@@ -215,9 +215,9 @@
   <li>Essential Dependencies Only:
     <ul>
       <li>
-        <a href="[preferred]struts/2.5.8/struts-2.5.8-min-lib.zip">struts-2.5.8-min-lib.zip</a> (4MB)
-        [<a href="http://www.apache.org/dist/struts/2.5.8/struts-2.5.8-min-lib.zip.asc">PGP</a>]
-        [<a href="http://www.apache.org/dist/struts/2.5.8/struts-2.5.8-min-lib.zip.md5">MD5</a>]
+        <a href="[preferred]struts/2.5.10/struts-2.5.10-min-lib.zip">struts-2.5.10-min-lib.zip</a> (4MB)
+        [<a href="http://www.apache.org/dist/struts/2.5.10/struts-2.5.10-min-lib.zip.asc">PGP</a>]
+        [<a href="http://www.apache.org/dist/struts/2.5.10/struts-2.5.10-min-lib.zip.md5">MD5</a>]
       </li>
     </ul>
   </li>
@@ -225,9 +225,9 @@
   <li>All Dependencies:
     <ul>
       <li>
-        <a href="[preferred]struts/2.5.8/struts-2.5.8-lib.zip">struts-2.5.8-lib.zip</a> (19MB)
-        [<a href="http://www.apache.org/dist/struts/2.5.8/struts-2.5.8-lib.zip.asc">PGP</a>]
-        [<a href="http://www.apache.org/dist/struts/2.5.8/struts-2.5.8-lib.zip.md5">MD5</a>]
+        <a href="[preferred]struts/2.5.10/struts-2.5.10-lib.zip">struts-2.5.10-lib.zip</a> (19MB)
+        [<a href="http://www.apache.org/dist/struts/2.5.10/struts-2.5.10-lib.zip.asc">PGP</a>]
+        [<a href="http://www.apache.org/dist/struts/2.5.10/struts-2.5.10-lib.zip.md5">MD5</a>]
       </li>
     </ul>
   </li>
@@ -235,9 +235,9 @@
   <li>Documentation:
     <ul>
       <li>
-        <a href="[preferred]struts/2.5.8/struts-2.5.8-docs.zip">struts-2.5.8-docs.zip</a> (13MB)
-        [<a href="http://www.apache.org/dist/struts/2.5.8/struts-2.5.8-docs.zip.asc">PGP</a>]
-        [<a href="http://www.apache.org/dist/struts/2.5.8/struts-2.5.8-docs.zip.md5">MD5</a>]
+        <a href="[preferred]struts/2.5.10/struts-2.5.10-docs.zip">struts-2.5.10-docs.zip</a> (13MB)
+        [<a href="http://www.apache.org/dist/struts/2.5.10/struts-2.5.10-docs.zip.asc">PGP</a>]
+        [<a href="http://www.apache.org/dist/struts/2.5.10/struts-2.5.10-docs.zip.md5">MD5</a>]
       </li>
     </ul>
   </li>
@@ -245,9 +245,9 @@
   <li>Source:
     <ul>
       <li>
-        <a href="[preferred]struts/2.5.8/struts-2.5.8-src.zip">struts-2.5.8-src.zip</a> (7MB)
-        [<a href="http://www.apache.org/dist/struts/2.5.8/struts-2.5.8-src.zip.asc">PGP</a>]
-        [<a href="http://www.apache.org/dist/struts/2.5.8/struts-2.5.8-src.zip.md5">MD5</a>]
+        <a href="[preferred]struts/2.5.10/struts-2.5.10-src.zip">struts-2.5.10-src.zip</a> (7MB)
+        [<a href="http://www.apache.org/dist/struts/2.5.10/struts-2.5.10-src.zip.asc">PGP</a>]
+        [<a href="http://www.apache.org/dist/struts/2.5.10/struts-2.5.10-src.zip.md5">MD5</a>]
       </li>
     </ul>
   </li>
@@ -350,8 +350,8 @@
     <ul>
       <li>
         <a href="[preferred]struts/2.5-BETA3/struts-2.5-BETA3-all.zip">struts-2.5-BETA3-all.zip</a> (65MB)
-        [<a href="http://www.apache.org/dist/struts/2.5.8/struts-2.5-BETA3-all.zip.asc">PGP</a>]
-        [<a href="http://www.apache.org/dist/struts/2.5.8/struts-2.5-BETA3-all.zip.md5">MD5</a>]
+        [<a href="http://www.apache.org/dist/struts/2.5.10/struts-2.5-BETA3-all.zip.asc">PGP</a>]
+        [<a href="http://www.apache.org/dist/struts/2.5.10/struts-2.5-BETA3-all.zip.md5">MD5</a>]
       </li>
     </ul>
   </li>

Modified: websites/production/struts/content/downloads.html
==============================================================================
--- websites/production/struts/content/downloads.html (original)
+++ websites/production/struts/content/downloads.html Fri Feb  3 13:47:41 2017
@@ -137,7 +137,7 @@
     <ul>
       <li>
         <a href="http://struts.apache.org/download.cgi#struts-ga">
-          Struts 2.5.8
+          Struts 2.5.10
         </a> ("best available")
       </li>
     </ul>

Modified: websites/production/struts/content/index.html
==============================================================================
--- websites/production/struts/content/index.html (original)
+++ websites/production/struts/content/index.html Fri Feb  3 13:47:41 2017
@@ -125,7 +125,7 @@
       extensible using a plugin architecture, and ships with plugins to support
       REST, AJAX and JSON.
     </p>
-    <a href="/download.cgi#struts258" class="btn btn-primary btn-large">
+    <a href="/download.cgi#struts2510" class="btn btn-primary btn-large">
       <img src="img/download-icon.svg"> Download
     </a>
     <a href="primer.html" class="btn btn-info btn-large">
@@ -145,12 +145,12 @@
         </p>
       </div>
       <div class="column col-md-4">
-        <h2>Apache Struts 2.5.8 GA</h2>
+        <h2>Apache Struts 2.5.10 GA</h2>
         <p>
-          Apache Struts 2.5.8 GA has been released<br/>on 19 December 2016.
+          Apache Struts 2.5.10 GA has been released<br/>on 3 February 2017.
         </p>
-        Read more in <a href="announce.html#a20161219">Announcement</a> or in
-        <a href="/docs/version-notes-258.html">Version notes</a>
+        Read more in <a href="announce.html#a20170203">Announcement</a> or in
+        <a href="/docs/version-notes-2510.html">Version notes</a>
       </div>
       <div class="column col-md-4">
         <h2>Apache Struts 2.3.31 GA</h2>