Added: websites/production/struts/content/core-developers/weblogic.html
==============================================================================
--- websites/production/struts/content/core-developers/weblogic.html (added)
+++ websites/production/struts/content/core-developers/weblogic.html Thu Jun  1 
11:35:58 2017
@@ -0,0 +1,309 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>WebLogic</title>
+
+  <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts"; class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" 
src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"; 
alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" 
data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img 
src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/";>License</a></li>
+                <li><a 
href="http://apache.org/foundation/thanks.html";>Thanks!</a></li>
+                <li><a 
href="http://apache.org/foundation/sponsorship.html";>Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW";>Issue 
Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts 
Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin 
dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a 
href="https://cwiki.apache.org/confluence/display/WW/Home";>Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/docs/tutorials.html">Tutorials</a></li>
+                <li><a href="/docs/faqs.html">FAQs</a></li>
+                <li><a href="/docs/guides.html">Guides</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts 
Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a 
href="http://cwiki.apache.org/S2PLUGINS/home.html";>Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/security/">Security Guide (WIP)</a></li>
+                <li><a href="/core-developers/">Core Developers Guide 
(WIP)</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting 
patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a 
href="https://git-wip-us.apache.org/repos/asf?p=struts.git";>Source 
Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/";><img 
src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a href="index.html" title="back to Core Developers Guide"><< back to Core 
Developers Guide</a>
+    <h1 id="weblogic">WebLogic</h1>
+
+<p>When deploying to WebLogic, some developers report problems with the 
framework locating resources, especially with Velocity. For more about WebLogic 
and Velocity, see the <a 
href="http://wiki\.apache\.org/jakarta\-velocity/VelocityAndWeblogic";>Velocity 
website</a>^[http://wiki.apache.org/jakarta-velocity/VelocityAndWeblogic].</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p>To deploy to WebLogic, the common approach is to create and deploy an 
unexpanded WAR to the WebLogic deployment directory. With WL 8.x, the 
deployment directory is typically at 
&lt;bea_home&gt;/user_projects/domains/mydomain/.</p>
+
+<blockquote>
+
+</blockquote>
+
+<p>#####Adding an struts-velocity.properties Configuration File#####</p>
+
+<ul>
+  <li>In the</li>
+</ul>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>struts.properties
+</code></pre>
+</div>
+<p>file (usually kept in the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>WEB-INF/classes
+</code></pre>
+</div>
+<p>directory), add an entry that specifies a Velocity configuation file.</p>
+
+<ul>
+  <li></li>
+</ul>
+
+<p><strong>struts.properties</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+struts.velocity.configfile = struts-velocity.properties
+
+</code></pre>
+</div>
+
+<ul>
+  <li>Create the corresponding Velocity properties file 
(“struts-velocity.properties”), preferably in the same location as the</li>
+</ul>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>struts.properties
+</code></pre>
+</div>
+<p>file.</p>
+
+<ul>
+  <li>Copy into the Velocity properties file the contents of the</li>
+</ul>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>velocity.properties
+</code></pre>
+</div>
+<p>file that is the the SAF</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>velocity-dep.jar
+</code></pre>
+</div>
+<p>.</p>
+
+<ul>
+  <li>In your new</li>
+</ul>
+
+<div class="highlighter-rouge"><pre 
class="highlight"><code>struts-velocity.properties
+</code></pre>
+</div>
+<p>file, find he section titled  “</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>T E M P L A T E  L 
O A D E R S
+</code></pre>
+</div>
+<p>”, and change this section as so:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+===========================================
+resource.loader = class
+
+file.resource.loader.description = Velocity File Resource Loader
+file.resource.loader.class = 
org.apache.velocity.runtime.resource.loader.FileResourceLoader
+file.resource.loader.path = .
+file.resource.loader.cache = false
+file.resource.loader.modificationCheckInterval = 2
+
+class.resource.loader.class = 
org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
+class.resource.loader.cache = true
+===========================================
+
+</code></pre>
+</div>
+
+<ul>
+  <li>Redeploy a fresh WAR to WebLogic.</li>
+</ul>
+
+<p>#####NPE when using Struts 2 Jasper Reports plugin#####</p>
+
+<p>When using mentioned plugin in Weblogic 11g you can get 
NullPointerException within Struts 2. To solve the problem you must enable the 
“Archived Real Path” global property in Weblogic admin console &gt; 
configuration &gt; Web Applications. It’s because JasperReportsResult 
determines the report directory base on 
servletContext.getRealPath(finalLocation).</p>
+
+<p>#####Convention based application doesn’t work#####</p>
+
+<p>When you deployed an application that base on the Convention Plugin and you 
get an error messages that says:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+There is no Action mapped for namespace / and action name xxxxxx
+
+</code></pre>
+</div>
+
+<p>create struts.properties file in WEB-INF/classes folder (in the expanded 
application’s folder or in the source code) with below statements:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+#struts convention property modifications for Weblogic
+struts.convention.action.includeJars=.*?/yourwebapp.*?jar(!/)?
+struts.convention.action.fileProtocols=jar,zip
+
+</code></pre>
+</div>
+
+<p>Thanks to Amit who the first published solution on his <a 
href="http://tech\-architecture\.blogspot\.com/2009/02/getting\-struts\-21\-to\-work\-in\-weblogic\.html";>blog</a>^[http://tech-architecture.blogspot.com/2009/02/getting-struts-21-to-work-in-weblogic.html]</p>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/";>The Apache 
Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache 
Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a 
href="https://softwaremill.com/";>SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js"; async="async" 
defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

Added: websites/production/struts/content/core-developers/websphere.html
==============================================================================
--- websites/production/struts/content/core-developers/websphere.html (added)
+++ websites/production/struts/content/core-developers/websphere.html Thu Jun  
1 11:35:58 2017
@@ -0,0 +1,446 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>WebSphere</title>
+
+  <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts"; class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" 
src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"; 
alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" 
data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img 
src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/";>License</a></li>
+                <li><a 
href="http://apache.org/foundation/thanks.html";>Thanks!</a></li>
+                <li><a 
href="http://apache.org/foundation/sponsorship.html";>Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW";>Issue 
Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts 
Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin 
dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a 
href="https://cwiki.apache.org/confluence/display/WW/Home";>Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/docs/tutorials.html">Tutorials</a></li>
+                <li><a href="/docs/faqs.html">FAQs</a></li>
+                <li><a href="/docs/guides.html">Guides</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts 
Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a 
href="http://cwiki.apache.org/S2PLUGINS/home.html";>Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/security/">Security Guide (WIP)</a></li>
+                <li><a href="/core-developers/">Core Developers Guide 
(WIP)</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting 
patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a 
href="https://git-wip-us.apache.org/repos/asf?p=struts.git";>Source 
Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/";><img 
src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a href="index.html" title="back to Core Developers Guide"><< back to Core 
Developers Guide</a>
+    <h1 id="websphere">WebSphere</h1>
+
+<p>#####WebSphere 5.1#####</p>
+
+<p>(ok) <a 
href="http://forums\.opensymphony\.com/thread\.jspa?threadID=26068";>Be sure to 
install WebSphere’s Fix Pack 
1</a>^[http://forums.opensymphony.com/thread.jspa?threadID=26068].</p>
+
+<p>#####WebSphere 6#####</p>
+
+<p>See forum thread: <a 
href="http://forums\.opensymphony\.com/message\.jspa?messageID=119574\#119574";>http://forums.opensymphony.com/message.jspa?messageID=119574#119574</a></p>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+  <p>It looks like there is a bug in WebSphere App Server related to which 
classloader is used at the time that Struts2 is loading the properties files, 
(all properties files, not just struts.properties and default.properties). The 
bug may have been fixed in WAS 6.0.2.9, (check out this link for details <a 
href="http://www\-1\.ibm\.com/support/docview\.wss?uid=swg27006876";>http://www-1.ibm.com/support/docview.wss?uid=swg27006876</a>).</p>
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+  <p>If you just want to confirm the issue, or you need just a temporary fix, 
try this:</p>
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+  <p>1) jar up all properties files for your project, (including 
default.properties in its full path), and put these into the WS common 
applications lib directory at the same level as the “profiles” 
directory.</p>
+</blockquote>
+
+<blockquote>
+
+  <p>2) Run the application - everything should work</p>
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+  <p>This solution is strictly temporary, as all struts2 apps in this instance 
of WAS would have to use the same properties files. A better solution:</p>
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+  <p>1) add a servlet that initializes the Struts Dispatcher with the servlet 
context:</p>
+</blockquote>
+
+<blockquote>
+
+  <p>import org.apache.struts2.dispatcher.Dispatcher;</p>
+
+  <p>public class LaunchServlet extends HttpServlet implements Servlet {</p>
+
+  <div class="highlighter-rouge"><pre class="highlight"><code>public 
LaunchServlet() \{
+       super();
+\}
+ 
+public void init(ServletConfig arg0) throws ServletException \{
+       
+       // this works around a bug in the websphere classloader\.
+       super\.init(arg0);
+       Dispatcher d = new Dispatcher(getServletContext(), new 
HashMap\&lt;String, String\&gt;());      
+       
+\}
+</code></pre>
+  </div>
+
+  <p>}</p>
+
+</blockquote>
+
+<blockquote>
+  <p>2) launch it at start-up (web.xml):</p>
+</blockquote>
+
+<blockquote>
+
+  <div class="highlighter-rouge"><pre class="highlight"><code>\&lt;servlet\&gt;
+  \&lt;servlet\-name\&gt;dummyaction\&lt;/servlet\-name\&gt;
+  
\&lt;servlet\-class\&gt;com\.xxx\.yyyyyy\.service\.LaunchServlet\&lt;/servlet\-class\&gt;
+  \&lt;load\-on\-startup\&gt;1\&lt;/load\-on\-startup\&gt;
+\&lt;/servlet\&gt;
+</code></pre>
+  </div>
+
+</blockquote>
+
+<blockquote>
+  <p>3) Run application and everything should work.</p>
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<p>#####WebSphere 6.5#####</p>
+
+<p>To make struts2 work in Websphere, one has to set Websphere specific 
properties, you may want to add that to the wiki:</p>
+
+<p>The properties are:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+com.ibm.ws.webcontainer.assumefiltersuccessonsecurityerror = true
+com.ibm.ws.webcontainer.invokefilterscompatibility = true
+
+</code></pre>
+</div>
+
+<p>At least that is necessary when using StrutsPrepareAndExecuteFilter.</p>
+
+<p>In Websphre admin console one has to add those properties here:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+Servers &gt; Application servers &gt; {server name} &gt; Web container &gt; 
Custom Properties
+
+</code></pre>
+</div>
+
+<p>A wsadmin jython script to set those properties could look like this:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+
+def findObjectName(objectId):
+        index = objectId.find('(')
+        return objectId[0 : index]
+
+node = AdminNodeManagement.listNodes()[0]
+server = AdminConfig.list('Server')
+
+nodeName = findObjectName(node)
+serverName = findObjectName(server)
+
+webContainer = AdminConfig.list('WebContainer', node)
+webContainerDetails = AdminConfig.show(webContainer)
+
+if 
webContainerDetails.find("com.ibm.ws.webcontainer.assumefiltersuccessonsecurityerror")
 == -1:
+        print "creating prop: 
com.ibm.ws.webcontainer.assumefiltersuccessonsecurityerror"
+        AdminServerManagement.configureCustomProperty(nodeName, serverName, 
"WebContainer","com.ibm.ws.webcontainer.assumefiltersuccessonsecurityerror", 
"true")
+if 
webContainerDetails.find("com.ibm.ws.webcontainer.invokefilterscompatibility") 
== -1:
+        print "creating prop: 
com.ibm.ws.webcontainer.invokefilterscompatibility"
+        AdminServerManagement.configureCustomProperty(nodeName, serverName, 
"WebContainer", "com.ibm.ws.webcontainer.invokefilterscompatibility", "true")
+
+</code></pre>
+</div>
+
+<p>Thanks to Christoph Nenning (christoph dot nenning at lex-com at net)</p>
+
+<p>#####JSESSIONID handling#####</p>
+
+<p>IBM WebSphere Application Server uses the JSESSIONID information to keep 
track of the client session. If you have an application where the application 
client must navigate across multiple WebSphere Application Server nodes 
residing in same domain, then the JSESSIONID information may be over-written on 
the client because multiple JSESSIONID cookies received with the same name and 
path.</p>
+
+<p>When persistence is disabled and if the JSESSIONID in the incoming request 
is not found in the current session manager, then the session manager will 
generate a new sessionId and create a session object, instead of using the 
sessionId in the incoming request.</p>
+
+<p>To resolve this issue, configure WebSphere Application Server to reuse the 
sessionId present in the incoming request.</p>
+
+<p>For All versions:</p>
+
+<ol>
+  <li>
+    <p>Open the administrative console.</p>
+  </li>
+  <li>
+    <p>Select Servers &gt; Application Servers &gt; Server_Name &gt; Server 
Infrastructure &gt; Java and Process Management &gt; Process Definition &gt; 
Java Virtual Machine &gt; Custom Properties &gt; New</p>
+  </li>
+  <li>
+    <p>Add a new Custom Property for the JVM to reuse the sessionId:</p>
+  </li>
+</ol>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+System Property Name: HttpSessionIdReuse
+System Property Value: true
+
+</code></pre>
+</div>
+
+<ol>
+  <li>Save your changes and restart the Application Server.</li>
+</ol>
+
+<p>If the application client does not navigate across multiple WebSphere 
Application Server nodes residing in the same domain but there are multiple 
WARs with different context roots, following is the step that needs to be 
followed for session to be maintained in one web application:</p>
+
+<ol>
+  <li>
+    <p>Open the administrative console.</p>
+  </li>
+  <li>
+    <p>Select Application servers &gt; Server_Name &gt; Session management 
&gt; Cookies</p>
+  </li>
+  <li>
+    <p>In “Cookie Path”, specify the context root of web application in 
which session needs to be maintained. This will ensure that cookies are sent 
only to /«context_root» URL and prevent overriding of JSSESSIONID cookie 
which results in new session creation by WAS.</p>
+  </li>
+  <li>
+    <p>Save your changes and restart the Application Server.</p>
+  </li>
+</ol>
+
+<p>Thanks to Vineet Kanwal from IBM!</p>
+
+<p>##Big Picture## {#PAGE_13859}</p>
+
+<p>The diagram describes the framework’s architecture.</p>
+
+<p><img 
src="/Users/lukaszlenart/Projects/Apache/struts\-site/target/md/attachments/att2475\_Struts2\-Architecture\.png"
 alt="Struts2-Architecture.png" /></p>
+
+<p>In the diagram, an initial request goes to the Servlet container (such as 
Jetty or Resin) which is passed through a standard filter chain. The chain 
includes the (optional) <strong>ActionContextCleanUp</strong> filter, which is 
useful when integrating technologies such as <em>SiteMesh Plugin</em> . Next, 
the required <strong>FilterDispatcher</strong> is called, which in turn 
consults the <a href="#PAGE_14128">ActionMapper</a> to determine if the request 
should invoke an action.</p>
+
+<p>If the ActionMapper determines that an Action should be invoked, the 
FilterDispatcher delegates control to the <strong>ActionProxy</strong>. The 
ActionProxy consults the framework <a href="#PAGE_14163">Configuration 
Files</a> manager (initialized from the <a href="#PAGE_13901">struts.xml</a> 
file). Next, the ActionProxy creates an <strong>ActionInvocation</strong>, 
which is responsible for the command pattern implementation. This includes 
invoking any <strong>Interceptors</strong> (the <em>before</em>  clause) in 
advance of invoking the <strong>Action</strong> itself.</p>
+
+<p>Once the Action returns, the ActionInvocation is responsible for looking up 
the proper <strong>result</strong> associated with the <strong>Action result 
code</strong> mapped in</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>struts.xml
+</code></pre>
+</div>
+<p>. The result is then executed, which often (but not always, as is the case 
for <a href="#PAGE_14214">Action Chaining</a>) involves a template written in 
<em>JSP</em>  or <em>FreeMarker</em>  to be rendered. While rendering, the 
templates can use the <em>Struts Tags</em>  provided by the framework. Some of 
those components will work with the ActionMapper to render proper URLs for 
additional requests.</p>
+
+<table>
+  <tbody>
+    <tr>
+      <td>All objects in this architecture (Actions, <a 
href="#PAGE_14035">Results</a>, <a href="#PAGE_13941">Interceptors</a>, and so 
forth) are created by an <a href="#PAGE_27470">ObjectFactory</a>. This 
ObjectFactory is pluggable. We can provide our own ObjectFactory for any reason 
that requires knowing when objects in the framework are created. A popular 
ObjectFactory implementation uses Spring as provided by the <em>Spring 
Plugin</em> .</td>
+    </tr>
+  </tbody>
+</table>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p>Interceptors are executed again (in reverse order, calling the 
<em>after</em>  clause). Finally, the response returns through the filters 
configured in the</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>web.xml
+</code></pre>
+</div>
+<p>. If the ActionContextCleanUp filter is present, the FilterDispatcher will 
<em>not</em>  clean up the ThreadLocal <strong>ActionContext</strong>. If the 
ActionContextCleanUp filter is not present, the FilterDispatcher will cleanup 
all ThreadLocals.</p>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/";>The Apache 
Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache 
Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a 
href="https://softwaremill.com/";>SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js"; async="async" 
defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

Added: websites/production/struts/content/core-developers/wildcard-mappings.html
==============================================================================
--- websites/production/struts/content/core-developers/wildcard-mappings.html 
(added)
+++ websites/production/struts/content/core-developers/wildcard-mappings.html 
Thu Jun  1 11:35:58 2017
@@ -0,0 +1,432 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Wildcard Mappings</title>
+
+  <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts"; class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" 
src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"; 
alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" 
data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img 
src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/";>License</a></li>
+                <li><a 
href="http://apache.org/foundation/thanks.html";>Thanks!</a></li>
+                <li><a 
href="http://apache.org/foundation/sponsorship.html";>Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW";>Issue 
Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts 
Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin 
dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a 
href="https://cwiki.apache.org/confluence/display/WW/Home";>Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/docs/tutorials.html">Tutorials</a></li>
+                <li><a href="/docs/faqs.html">FAQs</a></li>
+                <li><a href="/docs/guides.html">Guides</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts 
Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a 
href="http://cwiki.apache.org/S2PLUGINS/home.html";>Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/security/">Security Guide (WIP)</a></li>
+                <li><a href="/core-developers/">Core Developers Guide 
(WIP)</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting 
patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a 
href="https://git-wip-us.apache.org/repos/asf?p=struts.git";>Source 
Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/";><img 
src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a href="index.html" title="back to Core Developers Guide"><< back to Core 
Developers Guide</a>
+    <h1 id="wildcard-mappings">Wildcard Mappings</h1>
+
+<p>#####Wildcards#####</p>
+
+<p>As an application grows in size, so will the number of action mappings. 
Wildcards can be used to combine similar mappings into one more generic 
mapping.</p>
+
+<p>The best way to explain wildcards is to show an example and walk through 
how it works. This example modifies a conventional mapping to use wildcards to 
match all pages that start with /edit:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;action name="/edit*" 
class="org.apache.struts.webapp.example.Edit{1}Action"&gt;
+    &lt;result name="failure"&gt;/mainMenu.jsp&lt;/result&gt;
+    &lt;result&gt;{1}.jsp&lt;/result&gt;
+&lt;/action&gt;
+
+</code></pre>
+</div>
+
+<p>The “*” in the name attribute allows the mapping to match the request 
URIs /editSubscription, editRegistration, or any other URI that starts with 
/edit, however /editSubscription/add would not be matched. The part of the URI 
matched by the wildcard will then be substituted into various attributes of the 
action mapping and its action results replacing {1}. For the rest of the 
request, the framework will see the action mapping and its action results 
containing the new values.</p>
+
+<p>Mappings are matched against the request in the order they appear in the 
framework’s configuration file. If more than one pattern matches <strong>the 
last one wins</strong>, so less specific patterns must appear before more 
specific ones. However, if the request URL can be matched against a path 
without any wildcards in it, no wildcard matching is performed and order is not 
important. Also, note that wildcards are not greedy, meaning they only match 
until the first occurrence of the following string pattern.  For example, 
consider the following mapping:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;action name="List*s" class="actions.List{1}s"&gt;
+  &lt;result&gt;list{1}s.jsp&lt;/result&gt;
+&lt;/action&gt;
+
+</code></pre>
+</div>
+
+<p>This mapping would work correctly for the URI</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>ListAccounts
+</code></pre>
+</div>
+<p>but not</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>ListSponsors
+</code></pre>
+</div>
+<p>, because the latter would turn into this configuration:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;action name="ListSpons" class="actions.ListSpons"&gt;
+  &lt;result&gt;listSpons.jsp&lt;/result&gt;
+&lt;/action&gt;
+
+</code></pre>
+</div>
+
+<p>Wildcard patterns can contain one or more of the following special 
tokens:</p>
+
+<p>|*|Matches zero or more characters excluding the slash (‘/’) character.|
+|–|———————————————————————|
+|**|Matches zero or more characters including the slash (‘/’) character.|
+|\character|The backslash character is used as an escape sequence. Thus \
+‘\*’ matches the character asterisk (‘*’), and \
+‘\\’ matches the character backslash (‘\’).|</p>
+
+<p>Patterns can optionally be matched “loosely”. When the end of the 
pattern matches *[^*]*$ (wildcard, no wildcard, wildcard), if the pattern 
fails, it is also matched as if the last two characters didn’t exist. The 
goal is to support the legacy “*!*” syntax, where the “!*” is 
optional.</p>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p>In the action mapping and action results, the wildcard-matched values can 
be accessed with the token {N} where N is a number from 1 to 9 indicating which 
wildcard-matched value to substitute. The whole request URI can be accessed 
with the {0} token.</p>
+
+<p>Also, the action mapping and action result properties will accept 
wildcard-matched strings in their value attribute, like:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;action name="/edit/*" 
class="org.apache.struts.webapp.example.Edit{1}Action"&gt;
+    &lt;param name="id"&gt;{1}&lt;/param&gt;
+    &lt;result&gt;
+      &lt;param name="location"&gt;/mainMenu.jsp&lt;/param&gt;
+      &lt;param name="id"&gt;{1}&lt;/param&gt; 
+    &lt;/result&gt;
+&lt;/action&gt;
+
+</code></pre>
+</div>
+
+<p>(light-on) See also <a href="#PAGE_14122">Wildcard Method</a></p>
+
+<p>#####Parameters in namespaces#####</p>
+
+<p>From Struts 2.1+ namespace patterns can be extracted as request parameters 
and bound to the action. To enable this feature, set the following constant in 
struts.xml:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;constant name="struts.patternMatcher" value="namedVariable"/&gt;
+
+</code></pre>
+</div>
+
+<p>With that in place, namespace definitions can contain {PARAM_NAME} patterns 
which will be evaluated against the request URL and extracted as parameters, 
for example:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+@Namespace{"/users/{userID}");
+public class DetailsAction exends ActionSupport {
+  private Long userID;
+  public void setUserID(Long userID) {...}
+}
+
+</code></pre>
+</div>
+
+<p>If the request URL is <em>/users/10/detail</em> , then the DetailsAction 
will be executed and its userID field will be set to <em>10</em> .</p>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+  <p>Only one PatternMatcher implementation can be used at a time.  The two 
implementations included with Struts 2 are mutually exclusive.  You cannot use 
Wildcards and Named Variable patterns at the same application (if that were 
required, you’d need to create a custom PatternMatcher implementation).</p>
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+  <p>Some tags tags not are 100% compatible with variables in the namespace. 
For instance, they may write the literal namespace into the HTML (eg 
/{user}/2w) instead of the path used in the request (ie. /brett/24).  This 
usually affects attributes that attempt to guess the namespace of an action 
(eg. Form tag, Action tag, action=). This problem can be avoided by using HTML 
tags directly with relative paths or explicit URLs.</p>
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<table>
+  <tbody>
+    <tr>
+      <td>Similar functionality can also be implemented using a custom 
ActionMapper.  The ActionMapper will need to parse the namespace and request 
itself to set parameters on the matched action.  The default ActonMapper is 
responsible for invoking the PatternMatcher.</td>
+    </tr>
+  </tbody>
+</table>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p>#####Parameters after the action name#####</p>
+
+<p>To use parameters in the URL, after the action name, make sure this is 
set:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;constant name="struts.enable.SlashesInActionNames" value="true"/&gt;
+&lt;constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/&gt;
+
+</code></pre>
+</div>
+
+<p>Then the action mapping will look like:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;package name="edit" extends="struts-default" namespace="/edit"&gt;
+    &lt;action name="/person/*" 
class="org.apache.struts.webapp.example.EditAction"&gt;
+        &lt;param name="id"&gt;{1}&lt;/param&gt;
+        &lt;result&gt;/mainMenu.jsp&lt;/result&gt;
+    &lt;/action&gt;   
+&lt;/package&gt;
+
+</code></pre>
+</div>
+
+<p>When a URL like</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>/edit/person/123
+</code></pre>
+</div>
+<p>is requested, EditAction will be called, and its “id” field will be set 
to 123.</p>
+
+<p>#####Advanced Wildcards#####</p>
+
+<p>From 2.1.9+ regular expressions can be defined defined in the action name. 
To use this form of wild card, the following constants must be set:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;constant name="struts.enable.SlashesInActionNames" value="true"/&gt;
+&lt;constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/&gt;
+&lt;constant name="struts.patternMatcher" value="regex" /&gt;
+
+</code></pre>
+</div>
+
+<p>The regular expressions can be in two forms, the simplest one is 
{FIELD_NAME}, in which case the field with the FIELD_NAME in the action will be 
populated with the matched text, for example:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;package name="books" extends="struts-default" namespace="/"&gt;
+    &lt;action name="/{type}/content/{title}" class="example.BookAction"&gt;
+       &lt;result&gt;/books/content.jsp&lt;/result&gt;
+    &lt;/action&gt;
+&lt;/package&gt;
+
+</code></pre>
+</div>
+
+<p>In this example, if the url</p>
+
+<div class="highlighter-rouge"><pre 
class="highlight"><code>/fiction/content/Frankenstein
+</code></pre>
+</div>
+<p>is requested, BookAction’s field “type” will be set to “fiction”, 
and the field “title” will be set to “Frankenstein”.</p>
+
+<p>The regular expression can also be in the form 
{FIELD_NAME:REGULAR_EXPRESSION}. The regular expression is a normal Java 
regular expression. For example:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;package name="books" extends="struts-default" namespace="/"&gt;
+    &lt;action name="/{type}/{author:.+}/list" 
class="example.ListBooksAction"&gt;
+       &lt;result&gt;/books/list.jsp&lt;/result&gt;
+    &lt;/action&gt;
+&lt;/package&gt;
+
+</code></pre>
+</div>
+
+<p>In this example, if the url</p>
+
+<div class="highlighter-rouge"><pre 
class="highlight"><code>/philosophy/AynRand/list
+</code></pre>
+</div>
+<p>is requested, ListBooksAction’s field “type” will be set to 
“philosophy” and “author” to “AynRand”.</p>
+
+<p>The matched groups can still be accessed using the {X} notation, like:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;package name="books" extends="struts-default" namespace="/"&gt;
+    &lt;action name="/books/{ISBN}/content" class="example.BookAction"&gt;
+       &lt;result&gt;/books/{1}.jsp&lt;/result&gt;
+    &lt;/action&gt;
+&lt;/package&gt;
+
+</code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/";>The Apache 
Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache 
Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a 
href="https://softwaremill.com/";>SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js"; async="async" 
defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

Added: 
websites/production/struts/content/core-developers/writing-interceptors.html
==============================================================================
--- 
websites/production/struts/content/core-developers/writing-interceptors.html 
(added)
+++ 
websites/production/struts/content/core-developers/writing-interceptors.html 
Thu Jun  1 11:35:58 2017
@@ -0,0 +1,292 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>Writing Interceptors</title>
+
+  <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts"; class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" 
src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"; 
alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" 
data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img 
src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/";>License</a></li>
+                <li><a 
href="http://apache.org/foundation/thanks.html";>Thanks!</a></li>
+                <li><a 
href="http://apache.org/foundation/sponsorship.html";>Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW";>Issue 
Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts 
Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin 
dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a 
href="https://cwiki.apache.org/confluence/display/WW/Home";>Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/docs/tutorials.html">Tutorials</a></li>
+                <li><a href="/docs/faqs.html">FAQs</a></li>
+                <li><a href="/docs/guides.html">Guides</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts 
Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a 
href="http://cwiki.apache.org/S2PLUGINS/home.html";>Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/security/">Security Guide (WIP)</a></li>
+                <li><a href="/core-developers/">Core Developers Guide 
(WIP)</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting 
patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a 
href="https://git-wip-us.apache.org/repos/asf?p=struts.git";>Source 
Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/";><img 
src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a href="index.html" title="back to Core Developers Guide"><< back to Core 
Developers Guide</a>
+    <h1 id="writing-interceptors">Writing Interceptors</h1>
+
+<p>See the <a href="interceptors.html">Interceptors</a> page for an overview 
of how interceptors work.</p>
+
+<p><strong>Interceptor interface</strong></p>
+
+<p>Interceptors must implement the 
com.opensymphony.xwork2.interceptor.Interceptor interface.</p>
+
+<p><strong>Interceptor.java</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+public interface Interceptor extends Serializable {
+
+    void destroy();
+
+    void init();
+
+    String intercept(ActionInvocation invocation) throws Exception;
+}
+
+</code></pre>
+</div>
+
+<p>The <em>init</em>  method is called the after interceptor is instantiated 
and before calling <em>intercept</em> . This is the place to allocate any 
resources used by the interceptor.</p>
+
+<p>The <em>intercept</em>  method is where the interceptor code is written. 
Just like an action method, <em>intercept</em>  returns a result used by Struts 
to forward the request to another web resource. Calling <em>invoke</em>  on the 
parameter of type ActionInvocation will execute the action (if this is the last 
interceptor on the stack) or another interceptor.</p>
+
+<table>
+  <tbody>
+    <tr>
+      <td>Keep in mind that <em>invoke</em>  will return 
<strong>after</strong> the result has been called (eg. after you JSP has been 
rendered), making it perfect for things like open-session-in-view patterns. If 
you want to do something before the result gets called, you should implement a 
PreResultListener.</td>
+    </tr>
+  </tbody>
+</table>
+
+<table>
+  <tbody>
+    <tr>
+    </tr>
+  </tbody>
+</table>
+
+<p>Overwrite <em>destroy</em>  to release resources on application 
shutdown.</p>
+
+<p><strong>Thread Safety</strong></p>
+
+<p><strong>Interceptors must be thread-safe!</strong></p>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<blockquote>
+  <p>A Struts 2 Action instance is created for every request and do not need 
to be thread-safe. Conversely, Interceptors are shared between requests and 
must be <a 
href="http://en\.wikipedia\.org/wiki/Thread\-safety";>thread-safe</a>^[http://en.wikipedia.org/wiki/Thread-safety].</p>
+</blockquote>
+
+<blockquote>
+
+</blockquote>
+
+<p><strong>AbstractInterceptor</strong></p>
+
+<p>The AbstractInterceptor class provides an empty implementation of 
<em>init</em>  and <em>destroy</em> , and can be used if these methods are not 
going to be implemented.</p>
+
+<p><strong>Mapping</strong></p>
+
+<p>Interceptors are declared using the <em>interceptor</em>  element, nested 
inside the <em>interceptors</em>  element. Example from struts-default.xml:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+&lt;struts&gt;
+   ...
+
+   &lt;package name="struts-default"&gt;
+      &lt;interceptors&gt;
+         &lt;interceptor name="alias" 
class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/&gt;
+         &lt;interceptor name="autowiring" 
class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/&gt;
+         ...
+      &lt;/interceptors&gt;
+   &lt;/package&gt;
+
+   ...
+&lt;/struts&gt;
+
+</code></pre>
+</div>
+
+<p><strong>Example</strong></p>
+
+<p>Assuming there is an action of type “MyAction”, with a setDate(Date) 
method, this simple interceptor will set the date of the action to the current 
date:</p>
+
+<p><strong>Interceptor Example</strong></p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
+
+public class SimpleInterceptor extends AbstractInterceptor {
+
+    public String intercept(ActionInvocation invocation) throws Exception {
+       MyAction action = (MyAction)invocation.getAction();
+       action.setDate(new Date());
+       return invocation.invoke();
+    }
+}
+
+</code></pre>
+</div>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/";>The Apache 
Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache 
Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a 
href="https://softwaremill.com/";>SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js"; async="async" 
defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>

Added: websites/production/struts/content/core-developers/xsl-result.html
==============================================================================
--- websites/production/struts/content/core-developers/xsl-result.html (added)
+++ websites/production/struts/content/core-developers/xsl-result.html Thu Jun  
1 11:35:58 2017
@@ -0,0 +1,351 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
+  <meta http-equiv="Content-Language" content="en"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
+  <title>XSL Result</title>
+
+  <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="/css/main.css" rel="stylesheet">
+  <link href="/css/custom.css" rel="stylesheet">
+  <link href="/highlighter/github-theme.css" rel="stylesheet">
+
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
+  <script type="text/javascript" src="/js/community.js"></script>
+</head>
+<body>
+
+<a href="http://github.com/apache/struts"; class="github-ribbon">
+  <img style="position: absolute; right: 0; border: 0;" 
src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"; 
alt="Fork me on GitHub">
+</a>
+
+<header>
+  <nav>
+    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <div class="navbar-header">
+          <button type="button" data-toggle="collapse" 
data-target="#struts-menu" class="navbar-toggle">
+            Menu
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a href="/index.html" class="navbar-brand logo"><img 
src="/img/struts-logo.svg"></a>
+        </div>
+        <div id="struts-menu" class="navbar-collapse collapse">
+          <ul class="nav navbar-nav">
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Home<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/index.html">Welcome</a></li>
+                <li><a href="/downloads.html">Downloads</a></li>
+                <li><a href="/announce.html">Announcements</a></li>
+                <li><a href="http://www.apache.org/licenses/";>License</a></li>
+                <li><a 
href="http://apache.org/foundation/thanks.html";>Thanks!</a></li>
+                <li><a 
href="http://apache.org/foundation/sponsorship.html";>Sponsorship</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Support<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/mail.html">User Mailing List</a></li>
+                <li><a href="https://issues.apache.org/jira/browse/WW";>Issue 
Tracker</a></li>
+                <li><a href="/security.html">Reporting Security Issues</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/project-info.html">Project info</a></li>
+                <li><a href="/maven/struts2-core/dependencies.html">Struts 
Core dependencies</a></li>
+                <li><a href="/maven/struts2-plugins/modules.html">Plugin 
dependencies</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Documentation<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/birdseye.html">Birds Eye</a></li>
+                <li><a href="/primer.html">Key Technologies</a></li>
+                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
+                <li><a 
href="https://cwiki.apache.org/confluence/display/WW/Home";>Wiki</a></li>
+                <li class="divider"></li>
+                <li><a href="/getting-started/">Getting Started</a></li>
+                <li><a href="/docs/tutorials.html">Tutorials</a></li>
+                <li><a href="/docs/faqs.html">FAQs</a></li>
+                <li><a href="/docs/guides.html">Guides</a></li>
+                <li class="divider"></li>
+                <li><a href="/maven/struts2-core/apidocs/index.html">Struts 
Core API</a></li>
+                <li><a href="/docs/plugins.html">Plugin APIs</a></li>
+                <li><a href="/docs/tag-reference.html">Tag reference</a></li>
+                <li><a 
href="http://cwiki.apache.org/S2PLUGINS/home.html";>Plugin registry</a></li>
+                <li class="divider"></li>
+                <li><a href="/security/">Security Guide (WIP)</a></li>
+                <li><a href="/core-developers/">Core Developers Guide 
(WIP)</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
+                Contributing<b class="caret"></b>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/youatstruts.html">You at Struts</a></li>
+                <li><a href="/helping.html">How to Help FAQ</a></li>
+                <li><a href="/dev-mail.html">Development Lists</a></li>
+                <li class="divider"></li>
+                <li><a href="/submitting-patches.html">Submitting 
patches</a></li>
+                <li><a href="/builds.html">Source Code</a></li>
+                <li><a href="/coding-standards.html">Coding standards</a></li>
+                <li class="divider"></li>
+                <li><a href="/releases.html">Release Guidelines</a></li>
+                <li><a href="/bylaws.html">PMC Charter</a></li>
+                <li><a href="/volunteers.html">Volunteers</a></li>
+                <li><a 
href="https://git-wip-us.apache.org/repos/asf?p=struts.git";>Source 
Repository</a></li>
+              </ul>
+            </li>
+            <li class="apache"><a href="http://www.apache.org/";><img 
src="/img/apache.png"></a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </nav>
+</header>
+
+
+<article class="container">
+  <section class="col-md-12">
+    <a href="index.html" title="back to Core Developers Guide"><< back to Core 
Developers Guide</a>
+    <h1 id="xsl-result">XSL Result</h1>
+
+<p>####Description####</p>
+
+<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="highlighter-rouge"><pre class="highlight"><code>&lt;xsl:template 
match="/result"&gt;
+&lt;result/&gt;
+&lt;/xsl:template&gt;
+</code></pre>
+</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
+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="highlighter-rouge"><pre class="highlight"><code>x.y = y;
+and
+y.x = x;
+action.x=x;
+</code></pre>
+</div>
+
+<p>Due to that modification, the resulting XML document based on x would 
be:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&lt;result&gt;
+&lt;x&gt;
+&lt;y/&gt;
+&lt;/x&gt;
+&lt;/result&gt;
+</code></pre>
+</div>
+
+<p>Without it there would be endless</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>x/y/x/y/x/y/...
+</code></pre>
+</div>
+<p> elements.</p>
+
+<p>The</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>XSLTResult
+</code></pre>
+</div>
+<p> 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</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>XSLTResult
+</code></pre>
+</div>
+<p> 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>
+
+<table>
+  <tbody>
+    <tr>
+      <td>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:</td>
+    </tr>
+  </tbody>
+</table>
+
+<p>| &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;</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</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>hugeCollection
+</code></pre>
+</div>
+<p> in their name. Element’s path is first compared to</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>excludingPattern
+</code></pre>
+</div>
+<p> - if it matches it’s no longer processed. Then it is compared to</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>matchingPattern
+</code></pre>
+</div>
+<p> and processed only if there’s a match.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&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;
+</code></pre>
+</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</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>exposedValue
+</code></pre>
+</div>
+<p> uses an OGNL expression to derive it’s value.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&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;
+</code></pre>
+</div>
+
+<p>####Parameters####</p>
+
+<p>This result type takes the following parameters:</p>
+
+<ul>
+  <li>
+    <p><strong>stylesheetLocation</strong> (default) - the location to go to 
after execution.</p>
+  </li>
+  <li>
+    <p><strong>location</strong> (deprecated) - the same as 
<strong>stylesheetLocation</strong> but it was dropped since Struts 2.5.</p>
+  </li>
+  <li>
+    <p><strong>encoding </strong>- character encoding used in XML, default 
UTF-8.</p>
+  </li>
+  <li>
+    <p><strong>parse</strong> -</p>
+  </li>
+</ul>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>true
+</code></pre>
+</div>
+<p> by default. If set to false, the location param will not be parsed for 
Ognl expressions.</p>
+
+<ul>
+  <li><strong>matchingPattern </strong>-</li>
+</ul>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>Pattern
+</code></pre>
+</div>
+<p> that matches only desired elements, by default it matches everything.</p>
+
+<ul>
+  <li><strong>excludingPattern</strong> -</li>
+</ul>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>Pattern
+</code></pre>
+</div>
+<p> that eliminates unwanted elements, by default it matches none.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>struts.properties
+</code></pre>
+</div>
+<p> related configuration:</p>
+
+<ul>
+  <li><strong>struts.xslt.nocache</strong> - Defaults to false. If set to 
true, disables stylesheet caching. Good for development, bad for 
production.</li>
+</ul>
+
+<p>####Examples####</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>&lt;result 
name="success" type="xslt"&gt;foo.xslt&lt;/result&gt;
+</code></pre>
+</div>
+
+<p> </p>
+
+  </section>
+</article>
+
+
+<footer class="container">
+  <div class="col-md-12">
+    Copyright &copy; 2000-2016 <a href="http://www.apache.org/";>The Apache 
Software Foundation </a>.
+    All Rights Reserved.
+  </div>
+  <div class="col-md-12">
+    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache 
Struts project logos are
+    trademarks of The Apache Software Foundation.
+  </div>
+  <div class="col-md-12">Logo and website design donated by <a 
href="https://softwaremill.com/";>SoftwareMill</a>.</div>
+</footer>
+
+<script>!function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (!d.getElementById(id)) {
+    js = d.createElement(s);
+    js.id = id;
+    js.src = "//platform.twitter.com/widgets.js";
+    fjs.parentNode.insertBefore(js, fjs);
+  }
+}(document, "script", "twitter-wjs");</script>
+<script src="https://apis.google.com/js/platform.js"; async="async" 
defer="defer"></script>
+
+<div id="fb-root"></div>
+
+<script>(function (d, s, id) {
+  var js, fjs = d.getElementsByTagName(s)[0];
+  if (d.getElementById(id)) return;
+  js = d.createElement(s);
+  js.id = id;
+  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
+  fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+
+
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, id;
+    $el = $(el);
+    id = $el.attr('id');
+    if (id) {
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
+    }
+  });
+});
+</script>
+
+</body>
+</html>


Reply via email to