blob: b5de05375252c84f455cd9038c3fc5c1894f0dfa [file] [log] [blame]
<!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>SiteMesh Plugin</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="/css/syntax.css" rel="stylesheet">
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
<script type="text/javascript" src="/js/community.js"></script>
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
/* We explicitly disable cookie tracking to avoid privacy issues */
_paq.push(['disableCookies']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//analytics.apache.org/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '41']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
</head>
<body>
<a href="https://github.com/apache/struts" class="github-ribbon">
<img decoding="async" loading="lazy" style="position: absolute; right: 0; border: 0;" width="149" height="149" src="https://github.blog/wp-content/uploads/2008/12/forkme_right_red_aa0000.png?resize=149%2C149" class="attachment-full size-full" alt="Fork me on GitHub" data-recalc-dims="1">
</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="/download.cgi">Download</a></li>
<li><a href="/releases.html">Releases</a></li>
<li><a href="/announce-2024.html">Announcements</a></li>
<li><a href="http://www.apache.org/licenses/">License</a></li>
<li><a href="https://www.apache.org/foundation/thanks.html">Thanks!</a></li>
<li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
<li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</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><a href="/commercial-support.html">Commercial Support</a></li>
<li class="divider"></li>
<li><a href="https://cwiki.apache.org/confluence/display/WW/Migration+Guide">Version Notes</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/WW/Security+Bulletins">Security Bulletins</a></li>
<li class="divider"></li>
<li><a href="/maven/project-info.html">Maven 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="/security/">Security Guide</a></li>
<li><a href="/core-developers/">Core Developers Guide</a></li>
<li><a href="/tag-developers/">Tag Developers Guide</a></li>
<li><a href="/maven-archetypes/">Maven Archetypes</a></li>
<li><a href="/plugins/">Plugins</a></li>
<li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
<li><a href="/tag-developers/tag-reference.html">Tag reference</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/WW/FAQs">FAQs</a></li>
<li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</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 and Builds</a></li>
<li><a href="/coding-standards.html">Coding standards</a></li>
<li><a href="/contributors/">Contributors Guide</a></li>
<li class="divider"></li>
<li><a href="/release-guidelines.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://gitbox.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
<li><a href="/updating-website.html">Updating the website</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 class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/plugins/sitemesh/index.md" title="Edit this page on GitHub">Edit on GitHub</a>
<a href="../" title="back to Plugins"><< back to Plugins</a>
<h1 class="no_toc" id="sitemesh-plugin">SiteMesh Plugin</h1>
<ul id="markdown-toc">
<li><a href="#about-sitemesh" id="markdown-toc-about-sitemesh">About SiteMesh</a></li>
<li><a href="#features" id="markdown-toc-features">Features</a></li>
<li><a href="#usage" id="markdown-toc-usage">Usage</a></li>
<li><a href="#freemarker-and-velocity-decorators" id="markdown-toc-freemarker-and-velocity-decorators">FreeMarker and Velocity Decorators</a> <ul>
<li><a href="#freemarker" id="markdown-toc-freemarker">FreeMarker</a></li>
<li><a href="#velocity" id="markdown-toc-velocity">Velocity</a></li>
<li><a href="#full-integration-with-sitemesh-2--freemarker-242--velocity-13--including-struts-2-tags-valuestack-and-freemarkermanager-statics" id="markdown-toc-full-integration-with-sitemesh-2--freemarker-242--velocity-13--including-struts-2-tags-valuestack-and-freemarkermanager-statics">Full integration with SiteMesh 2 + Freemarker 2.4.2 + Velocity 1.3 , including Struts 2 Tags, ValueStack, and FreemarkerManager statics.</a></li>
</ul>
</li>
<li><a href="#example" id="markdown-toc-example">Example</a></li>
<li><a href="#settings" id="markdown-toc-settings">Settings</a></li>
<li><a href="#installation" id="markdown-toc-installation">Installation</a></li>
</ul>
<h2 id="about-sitemesh">About SiteMesh</h2>
<blockquote>
<p><a href="http://www.sitemesh.org/">SiteMesh</a> is a web-page layout and decoration framework and web application integration
framework to aid in creating large sites consisting of many pages for which a consistent look/feel, navigation
and layout scheme is required.</p>
</blockquote>
<p>The Sitemesh plugin allows Sitemesh templates to access framework resources.</p>
<p>The framework stores all its value stack information as request attributes, meaning that if you wish to display data
that is on the stack (or even the ActionContext), you can do so by using the normal tag libraries that come
with the framework. That’s it!</p>
<h2 id="features">Features</h2>
<ul>
<li>Can use Struts tags in Sitemesh decorator templates</li>
<li>Sitemesh decorators can be written in FreeMarker as well as Velocity and JSP</li>
</ul>
<h2 id="usage">Usage</h2>
<p>From 2.2+ the new <code class="language-plaintext highlighter-rouge">com.opensymphony.sitemesh.webapp.SiteMeshFilter</code> filter
and Struts <code class="language-plaintext highlighter-rouge">org.apache.struts2.dispatcher.listener.StrutsListener</code> context listener must be added to <code class="language-plaintext highlighter-rouge">web.xml</code>, like:</p>
<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;filter&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>sitemesh<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;filter-class&gt;</span>com.opensymphony.sitemesh.webapp.SiteMeshFilter<span class="nt">&lt;/filter-class&gt;</span>
<span class="nt">&lt;/filter&gt;</span>
...
<span class="nt">&lt;listener&gt;</span>
<span class="nt">&lt;listener-class&gt;</span>org.apache.struts2.dispatcher.listener.StrutsListener<span class="nt">&lt;/listener-class&gt;</span>
<span class="nt">&lt;/listener&gt;</span>
</code></pre></div></div>
<h2 id="freemarker-and-velocity-decorators">FreeMarker and Velocity Decorators</h2>
<p>The plugin provides an extension of the SiteMesh <em>Velocity</em> and <em>FreeMarker</em> servlets. These servlets provide
the standard variables and <em>Struts Tags</em> that you used to create views in your favourite template language.</p>
<h3 id="freemarker">FreeMarker</h3>
<p>From 2.2+ the recommended way to use Freemarker with Sitemesh is through the <code class="language-plaintext highlighter-rouge">org.apache.struts2.sitemesh.FreemarkerDecoratorServlet</code>
servlet, which can be configured like this in <code class="language-plaintext highlighter-rouge">web.xml</code>:</p>
<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
<span class="nt">&lt;servlet&gt;</span>
<span class="nt">&lt;servlet-name&gt;</span>sitemesh-freemarker<span class="nt">&lt;/servlet-name&gt;</span>
<span class="nt">&lt;servlet-class&gt;</span>org.apache.struts2.sitemesh.FreemarkerDecoratorServlet<span class="nt">&lt;/servlet-class&gt;</span>
<span class="nt">&lt;init-param&gt;</span>
<span class="nt">&lt;param-name&gt;</span>default_encoding<span class="nt">&lt;/param-name&gt;</span>
<span class="nt">&lt;param-value&gt;</span>UTF-8<span class="nt">&lt;/param-value&gt;</span>
<span class="nt">&lt;/init-param&gt;</span>
<span class="nt">&lt;load-on-startup&gt;</span>1<span class="nt">&lt;/load-on-startup&gt;</span>
<span class="nt">&lt;/servlet&gt;</span>
<span class="nt">&lt;servlet-mapping&gt;</span>
<span class="nt">&lt;servlet-name&gt;</span>sitemesh-freemarker<span class="nt">&lt;/servlet-name&gt;</span>
<span class="nt">&lt;url-pattern&gt;</span>*.ftl<span class="nt">&lt;/url-pattern&gt;</span>
<span class="nt">&lt;/servlet-mapping&gt;</span>
</code></pre></div></div>
<h3 id="velocity">Velocity</h3>
<blockquote>
<p>NOTE: Please include the <a href="../velocity/">Struts Velocity plugin</a> in your pom.xml before using this functionality</p>
</blockquote>
<p>From 2.2+ the recommended way to use Velocity with Sitemesh is through the <code class="language-plaintext highlighter-rouge">org.apache.struts2.sitemesh.VelocityDecoratorServlet</code>
servlet, which can be configured like this in <code class="language-plaintext highlighter-rouge">web.xml</code>:</p>
<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;servlet&gt;</span>
<span class="nt">&lt;servlet-name&gt;</span>sitemesh-freemarker<span class="nt">&lt;/servlet-name&gt;</span>
<span class="nt">&lt;servlet-class&gt;</span>org.apache.struts2.sitemesh.VelocityDecoratorServlet<span class="nt">&lt;/servlet-class&gt;</span>
<span class="nt">&lt;init-param&gt;</span>
<span class="nt">&lt;param-name&gt;</span>default_encoding<span class="nt">&lt;/param-name&gt;</span>
<span class="nt">&lt;param-value&gt;</span>UTF-8<span class="nt">&lt;/param-value&gt;</span>
<span class="nt">&lt;/init-param&gt;</span>
<span class="nt">&lt;load-on-startup&gt;</span>1<span class="nt">&lt;/load-on-startup&gt;</span>
<span class="nt">&lt;/servlet&gt;</span>
<span class="nt">&lt;servlet-mapping&gt;</span>
<span class="nt">&lt;servlet-name&gt;</span>sitemesh-freemarker<span class="nt">&lt;/servlet-name&gt;</span>
<span class="nt">&lt;url-pattern&gt;</span>*.ftl<span class="nt">&lt;/url-pattern&gt;</span>
<span class="nt">&lt;/servlet-mapping&gt;</span>
</code></pre></div></div>
<h3 id="full-integration-with-sitemesh-2--freemarker-242--velocity-13--including-struts-2-tags-valuestack-and-freemarkermanager-statics">Full integration with SiteMesh 2 + Freemarker 2.4.2 + Velocity 1.3 , including Struts 2 Tags, ValueStack, and FreemarkerManager statics.</h3>
<p>Such configuration is available as from Struts 2.2.0, please refer to <a href="https://issues.apache.org/jira/browse/WW-3296">WW-3296</a> for me details.</p>
<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="nt">&lt;filter&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>struts-prepare<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;filter-class&gt;</span>org.apache.struts2.dispatcher.filter.StrutsPrepareFilter<span class="nt">&lt;/filter-class&gt;</span>
<span class="nt">&lt;/filter&gt;</span>
<span class="nt">&lt;filter&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>sitemesh<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;filter-class&gt;</span>com.opensymphony.sitemesh.webapp.SiteMeshFilter<span class="nt">&lt;/filter-class&gt;</span>
<span class="nt">&lt;/filter&gt;</span>
<span class="nt">&lt;filter&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>struts-execute<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;filter-class&gt;</span>org.apache.struts2.dispatcher.filter.StrutsExecuteFilter<span class="nt">&lt;/filter-class&gt;</span>
<span class="nt">&lt;/filter&gt;</span>
<span class="nt">&lt;filter-mapping&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>struts-prepare<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;url-pattern&gt;</span>/*<span class="nt">&lt;/url-pattern&gt;</span>
<span class="nt">&lt;/filter-mapping&gt;</span>
<span class="nt">&lt;filter-mapping&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>sitemesh<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;url-pattern&gt;</span>/*<span class="nt">&lt;/url-pattern&gt;</span>
<span class="nt">&lt;dispatcher&gt;</span>REQUEST<span class="nt">&lt;/dispatcher&gt;</span>
<span class="nt">&lt;dispatcher&gt;</span>FORWARD<span class="nt">&lt;/dispatcher&gt;</span>
<span class="nt">&lt;dispatcher&gt;</span>INCLUDE<span class="nt">&lt;/dispatcher&gt;</span>
<span class="nt">&lt;/filter-mapping&gt;</span>
<span class="nt">&lt;filter-mapping&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>struts-execute<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;url-pattern&gt;</span>/*<span class="nt">&lt;/url-pattern&gt;</span>
<span class="nt">&lt;/filter-mapping&gt;</span>
<span class="nt">&lt;servlet&gt;</span>
<span class="nt">&lt;servlet-name&gt;</span>sitemesh-freemarker<span class="nt">&lt;/servlet-name&gt;</span>
<span class="nt">&lt;servlet-class&gt;</span>org.apache.struts2.sitemesh.FreemarkerDecoratorServlet<span class="nt">&lt;/servlet-class&gt;</span>
<span class="nt">&lt;init-param&gt;</span>
<span class="nt">&lt;param-name&gt;</span>default_encoding<span class="nt">&lt;/param-name&gt;</span>
<span class="nt">&lt;param-value&gt;</span>UTF-8<span class="nt">&lt;/param-value&gt;</span>
<span class="nt">&lt;/init-param&gt;</span>
<span class="nt">&lt;load-on-startup&gt;</span>1<span class="nt">&lt;/load-on-startup&gt;</span>
<span class="nt">&lt;/servlet&gt;</span>
<span class="nt">&lt;servlet-mapping&gt;</span>
<span class="nt">&lt;servlet-name&gt;</span>sitemesh-freemarker<span class="nt">&lt;/servlet-name&gt;</span>
<span class="nt">&lt;url-pattern&gt;</span>*.ftl<span class="nt">&lt;/url-pattern&gt;</span>
<span class="nt">&lt;/servlet-mapping&gt;</span>
<span class="nt">&lt;servlet&gt;</span>
<span class="nt">&lt;servlet-name&gt;</span>JspSupportServlet<span class="nt">&lt;/servlet-name&gt;</span>
<span class="nt">&lt;servlet-class&gt;</span>org.apache.struts2.views.JspSupportServlet<span class="nt">&lt;/servlet-class&gt;</span>
<span class="nt">&lt;load-on-startup&gt;</span>1<span class="nt">&lt;/load-on-startup&gt;</span>
<span class="nt">&lt;/servlet&gt;</span>
<span class="nt">&lt;listener&gt;</span>
<span class="nt">&lt;listener-class&gt;</span>org.apache.struts2.dispatcher.ng.listener.StrutsListener<span class="nt">&lt;/listener-class&gt;</span>
<span class="nt">&lt;/listener&gt;</span>
</code></pre></div></div>
<h2 id="example">Example</h2>
<p>Here is an example of how to configure the filter chains in <code class="language-plaintext highlighter-rouge">web.xml</code>:</p>
<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;filter&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>struts-prepare<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;filter-class&gt;</span>org.apache.struts2.dispatcher.filter.StrutsPrepareFilter<span class="nt">&lt;/filter-class&gt;</span>
<span class="nt">&lt;/filter&gt;</span>
<span class="nt">&lt;filter&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>struts-execute<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;filter-class&gt;</span>org.apache.struts2.dispatcher.filter.StrutsExecuteFilter<span class="nt">&lt;/filter-class&gt;</span>
<span class="nt">&lt;/filter&gt;</span>
<span class="nt">&lt;filter&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>sitemesh<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;filter-class&gt;</span>com.opensymphony.sitemesh.webapp.SiteMeshFilter<span class="nt">&lt;/filter-class&gt;</span>
<span class="nt">&lt;/filter&gt;</span>
<span class="nt">&lt;filter-mapping&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>struts-prepare<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;url-pattern&gt;</span>/*<span class="nt">&lt;/url-pattern&gt;</span>
<span class="nt">&lt;/filter-mapping&gt;</span>
<span class="nt">&lt;filter-mapping&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>sitemesh<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;url-pattern&gt;</span>/*<span class="nt">&lt;/url-pattern&gt;</span>
<span class="nt">&lt;/filter-mapping&gt;</span>
<span class="nt">&lt;filter-mapping&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>struts-execute<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;url-pattern&gt;</span>/*<span class="nt">&lt;/url-pattern&gt;</span>
<span class="nt">&lt;/filter-mapping&gt;</span>
<span class="nt">&lt;listener&gt;</span>
<span class="nt">&lt;listener-class&gt;</span>org.apache.struts2.dispatcher.listener.StrutsListener<span class="nt">&lt;/listener-class&gt;</span>
<span class="nt">&lt;/listener&gt;</span>
<span class="nt">&lt;servlet&gt;</span>
<span class="nt">&lt;servlet-name&gt;</span>sitemesh-freemarker<span class="nt">&lt;/servlet-name&gt;</span>
<span class="nt">&lt;servlet-class&gt;</span>org.apache.struts2.sitemesh.FreemarkerDecoratorServlet<span class="nt">&lt;/servlet-class&gt;</span>
<span class="nt">&lt;init-param&gt;</span>
<span class="nt">&lt;param-name&gt;</span>default_encoding<span class="nt">&lt;/param-name&gt;</span>
<span class="nt">&lt;param-value&gt;</span>UTF-8<span class="nt">&lt;/param-value&gt;</span>
<span class="nt">&lt;/init-param&gt;</span>
<span class="nt">&lt;load-on-startup&gt;</span>1<span class="nt">&lt;/load-on-startup&gt;</span>
<span class="nt">&lt;/servlet&gt;</span>
<span class="nt">&lt;servlet&gt;</span>
<span class="nt">&lt;servlet-name&gt;</span>sitemesh-velocity<span class="nt">&lt;/servlet-name&gt;</span>
<span class="nt">&lt;servlet-class&gt;</span>org.apache.struts2.sitemesh.VelocityDecoratorServlet<span class="nt">&lt;/servlet-class&gt;</span>
<span class="nt">&lt;init-param&gt;</span>
<span class="nt">&lt;param-name&gt;</span>default_encoding<span class="nt">&lt;/param-name&gt;</span>
<span class="nt">&lt;param-value&gt;</span>UTF-8<span class="nt">&lt;/param-value&gt;</span>
<span class="nt">&lt;/init-param&gt;</span>
<span class="nt">&lt;load-on-startup&gt;</span>1<span class="nt">&lt;/load-on-startup&gt;</span>
<span class="nt">&lt;/servlet&gt;</span>
<span class="nt">&lt;servlet-mapping&gt;</span>
<span class="nt">&lt;servlet-name&gt;</span>sitemesh-freemarker<span class="nt">&lt;/servlet-name&gt;</span>
<span class="nt">&lt;url-pattern&gt;</span>*.ftl<span class="nt">&lt;/url-pattern&gt;</span>
<span class="nt">&lt;/servlet-mapping&gt;</span>
<span class="nt">&lt;servlet-mapping&gt;</span>
<span class="nt">&lt;servlet-name&gt;</span>sitemesh-velocity<span class="nt">&lt;/servlet-name&gt;</span>
<span class="nt">&lt;url-pattern&gt;</span>*.vm<span class="nt">&lt;/url-pattern&gt;</span>
<span class="nt">&lt;/servlet-mapping&gt;</span>
</code></pre></div></div>
<p>Struts 2.1 web.xml filter chain example:</p>
<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;filter&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>struts-prepare<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;filter-class&gt;</span>org.apache.struts2.dispatcher.filter.StrutsPrepareFilter<span class="nt">&lt;/filter-class&gt;</span>
<span class="nt">&lt;/filter&gt;</span>
<span class="nt">&lt;filter&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>struts-execute<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;filter-class&gt;</span>org.apache.struts2.dispatcher.filter.StrutsExecuteFilter<span class="nt">&lt;/filter-class&gt;</span>
<span class="nt">&lt;/filter&gt;</span>
<span class="nt">&lt;filter&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>sitemesh<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;filter-class&gt;</span>com.opensymphony.module.sitemesh.filter.PageFilter<span class="nt">&lt;/filter-class&gt;</span>
<span class="nt">&lt;/filter&gt;</span>
<span class="nt">&lt;filter-mapping&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>struts-prepare<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;url-pattern&gt;</span>/*<span class="nt">&lt;/url-pattern&gt;</span>
<span class="nt">&lt;/filter-mapping&gt;</span>
<span class="nt">&lt;filter-mapping&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>sitemesh<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;url-pattern&gt;</span>/*<span class="nt">&lt;/url-pattern&gt;</span>
<span class="nt">&lt;/filter-mapping&gt;</span>
<span class="nt">&lt;filter-mapping&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>struts-execute<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;url-pattern&gt;</span>/*<span class="nt">&lt;/url-pattern&gt;</span>
<span class="nt">&lt;/filter-mapping&gt;</span>
</code></pre></div></div>
<p>You do not need the Struts2 Sitmesh plugin if you are using JSP for your decorators.
Here are the only changes needed to web.xml</p>
<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;filter&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>struts2-prepare<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;filter-class&gt;</span>org.apache.struts2.dispatcher.filter.StrutsPrepareFilter<span class="nt">&lt;/filter-class&gt;</span>
<span class="nt">&lt;/filter&gt;</span>
<span class="nt">&lt;filter&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>sitemesh<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;filter-class&gt;</span>com.opensymphony.sitemesh.webapp.SiteMeshFilter<span class="nt">&lt;/filter-class&gt;</span>
<span class="nt">&lt;/filter&gt;</span>
<span class="nt">&lt;filter&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>struts2-execute<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;filter-class&gt;</span>org.apache.struts2.dispatcher.filter.StrutsExecuteFilter<span class="nt">&lt;/filter-class&gt;</span>
<span class="nt">&lt;/filter&gt;</span>
<span class="nt">&lt;filter-mapping&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>struts2-prepare<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;url-pattern&gt;</span>/*<span class="nt">&lt;/url-pattern&gt;</span>
<span class="nt">&lt;/filter-mapping&gt;</span>
<span class="nt">&lt;filter-mapping&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>sitemesh<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;url-pattern&gt;</span>/*<span class="nt">&lt;/url-pattern&gt;</span>
<span class="nt">&lt;dispatcher&gt;</span>REQUEST<span class="nt">&lt;/dispatcher&gt;</span>
<span class="nt">&lt;dispatcher&gt;</span>FORWARD<span class="nt">&lt;/dispatcher&gt;</span>
<span class="nt">&lt;dispatcher&gt;</span>INCLUDE<span class="nt">&lt;/dispatcher&gt;</span>
<span class="nt">&lt;/filter-mapping&gt;</span>
<span class="nt">&lt;filter-mapping&gt;</span>
<span class="nt">&lt;filter-name&gt;</span>struts2-execute<span class="nt">&lt;/filter-name&gt;</span>
<span class="nt">&lt;url-pattern&gt;</span>/*<span class="nt">&lt;/url-pattern&gt;</span>
<span class="nt">&lt;/filter-mapping&gt;</span>
</code></pre></div></div>
<h2 id="settings">Settings</h2>
<p>This plugin doesn’t support any global settings.</p>
<h2 id="installation">Installation</h2>
<p>This plugin can be installed by copying the plugin jar into your application’s <code class="language-plaintext highlighter-rouge">/WEB-INF/lib</code> directory.
No other files need to be copied or created.</p>
</section>
</article>
<footer class="container">
<div class="col-md-12">
Copyright &copy; 2000-2022 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
trademarks of The Apache Software Foundation. All Rights Reserved.
</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>
</body>
</html>