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/06/01 11:36:04 UTC

svn commit: r1013271 [23/25] - in /websites/production/struts/content: ./ core-developers/ core-developers/attachments/ getting-started/ security/

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>