Author: lukaszlenart
Date: Fri Nov 14 07:43:54 2014
New Revision: 929145
Log:
Updates production
Added:
websites/production/struts/content/development/2.x/docs/version-notes-2319.html
websites/production/struts/content/release/2.3.x/docs/version-notes-2319.html
Modified:
websites/production/struts/content/development/2.x/docs/building-struts-2-normal-release.html
websites/production/struts/content/development/2.x/docs/model-driven.html
websites/production/struts/content/development/2.x/docs/rest-plugin.html
websites/production/struts/content/development/2.x/docs/security.html
websites/production/struts/content/release/2.3.x/docs/actionmapper.html
websites/production/struts/content/release/2.3.x/docs/building-struts-2-normal-release.html
websites/production/struts/content/release/2.3.x/docs/file-upload.html
websites/production/struts/content/release/2.3.x/docs/guides.html
websites/production/struts/content/release/2.3.x/docs/interceptors.html
websites/production/struts/content/release/2.3.x/docs/migration-guide.html
websites/production/struts/content/release/2.3.x/docs/model-driven.html
websites/production/struts/content/release/2.3.x/docs/rest-plugin.html
websites/production/struts/content/release/2.3.x/docs/security.html
websites/production/struts/content/release/2.3.x/docs/sitegraph-plugin.html
websites/production/struts/content/release/2.3.x/docs/spring-plugin.html
websites/production/struts/content/release/2.3.x/docs/type-conversion.html
websites/production/struts/content/release/2.3.x/docs/validation.html
websites/production/struts/content/release/2.3.x/docs/version-notes-2318.html
Modified:
websites/production/struts/content/development/2.x/docs/building-struts-2-normal-release.html
==============================================================================
---
websites/production/struts/content/development/2.x/docs/building-struts-2-normal-release.html
(original)
+++
websites/production/struts/content/development/2.x/docs/building-struts-2-normal-release.html
Fri Nov 14 07:43:54 2014
@@ -139,33 +139,39 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
<div id="ConfluenceContent"><h1
id="BuildingStruts2-Normalrelease-Content">Content</h1><p><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1411293680771 {padding: 0px;}
-div.rbtoc1411293680771 ul {list-style: none;margin-left: 0px;}
-div.rbtoc1411293680771 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1415950672619 {padding: 0px;}
+div.rbtoc1415950672619 ul {list-style: none;margin-left: 0px;}
+div.rbtoc1415950672619 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1411293680771">
+/*]]>*/</style></p><div class="toc-macro rbtoc1415950672619">
<ul class="toc-indentation"><li><span class="TOCOutline">1</span> <a
shape="rect" href="#BuildingStruts2-Normalrelease-Gettingready">Getting
ready</a></li><li><span class="TOCOutline">2</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-UpdateDraftDocswhenneeded">Update Draft
Docs when needed</a></li><li><span class="TOCOutline">3</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Besureyourlocalcopyisup-to-date">Be sure
your local copy is up-to-date</a></li><li><span class="TOCOutline">4</span> <a
shape="rect" href="#BuildingStruts2-Normalrelease-Createareleasebranch">Create
a release branch</a></li><li><span class="TOCOutline">5</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Preparerelease">Prepare
release</a></li><li><span class="TOCOutline">6</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Performtherelease">Perform the
release</a></li><li><span class="TOCOutline">7</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Movetheasse
mblies">Move the assemblies</a></li><li><span class="TOCOutline">8</span> <a
shape="rect"
href="#BuildingStruts2-Normalrelease-Announceavailability">Announce
availability</a></li><li><span class="TOCOutline">9</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Cleanuprepository">Clean up
repository</a></li><li><span class="TOCOutline">10</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Voteonit">Vote on it</a></li><li><span
class="TOCOutline">11</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Copyfiles">Copy files</a></li><li><span
class="TOCOutline">12</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Promoterelease">Promote
release</a></li><li><span class="TOCOutline">13</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Cleanupoldreleases">Clean up old
releases</a></li><li><span class="TOCOutline">14</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Waitforrsync">Wait for
rsync</a></li><li><span class="TOCOutline">15</s
pan> <a shape="rect" href="#BuildingStruts2-Normalrelease-Updatesite">Update
site</a></li><li><span class="TOCOutline">16</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Redeploythedraftdocs(Optional)">Redeploy
the draft docs (Optional)</a></li><li><span class="TOCOutline">17</span> <a
shape="rect" href="#BuildingStruts2-Normalrelease-Postannouncements">Post
announcements</a></li></ul>
</div><h2 id="BuildingStruts2-Normalrelease-BuildingSteps(Struts)">Building
Steps (Struts)</h2><h3 id="BuildingStruts2-Normalrelease-Gettingready">Getting
ready</h3><ol><li>Create an "Struts 2.x.y omnibus ticket" ticket in JIRA to
refer to in upcoming release related commit comments and for general
documentation purposes. Mark it with priority "Blocker".</li><li>Switch to
branch <code>develop</code></li><li>Ensure that the master POM and Struts
Annotations have current releases</li><li>Review JIRA for any issues without a
fix version set, and for any issues that should be resolved for the pending
release.</li><li>Ensure that there are no repositories or pluginRepositories
listed in the poms.</li><li>If you have committed all changes regarding the
release process, close the omnibus ticket as it is the last open ticket for the
upcoming release</li><li>Release the upcoming version in JIRA (under
Administration/Manage Releases) and tag the release date</li><li>Add next
milestone ve
rsion to the JIRA roadmap</li><li>Create DONE and TODO filters for the new
version, share with all, and remove obsolete TODO filter</li><li>Create a new
Version Notes page in Confluence, link from <a shape="rect"
href="migration-guide.html">Migration Guide</a>, and link to prior release page
and JIRA DONE filters of the version to release</li><li>Export wiki pages and
put them under <code>/docs</code></li></ol><h3
id="BuildingStruts2-Normalrelease-UpdateDraftDocswhenneeded">Update Draft Docs
when needed</h3><p>Checkout <code>struts-site</code> project (see details
at the bottom of this page) and perform export:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[cd struts-site
mvn package]]></script>
</div></div><p>If build will fail try again - don't
use <code>clean</code>, the exporter is going to update only outdated
pages. After successful export, commit updated files
into <code>struts-production</code></p><h3
id="BuildingStruts2-Normalrelease-Besureyourlocalcopyisup-to-date">Be sure your
local copy is up-to-date</h3><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[git checkout develop
-git pull
-git fetch origin --prune]]></script>
-</div></div><h3 id="BuildingStruts2-Normalrelease-Createareleasebranch">Create
a release branch</h3><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[git fetch origin --prune
+git checkout develop
+git pull]]></script>
+</div></div> <div class="aui-message warning shadowed information-macro">
+ <span class="aui-icon icon-warning">Icon</span>
+ <div class="message-content">
+ <p>Please remember to keep BOM subproject in sync
-
<code><struts-version.version>X.X.X</struts-version.version></code>
- must be the same as the parent pom.</p>
+ </div>
+ </div>
+<h3 id="BuildingStruts2-Normalrelease-Createareleasebranch">Create a release
branch</h3><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[git flow release start X.X.X.X
git flow release publish X.X.X.X]]></script>
-</div></div><p>Now you should be on <code>release/X.X.X.X</code> branch
(<code>git status</code> supposed to confirm that). You must push changes
to remote repo as the Release plugins will push changes to remote as
well.</p><h3 id="BuildingStruts2-Normalrelease-Preparerelease"><span
style="line-height: 1.5625;">Prepare release</span></h3><p>Tag the release by
using the "release:prepare" goal of Maven:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[mvn release:prepare
-DautoVersionSubmodules=true -Dusername=yourSvnUsername
-Dpassword=yourSvnPassword
+</div></div><p>Now you should be on <code>release/X.X.X.X</code> branch
(<code>git status</code> supposed to confirm that). You must push changes
to remote repo as the Release plugins will push changes to remote as well (it's
already done after publishing release).</p><h3
id="BuildingStruts2-Normalrelease-Preparerelease"><span style="line-height:
1.5625;">Prepare release</span></h3><p>Tag the release by using the
"release:prepare" goal of Maven:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[mvn release:prepare
-DautoVersionSubmodules=true
]]></script>
</div></div><p>For a <a shape="rect" class="external-link"
href="http://maven.apache.org/plugins/maven-release-plugin/usage.html">dry
run</a>, add <code>-DdryRun=true</code>. If you do a dry run, use <code>mvn
release:clean</code> to clean up after you have looked at the
output.</p><p>When prompted for the SCM tag name, follow this pattern:
STRUTS_2_3_[PATCH_VERSION]</p> <div class="aui-message warning shadowed
information-macro">
<span class="aui-icon icon-warning">Icon</span>
<div class="message-content">
- <p>If you get an error message, try to re-run
<code>mvn release:prepare -Dusername=yourSvnUsername -Dpassword=yourSvnPassword
-DautoVersionSubmodules=true</code> command again, <code>-Dresume</code> flag
is set to true by default and the plugin will resume the release process from
where it failed before.</p>
+ <p>If you get an error message, try to re-run
<code>mvn release:prepare -DautoVersionSubmodules=true</code> command again,
<code>-Dresume</code> flag is set to true by default and the plugin will resume
the release process from where it failed before.</p>
</div>
</div>
<p>Follow the link to get <a shape="rect" class="external-link"
href="http://maven.apache.org/plugins/maven-release-plugin/examples/prepare-release.html">more
information</a> about performed operation by release plugin.</p><h3
id="BuildingStruts2-Normalrelease-Performtherelease">Perform the
release</h3><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[mvn release:perform -Dusername=yourSvnUsername
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[mvn release:perform
]]></script>
</div></div><p>Follow the link to get <a shape="rect"
class="external-link"
href="http://maven.apache.org/plugins/maven-release-plugin/examples/perform-release.html">more
information</a> about performed operation by release plugin. <span
style="line-height: 1.4285715;">After this step the artifacts will be hosted by
</span><a shape="rect" class="external-link"
href="http://repository.apache.org/" style="line-height:
1.4285715;">Nexus</a>.</p><p>If you need to run perform again, (or in a
different box), do:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[git checkout STRUTS_2_3_[PATCH_VERSION]
@@ -214,7 +220,13 @@ rm *.asc.sha1
</div></div><p>This will remove the branch from the remote, now we can merge
once more the release branch (when on <code>develop</code>) and remove
it</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[git merge --no-ff release/X.X.X.X
git branch -d release/X.X.X.X]]></script>
-</div></div><p>Now both <code>master</code> and <code>develop</code>
branches should be up to date with the changes introduced by the
release.</p><h3 id="BuildingStruts2-Normalrelease-Voteonit">Vote on
it</h3><p>Post a release/quality vote to the dev list (and
<strong>only</strong> the dev list). The example mail is on <a shape="rect"
href="sample-announcements.html">Sample announcements</a> page. <br
clear="none"> If the vote result is for an ASF release (i.e. not test build),
update site, announce. If the vote result is for GA, push to central.</p><h3
id="BuildingStruts2-Normalrelease-Copyfiles">Copy files</h3><p>After the vote,
if the distribution is being mirrored (there was a favourable release vote)
copy the Sources and Binaries:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>Now both <code>master</code> and <code>develop</code>
branches should be up to date with the changes introduced by the release.</p>
<div class="aui-message warning shadowed information-macro">
+ <span class="aui-icon icon-warning">Icon</span>
+ <div class="message-content">
+ <p>Do not remove the tag! It clearly indicates
what was planned and it can be used as a history marker. Always used the next
version number, do not redeploy the same version as it breaks Maven's policy
and you will have to manually clean up Maven repository.</p>
+ </div>
+ </div>
+<h3 id="BuildingStruts2-Normalrelease-Voteonit">Vote on it</h3><p>Post a
release/quality vote to the dev list (and <strong>only</strong> the dev list).
The example mail is on <a shape="rect" href="sample-announcements.html">Sample
announcements</a> page. <br clear="none"> If the vote result is for an ASF
release (i.e. not test build), update site, announce. If the vote result is for
GA, push to central.</p><h3 id="BuildingStruts2-Normalrelease-Copyfiles">Copy
files</h3><p>After the vote, if the distribution is being mirrored (there was a
favourable release vote) copy the Sources and Binaries:</p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[ssh people.apache.org
cd /www/people.apache.org/builds/struts/$VERSION
cp struts-$VERSION-src.* /www/www.apache.org/dist/struts/source
Modified:
websites/production/struts/content/development/2.x/docs/model-driven.html
==============================================================================
--- websites/production/struts/content/development/2.x/docs/model-driven.html
(original)
+++ websites/production/struts/content/development/2.x/docs/model-driven.html
Fri Nov 14 07:43:54 2014
@@ -138,18 +138,8 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
- <div id="ConfluenceContent"><p>Struts 2 does not have "forms" like
Struts 1 did. In Struts 2 request parameters are bound directly to fields in
the actions class, and this class is placed on top of the stack when the action
is executed. </p>
-
-<p>If an action class implements the interface
<code>com.opensymphony.xwork2.ModelDriven</code> then it needs to return an
object from the <code>getModel()</code> method. Struts will then populate the
fields of this object with the request parameters, and this object will be
placed on top of the stack once the action is executed. Validation will also be
performed on this model object, instead of the action. </p>
-
-<h2 id="ModelDriven-Interceptor">Interceptor</h2>
-<p>To use <code>ModelDriven</code> actions, make sure that the <a shape="rect"
href="model-driven-interceptor.html">Model Driven Interceptor</a> is applied to
your action. This interceptor is part of the default interceptor stack
<code>defaultStack</code> so it is applied to all actions by default. </p>
-
-<h2 id="ModelDriven-Example">Example</h2>
-<p>Action class:</p>
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[
-public class ModelDrivenAction implements ModelDriven {
+ <div id="ConfluenceContent"><p>Struts 2 does not have "forms" like
Struts 1 did. In Struts 2 request parameters are bound directly to fields in
the actions class, and this class is placed on top of the stack when the action
is executed.</p><p>If an action class implements the interface
<code>com.opensymphony.xwork2.ModelDriven</code> then it needs to return an
object from the <code>getModel()</code> method. Struts will then populate the
fields of this object with the request parameters, and this object will be
placed on top of the stack once the action is executed. Validation will also be
performed on this model object, instead of the action. Please read
about <a shape="rect"
href="visitorfieldvalidator-annotation.html">VisitorFieldValidator
Annotation</a> which can help you validate model's fields.</p><h2
id="ModelDriven-Interceptor">Interceptor</h2><p>To use <code>ModelDriven</code>
actions, make sure that the <a shape="rect"
href="model-driven-interceptor.html">M
odel Driven Interceptor</a> is applied to your action. This interceptor is
part of the default interceptor stack <code>defaultStack</code> so it is
applied to all actions by default.</p><h2
id="ModelDriven-Example">Example</h2><p>Action class:</p><div class="code panel
pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[public class ModelDrivenAction implements
ModelDriven {
public String execute() throws Exception {
return SUCCESS;
}
@@ -159,11 +149,8 @@ public class ModelDrivenAction implement
}
}
]]></script>
-</div></div>
-<p>Gangster class (model):</p>
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[
-public class Gangster implements Serializable {
+</div></div><p>Gangster class (model):</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[public class Gangster implements Serializable
{
private String name;
private int age;
private String description;
@@ -195,11 +182,8 @@ public class Gangster implements Seriali
}
}
]]></script>
-</div></div>
-<p>JSP for creating a Gangster:</p>
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<script class="theme: Default; brush: html; gutter: false"
type="syntaxhighlighter"><![CDATA[
-<s:form action="modelDrivenResult" method="POST"
namespace="/modelDriven">
+</div></div><p>JSP for creating a Gangster:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: html; gutter: false"
type="syntaxhighlighter"><![CDATA[<s:form
action="modelDrivenResult" method="POST"
namespace="/modelDriven">
<s:textfield label="Gangster Name" name="name" />
<s:textfield label="Gangster Age" name="age" />
<s:checkbox label="Gangster Busted Before"
name="bustedBefore" />
Modified:
websites/production/struts/content/development/2.x/docs/rest-plugin.html
==============================================================================
--- websites/production/struts/content/development/2.x/docs/rest-plugin.html
(original)
+++ websites/production/struts/content/development/2.x/docs/rest-plugin.html
Fri Nov 14 07:43:54 2014
@@ -145,11 +145,11 @@ under the License.
</div>
</div>
<p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1405758685177 {padding: 0px;}
-div.rbtoc1405758685177 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1405758685177 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1415950670950 {padding: 0px;}
+div.rbtoc1415950670950 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1415950670950 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1405758685177">
+/*]]>*/</style></p><div class="toc-macro rbtoc1415950670950">
<ul class="toc-indentation"><li><span class="TOCOutline">1</span> <a
shape="rect" href="#RESTPlugin-Overview">Overview</a>
<ul class="toc-indentation"><li><span class="TOCOutline">1.1</span> <a
shape="rect" href="#RESTPlugin-Features">Features</a></li><li><span
class="TOCOutline">1.2</span> <a shape="rect"
href="#RESTPlugin-MappingRESTURLstoStruts2Actions">Mapping REST URLs to Struts
2 Actions</a>
<ul class="toc-indentation"><li><span class="TOCOutline">1.2.1</span> <a
shape="rect" href="#RESTPlugin-RESTfulURLMappingLogic">RESTful URL Mapping
Logic</a></li></ul>
@@ -161,7 +161,7 @@ div.rbtoc1405758685177 li {margin-left:
</li></ul>
</li><li><span class="TOCOutline">2.2</span> <a shape="rect"
href="#RESTPlugin-WriteYourControllerActions">Write Your Controller
Actions</a></li></ul>
</li><li><span class="TOCOutline">3</span> <a shape="rect"
href="#RESTPlugin-AdvancedTopics">Advanced Topics</a>
-<ul class="toc-indentation"><li><span class="TOCOutline">3.1</span> <a
shape="rect" href="#RESTPlugin-CustomContentTypeHandlers">Custom
ContentTypeHandlers</a></li><li><span class="TOCOutline">3.2</span> <a
shape="rect" href="#RESTPlugin-Settings">Settings</a></li></ul>
+<ul class="toc-indentation"><li><span class="TOCOutline">3.1</span> <a
shape="rect" href="#RESTPlugin-CustomContentTypeHandlers">Custom
ContentTypeHandlers</a></li><li><span class="TOCOutline">3.2</span> <a
shape="rect" href="#RESTPlugin-UseJacksonframeworkasJSONContentTypeHandler">Use
Jackson framework as JSON ContentTypeHandler</a></li><li><span
class="TOCOutline">3.3</span> <a shape="rect"
href="#RESTPlugin-Settings">Settings</a></li></ul>
</li><li><span class="TOCOutline">4</span> <a shape="rect"
href="#RESTPlugin-Resources">Resources</a></li><li><span
class="TOCOutline">5</span> <a shape="rect"
href="#RESTPlugin-VersionHistory">Version History</a></li></ul>
</div><h2 id="RESTPlugin-Overview">Overview</h2><p>The REST Pluginprovides
high level support for the implementation of RESTful resource based web
applicationsThe REST plugin can cooperate with the <a shape="rect"
href="convention-plugin.html">Convention Plugin</a> to support a zero
configuration approach to declaring your actions and results, but you can
always use the REST plugin with XML style configuration if you like.</p><p>If
you prefer to see a working code example, instead of reading through an
explanation, you can download the <a shape="rect" class="external-link"
href="http://struts.apache.org/2.x/index.html">struts2 sample apps</a> and
check out the <code>struts2-rest-showcase</code> application, a complete WAR
file, that demonstrates a simple REST web program.</p><h3
id="RESTPlugin-Features">Features</h3><ul><li>Ruby on Rails REST-style
URLs</li><li>Zero XML config when used with Convention Plugin</li><li>Built-in
serialization and deserialization support for XML and JSO
N</li><li>Automatic error handling</li><li>Type-safe configuration of the HTTP
response</li><li>Automatic conditional GET support</li></ul><h3
id="RESTPlugin-MappingRESTURLstoStruts2Actions">Mapping REST URLs to Struts 2
Actions</h3><p>The main functionality of the REST plugin lies in the
interpretation of incoming request URL's according the RESTful rules. In the
Struts 2 framework, this 'mapping' of request URL's to Actions is handled by in
implementation of the <a shape="rect" class="external-link"
href="http://struts.apache.org/2.x/struts2-core/apidocs/org/apache/struts2/dispatcher/mapper/ActionMapper.html"><code>ActionMapper</code></a>
interface. Out of the box, Struts 2 uses the <a shape="rect"
class="external-link"
href="http://struts.apache.org/2.x/struts2-core/apidocs/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.html"><code>DefaultActionMapper</code></a>
to map URL's to Actions via the logic you are probably already familiar
with.</p> <div class="aui-message
warning shadowed information-macro">
<span class="aui-icon icon-warning">Icon</span>
@@ -268,7 +268,25 @@ public class OrdersController implements
</div></div><p>Then, tell the REST Plugin to override the handler for the
desired extension with yours. In <code>struts.properties</code>, it would look
like this:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[struts.rest.handlerOverride.xml=myXml
]]></script>
-</div></div><h3 id="RESTPlugin-Settings">Settings</h3><p>The following
settings can be customized. See the <a shape="rect" class="external-link"
href="http://cwiki.apache.org/confluence/display/WW/Configuration+Files">developer
guide</a>.<br clear="none"> For more configuration options see the <a
shape="rect" href="convention-plugin.html">Convention Plugin
Documentation</a></p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Setting</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Default</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Possible Values</p></th></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p><code>struts.rest.handlerOverride.EXTENSION</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>The alias for the
<code>ContentTypeHandler</code> implementation that handles the EXTENSION val
ue</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>N/A</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Any declared alias for a
<code>ContentTypeHandler</code> implementation</p></td></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p><code>struts.rest.defaultExtension</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>The default extension to use
when none is explicitly specified in the request</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>xhtml</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Any extension</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>struts.rest.validationFailureStatusCode</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>The HTTP status code to return
on validation failure</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>400</code></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Any HTTP status code as
an integer</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>struts.rest.namespace</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Optional parameter to specify
namespace for REST services</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>/</code></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>eg. /rest</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>struts.rest.content.restrictToGET</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Optional parameter, if set to
true blocks returning content from any other methods than GET, if set to false,
the content can be returned for any kind of method</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>eg. put struts.rest.content.restrictToGET =
false in struts.properties</p></td></tr></tbody></table></div><h2
id="RESTPlugin-Resources">Resource
s</h2><ul><li><a shape="rect" class="external-link"
href="http://www.b-simple.de/documents"
rel="nofollow">http://www.b-simple.de/documents</a> - Short RESTful Rails
tutorial (PDF, multiple languages)</li><li><a shape="rect"
class="external-link"
href="http://www.amazon.com/RESTful-Web-Services-Leonard-Richardson/dp/0596529260"
rel="nofollow">RESTful Web Services</a> - Highly recommend book from
O'Reilly</li><li><a shape="rect" class="external-link"
href="http://raibledesigns.com/rd/entry/go_light_with_apache_struts"
rel="nofollow">Go Light with Apache Struts 2 and REST</a> - Presentation by Don
Brown at ApacheCon US 2008</li></ul><h2 id="RESTPlugin-VersionHistory">Version
History</h2><p>From Struts 2.1.1+</p></div>
+</div></div><h3
id="RESTPlugin-UseJacksonframeworkasJSONContentTypeHandler">Use Jackson
framework as JSON ContentTypeHandler</h3><p>The default JSON Content Handler is
build on top of the <a shape="rect" class="external-link"
href="http://json-lib.sourceforge.net/" rel="nofollow">JSON-lib</a>. If you
prefer to use the <a shape="rect" class="external-link"
href="http://jackson.codehaus.org/" rel="nofollow">Jackson framework</a> for
JSON serialisation, you can configure the JacksonLibHandler as Content Handler
for your json requests. </p><p>First you need to add the jackson
dependency to your web application by downloading the jar file and put it under
WEB-INF/lib or by adding following xml snippet to your dependencies section in
the pom.xml when you are using maven as build system.</p><div class="code panel
pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false"
type="syntaxhighlighter"><![CDATA[<dependency>
+ <groupId>org.codehaus.jackson</groupId>
+ <artifactId>jackson-jaxrs</artifactId>
+ <version>1.9.13</version>
+</dependency>
+]]></script>
+</div></div><p>Now you can overwrite the Content Handler with the Jackson
Content Handler in the struts.xml:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false"
type="syntaxhighlighter"><![CDATA[<bean
type="org.apache.struts2.rest.handler.ContentTypeHandler"
name="jackson"
class="org.apache.struts2.rest.handler.JacksonLibHandler"/>
+<constant name="struts.rest.handlerOverride.json"
value="jackson"/>
+
+<!-- Set to false if the json content can be returned for any kind of http
method -->
+<constant name="struts.rest.content.restrictToGET"
value="false"/>
+
+<!-- Set encoding to UTF-8, default is ISO-8859-1 -->
+<constant name="struts.i18n.encoding"
value="UTF-8"/>
+
+]]></script>
+</div></div><p> </p><h3 id="RESTPlugin-Settings">Settings</h3><p>The
following settings can be customized. See the <a shape="rect"
class="external-link"
href="http://cwiki.apache.org/confluence/display/WW/Configuration+Files">developer
guide</a>.<br clear="none"> For more configuration options see the <a
shape="rect" href="convention-plugin.html">Convention Plugin
Documentation</a></p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Setting</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Default</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Possible Values</p></th></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p><code>struts.rest.handlerOverride.EXTENSION</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>The alias for the
<code>ContentTypeHandler</code> implementation that handles the
EXTENSION value</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>N/A</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Any declared alias for a
<code>ContentTypeHandler</code> implementation</p></td></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p><code>struts.rest.defaultExtension</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>The default extension to use
when none is explicitly specified in the request</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>xhtml</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Any extension</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>struts.rest.validationFailureStatusCode</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>The HTTP status code to return
on validation failure</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>400</code></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Any HTTP st
atus code as an integer</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>struts.rest.namespace</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Optional parameter to specify
namespace for REST services</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>/</code></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>eg. /rest</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>struts.rest.content.restrictToGET</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Optional parameter, if set to
true blocks returning content from any other methods than GET, if set to false,
the content can be returned for any kind of method</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>eg. put struts.rest.content.restrictToGET =
false in struts.properties</p></td></tr></tbody></table></div><h2
id="RESTPlugin-Resour
ces">Resources</h2><ul><li><a shape="rect" class="external-link"
href="http://www.b-simple.de/documents"
rel="nofollow">http://www.b-simple.de/documents</a> - Short RESTful Rails
tutorial (PDF, multiple languages)</li><li><a shape="rect"
class="external-link"
href="http://www.amazon.com/RESTful-Web-Services-Leonard-Richardson/dp/0596529260"
rel="nofollow">RESTful Web Services</a> - Highly recommend book from
O'Reilly</li><li><a shape="rect" class="external-link"
href="http://raibledesigns.com/rd/entry/go_light_with_apache_struts"
rel="nofollow">Go Light with Apache Struts 2 and REST</a> - Presentation by Don
Brown at ApacheCon US 2008</li></ul><h2 id="RESTPlugin-VersionHistory">Version
History</h2><p>From Struts 2.1.1+</p></div>
</div>
Modified: websites/production/struts/content/development/2.x/docs/security.html
==============================================================================
--- websites/production/struts/content/development/2.x/docs/security.html
(original)
+++ websites/production/struts/content/development/2.x/docs/security.html Fri
Nov 14 07:43:54 2014
@@ -138,7 +138,18 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
- <div id="ConfluenceContent"><h3
id="Security-Securitytips">Security tips</h3><p>The Apache Struts 2 doesn't
provide any security mechanism - it is just a pure web framework. Below are few
tips you should consider during application development with the Apache Struts
2.</p><h4 id="Security-RestrictaccesstotheConfigBrowser">Restrict access to the
Config Browser</h4><p><a shape="rect" href="config-browser-plugin.html">Config
Browser Plugin</a> exposes internal configuration and should be used only
during development phase. If you must use it on production site, we strictly
recommend restricting access to it - you can use  Basic Authentication or
any other security mechanism (e.g. <a shape="rect" class="external-link"
href="http://shiro.apache.org/">Apache Shiro</a>)</p><h4
id="Security-Don'tmixdifferentaccesslevelsinthesamenamespace">Don't mix
different access levels in the same namespace</h4><p>Very often access to
different resources is controlled based on URL p
atterns, see snippet below. Because of that you cannot mix actions with
different security levels in the same namespace. Always group actions in one
namespace by security level.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+ <div id="ConfluenceContent"><h3
id="Security-/*<![CDATA[*/div.rbtoc1415950673266{padding:0px;}div.rbtoc1415950673266ul{list-style:disc;margin-left:0px;}div.rbtoc1415950673266li{margin-left:0px;padding-left:0px;}/*]]>*/SecuritytipsRestrictaccesstotheConfigBrowserDon'tmixdifferentaccesslevels"><style
type="text/css">/*<![CDATA[*/
+div.rbtoc1415950673266 {padding: 0px;}
+div.rbtoc1415950673266 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1415950673266 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></h3><div class="toc-macro rbtoc1415950673266">
+<ul class="toc-indentation"><li><a shape="rect"
href="#Security-Securitytips">Security tips</a>
+<ul class="toc-indentation"><li><a shape="rect"
href="#Security-RestrictaccesstotheConfigBrowser">Restrict access to the Config
Browser</a></li><li><a shape="rect"
href="#Security-Don'tmixdifferentaccesslevelsinthesamenamespace">Don't mix
different access levels in the same namespace</a></li></ul>
+</li><li><a shape="rect" href="#Security-Internalsecuritymechanism">Internal
security mechanism</a>
+<ul class="toc-indentation"><li><a shape="rect"
href="#Security-OGNLisusedtocallaction'smethods">OGNL is used to call action's
methods</a></li></ul>
+</li></ul>
+</div><h3 id="Security-Securitytips">Security tips</h3><p>The Apache Struts 2
doesn't provide any security mechanism - it is just a pure web framework. Below
are few tips you should consider during application development with the Apache
Struts 2.</p><h4 id="Security-RestrictaccesstotheConfigBrowser">Restrict access
to the Config Browser</h4><p><a shape="rect"
href="config-browser-plugin.html">Config Browser Plugin</a> exposes
internal configuration and should be used only during development phase. If you
must use it on production site, we strictly recommend restricting access to it
- you can use  Basic Authentication or any other security mechanism (e.g.
<a shape="rect" class="external-link" href="http://shiro.apache.org/">Apache
Shiro</a>)</p><h4
id="Security-Don'tmixdifferentaccesslevelsinthesamenamespace">Don't mix
different access levels in the same namespace</h4><p>Very often access to
different resources is controlled based on URL patterns, see snippet below.
Becaus
e of that you cannot mix actions with different security levels in the same
namespace. Always group actions in one namespace by security level.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
<script class="theme: Default; brush: xml; gutter: false"
type="syntaxhighlighter"><![CDATA[ <security-constraint>
<web-resource-collection>
<web-resource-name>admin</web-resource-name>
@@ -149,7 +160,52 @@ under the License.
</auth-constraint>
</security-constraint>
]]></script>
-</div></div></div>
+</div></div><h3 id="Security-Internalsecuritymechanism">Internal security
mechanism</h3><p>The Apache Struts 2 contains internal security manager which
blocks access to particular classes and Java packages - it's a OGNL-wide
mechanism which means it affects any aspect of the framework ie. incoming
parameters, expressions used in JSPs, etc.</p><p>The defaults are as
follow:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false"
type="syntaxhighlighter"><![CDATA[ <constant
name="struts.excludedClasses"
+ value="
+ java.lang.Object,
+ java.lang.Runtime,
+ java.lang.System,
+ java.lang.Class,
+ java.lang.ClassLoader,
+ java.lang.Shutdown,
+ ognl.OgnlContext,
+ ognl.MemberAccess,
+ ognl.ClassResolver,
+ ognl.TypeConverter,
+ com.opensymphony.xwork2.ActionContext" />
+ <!-- this must be valid regex, each '.' in package name must be
escaped! -->
+ <constant name="struts.excludedPackageNamePatterns"
value="^java\.lang\..*,^ognl.*,^javax.*" />]]></script>
+</div></div><p>Any expression or target which evaluates to one of these will
be blocked and you see a WARN in logs:</p><div class="preformatted panel"
style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>[WARNING] Target class [class example.MyBean] or declaring class of
member type [public example.MyBean()] are excluded!</pre>
+</div></div><p>In that case <code>new MyBean()</code> was used to create
a new instance of class (inside JSP) - it's blocked
because <code>target</code> of such expression is evaluated
to <code>java.lang.Class</code></p> <div class="aui-message warning
shadowed information-macro">
+ <span class="aui-icon icon-warning">Icon</span>
+ <div class="message-content">
+ <p>It is possible to redefine the above constants
in <code>struts.xml</code> but try to avoid this and rather change design of
your application!</p>
+ </div>
+ </div>
+<h4 id="Security-OGNLisusedtocallaction'smethods">OGNL is used to call
action's methods</h4><p>This can impact actions which have large inheritance
hierarchy and use the same method's name throughout the hierarchy, this was
reported as an issue <a shape="rect" class="external-link"
href="https://issues.apache.org/jira/browse/WW-4405">WW-4405</a>. See the
example below:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[public class RealAction extends BaseAction {
+ @Action("save")
+ public String save() throws Exception {
+ super.save();
+ return SUCCESS;
+ }
+}
+Â
+public class BaseAction extends AbstractAction {
+ public String save() throws Exception {
+ save(Double.MAX_VALUE);
+ return SUCCESS;
+ }
+}
+Â
+public abstract class AbstractAction extends ActionSupport {
+ protected void save(Double val) {
+ // some logic
+ }
+}]]></script>
+</div></div><p>In such case OGNL cannot properly map which method to call when
request is coming. This is do the OGNL limitation. To solve the problem don't
use the same method's names through the hierarchy, you can simply change the
action's method from <code>save()</code>
to <code>saveAction()</code> and leaving annotation as is to
allow <span style="line-height: 1.4285715;">call this action
via </span><code style="line-height: 1.4285715;">/save.action</code><span
style="line-height: 1.4285715;"> request.</span></p></div>
</div>
Added:
websites/production/struts/content/development/2.x/docs/version-notes-2319.html
==============================================================================
---
websites/production/struts/content/development/2.x/docs/version-notes-2319.html
(added)
+++
websites/production/struts/content/development/2.x/docs/version-notes-2319.html
Fri Nov 14 07:43:54 2014
@@ -0,0 +1,174 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html>
+<head>
+ <link type="text/css" rel="stylesheet"
href="https://struts.apache.org/css/default.css">
+ <style type="text/css">
+ .dp-highlighter {
+ width:95% !important;
+ }
+ </style>
+ <style type="text/css">
+ .footer {
+ background-image:
url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif');
+ background-repeat: repeat-x;
+ background-position: left top;
+ padding-top: 4px;
+ color: #666;
+ }
+ </style>
+ <link href='http://struts.apache.org/highlighter/style/shCoreStruts.css'
rel='stylesheet' type='text/css' />
+ <link href='http://struts.apache.org/highlighter/style/shThemeStruts.css'
rel='stylesheet' type='text/css' />
+ <script src='http://struts.apache.org/highlighter/js/shCore.js'
type='text/javascript'></script>
+ <script src="http://struts.apache.org/highlighter/js/shBrushPlain.js"
type="text/javascript"></script>
+ <script src="http://struts.apache.org/highlighter/js/shBrushXml.js"
type="text/javascript"></script>
+ <script src="http://struts.apache.org/highlighter/js/shBrushJava.js"
type="text/javascript"></script>
+ <script src="http://struts.apache.org/highlighter/js/shBrushJScript.js"
type="text/javascript"></script>
+ <script src="http://struts.apache.org/highlighter/js/shBrushGroovy.js"
type="text/javascript"></script>
+ <script src="http://struts.apache.org/highlighter/js/shBrushBash.js"
type="text/javascript"></script>
+ <script type="text/javascript">
+ SyntaxHighlighter.defaults['toolbar'] = false;
+ SyntaxHighlighter.all();
+ </script>
+ <script type="text/javascript" language="javascript">
+ var hide = null;
+ var show = null;
+ var children = null;
+
+ function init() {
+ /* Search form initialization */
+ var form = document.forms['search'];
+ if (form != null) {
+ form.elements['domains'].value = location.hostname;
+ form.elements['sitesearch'].value = location.hostname;
+ }
+
+ /* Children initialization */
+ hide = document.getElementById('hide');
+ show = document.getElementById('show');
+ children = document.all != null ?
+ document.all['children'] :
+ document.getElementById('children');
+ if (children != null) {
+ children.style.display = 'none';
+ show.style.display = 'inline';
+ hide.style.display = 'none';
+ }
+ }
+
+ function showChildren() {
+ children.style.display = 'block';
+ show.style.display = 'none';
+ hide.style.display = 'inline';
+ }
+
+ function hideChildren() {
+ children.style.display = 'none';
+ show.style.display = 'inline';
+ hide.style.display = 'none';
+ }
+ </script>
+ <title>Version Notes 2.3.19</title>
+</head>
+<body onload="init()">
+<table border="0" cellpadding="2" cellspacing="0" width="100%">
+ <tr class="topBar">
+ <td align="left" valign="middle" class="topBarDiv" align="left" nowrap>
+ <a href="home.html">Home</a> > <a
href="guides.html">Guides</a> > <a
href="migration-guide.html">Migration Guide</a> > <a
href="version-notes-2319.html">Version Notes 2.3.19</a>
+ </td>
+ <td align="right" valign="middle" nowrap>
+ <form name="search" action="http://www.google.com/search"
method="get">
+ <input type="hidden" name="ie" value="UTF-8" />
+ <input type="hidden" name="oe" value="UTF-8" />
+ <input type="hidden" name="domains" value="" />
+ <input type="hidden" name="sitesearch" value="" />
+ <input type="text" name="q" maxlength="255" value="" />
+ <input type="submit" name="btnG" value="Google Search" />
+ </form>
+ </td>
+ </tr>
+</table>
+
+<div id="PageContent">
+ <div class="pageheader" style="padding: 6px 0px 0px 0px;">
+ <!-- We'll enable this once we figure out how to access (and save) the
logo resource -->
+ <!--img src="/wiki/images/confluence_logo.gif" style="float: left;
margin: 4px 4px 4px 10px;" border="0"-->
+ <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts
2 Documentation</div>
+ <div style="margin: 0px 10px 8px 10px" class="pagetitle">Version
Notes 2.3.19</div>
+
+ <div class="greynavbar" align="right" style="padding: 2px 10px;
margin: 0px;">
+ <a
href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=40506670">
+ <img
src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif"
+ height="16" width="16" border="0" align="absmiddle"
title="Edit Page"></a>
+ <a
href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=40506670">Edit
Page</a>
+
+ <a
href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">
+ <img
src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif"
+ height="16" width="16" border="0" align="absmiddle"
title="Browse Space"></a>
+ <a
href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse
Space</a>
+
+ <a
href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=40506670">
+ <img
src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif"
+ height="16" width="16" border="0" align="absmiddle"
title="Add Page"></a>
+ <a
href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=40506670">Add
Page</a>
+
+ <a
href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=40506670">
+ <img
src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif"
+ height="16" width="16" border="0" align="absmiddle"
title="Add News"></a>
+ <a
href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=40506670">Add
News</a>
+ </div>
+ </div>
+
+ <div class="pagecontent">
+ <div class="wiki-content">
+ <div id="ConfluenceContent"><p><img class="emoticon emoticon-tick"
src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/check.png"
data-emoticon-name="tick" alt="(tick)"> These are the notes for the Struts
2.3.19 distribution.</p><p><img class="emoticon emoticon-tick"
src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/check.png"
data-emoticon-name="tick" alt="(tick)"> For prior notes in this release
series, see <a shape="rect" href="version-notes-23161.html">Version Notes
2.3.16.1</a></p><ul><li>If you are a Maven user, you might want to get started
using the <a shape="rect" href="struts-2-maven-archetypes.html">Maven
Archetype</a>.</li><li>Another quick-start entry point is the
<strong>blank</strong> application. Rename and deploy the WAR as a starting
point for your own development.</li></ul><div class="code p
anel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl"
style="border-bottom-width: 1px;"><b>Maven Dependency</b></div><div
class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false"
type="syntaxhighlighter"><![CDATA[<dependency>
+ <groupId>org.apache.struts</groupId>
+ <artifactId>struts2-core</artifactId>
+ <version>2.3.19</version>
+</dependency>
+]]></script>
+</div></div><p>You can also use Struts Archetype Catalog like below</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader
panelHeader pdl" style="border-bottom-width: 1px;"><b>Struts Archetype
Catalog</b></div><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: text; gutter: false"
type="syntaxhighlighter"><![CDATA[mvn archetype:generate
-DarchetypeCatalog=http://struts.apache.org/]]></script>
+</div></div><div class="code panel pdl" style="border-width: 1px;"><div
class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Staging
Repository</b></div><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false"
type="syntaxhighlighter"><![CDATA[<repositories>
+ <repository>
+ <id>apache.nexus</id>
+ <name>ASF Nexus Staging</name>
+
<url>https://repository.apache.org/content/groups/staging/</url>
+ </repository>
+</repositories>]]></script>
+</div></div><h2 id="VersionNotes2.3.19-InternalChanges">Internal
Changes</h2><ul><li><img class="emoticon emoticon-warning"
src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/warning.png"
data-emoticon-name="warning" alt="(warning)"> Merged security fixes from
version 2.3.16.1, 2.3.16.2, 2.3.16.3</li><li><img class="emoticon
emoticon-warning"
src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/warning.png"
data-emoticon-name="warning" alt="(warning)"> Extended existing security
mechanism to block access to given Java packages and Classes, see <a
shape="rect" class="external-link"
href="https://github.com/apache/struts/pull/11" rel="nofollow">#11</a> or
read <a shape="rect"
href="security.html#Security-Internalsecuritymechanism">Internal security
mechanism</a></li><li>Collection Parameters for Redir
ectResults, <a shape="rect" class="external-link"
href="https://issues.apache.org/jira/browse/WW-4224">WW-4224</a></li><li>Make
ParametersInterceptor supports chinese in hash key by default, <a shape="rect"
class="external-link"
href="https://issues.apache.org/jira/browse/WW-4250">WW-4250</a></li><li>themes.properties
can be loaded using ServletContext allows to put <code>template</code> folder
under WEB-INF or on classpath, <a shape="rect" class="external-link"
href="https://issues.apache.org/jira/browse/WW-4260">WW-4260</a></li><li><span>New
tag datetextfield, <a shape="rect" class="external-link"
href="https://issues.apache.org/jira/browse/WW-3493">WW-3493</a></span></li><li><span>Only
valid Ognl expressions are cached, <a shape="rect" class="external-link"
href="https://issues.apache.org/jira/browse/WW-4146">WW-4146</a></span></li><li><span>CustomTextProvider
can be used for validation errors of model driven actions, <a shape="rect"
class="external-link" href="https://issues.apa
che.org/jira/browse/WW-4202">WW-4202</a></span></li><li><span>datetimepicker's
label fixed, <a shape="rect" class="external-link"
href="https://issues.apache.org/jira/browse/WW-4254">WW-4254</a></span></li><li><span>PropertiesJudge<span> removed
and properties are checked
in <code>SecurityMemberAccess</code></span></span>, <a shape="rect"
class="external-link"
href="https://issues.apache.org/jira/browse/WW-4257">WW-4257</a></li><li>resource
reloading works in IBM JVM, <a shape="rect" class="external-link"
href="https://issues.apache.org/jira/browse/WW-4266">WW-4266</a></li><li>default
reloading settings were removed from <code>default.properties</code>, <a
shape="rect" class="external-link"
href="https://issues.apache.org/jira/browse/WW-4267">WW-4267</a></li><li><img
class="emoticon emoticon-warning"
src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/warning.png"
data-emoticon-name="warn
ing" alt="(warning)"> commons-fileupload library upgraded to version
1.3.1 to fix potential security vulnerability, <a shape="rect"
class="external-link"
href="https://issues.apache.org/jira/browse/WW-4286">WW-4286</a></li><li>The <code>scheme</code>
attribute accepts expressions in <code>s:url</code> tag, <a shape="rect"
class="external-link"
href="https://issues.apache.org/jira/browse/WW-4024">WW-4024</a></li><li>Solves
problem with infinite loop in <code>FastByteArrayOutputStream</code>, <a
shape="rect" class="external-link"
href="https://issues.apache.org/jira/browse/WW-4383">WW-4383</a></li><li><code>LocalizedTextUtil</code>
supports many <code>ClassLoaders</code>, <a shape="rect"
class="external-link"
href="https://issues.apache.org/jira/browse/WW-4379">WW-4379</a></li><li>Bill
of Materials pom was introduced, <a shape="rect" class="external-link"
href="https://issues.apache.org/jira/browse/WW-4326">WW-4326</a></li><li><code>debug=browser|console</code
> was migrated to jQuery, <a shape="rect" class="external-link"
> href="https://issues.apache.org/jira/browse/WW-4322">WW-4322</a></li><li><code>struts_dojo.js</code>
> was fixed, <a shape="rect" class="external-link"
> href="https://issues.apache.org/jira/browse/WW-4349">WW-4349</a></li><li>interface <code>org/apache/struts2/views/TagLibrary</code>
> was restored and marked as <code>@Depreacted</code>, <a shape="rect"
> class="external-link"
> href="https://issues.apache.org/jira/browse/WW-4255">WW-4255</a></li><li>and
> many other small improvements, please see the release
> notes</li></ul><p> </p> <div class="aui-message warning shadowed
> information-macro">
+ <span class="aui-icon icon-warning">Icon</span>
+ <div class="message-content">
+ <p>Please read information about new <a
shape="rect" href="security.html#Security-Internalsecuritymechanism">internal
security mechanism</a> introduced with this version, it can have impact on your
application!</p>
+ </div>
+ </div>
+<p> </p><h3 id="VersionNotes2.3.19-IssueDetail">Issue
Detail</h3><ul><li><a shape="rect" class="external-link"
href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12311041&version=12319176">JIRA
Release Notes 2.3.19</a></li></ul><h3 id="VersionNotes2.3.19-IssueList">Issue
List</h3><ul><li><a shape="rect" class="external-link"
href="https://issues.apache.org/jira/issues/?filter=12326872">Struts 2.3.19
DONE</a></li><li><a shape="rect" class="external-link"
href="https://issues.apache.org/jira/issues/?filter=12318399">Struts 2.3.x
TODO</a></li></ul><h3 id="VersionNotes2.3.19-Otherresources">Other
resources</h3><ul><li><a shape="rect" class="external-link"
href="http://www.mail-archive.com/commits%40struts.apache.org/"
rel="nofollow">Commit Logs</a></li><li><a shape="rect" class="external-link"
href="https://git-wip-us.apache.org/repos/asf?p=struts.git;a=tree;h=refs/heads/develop;hb=develop">Source
Code Repository</a></li></ul><div><span style="font-size: 24.
0px;line-height: 30.0px;"><br clear="none"></span></div><div><span
style="font-size: 24.0px;line-height: 30.0px;background-color:
rgb(245,245,245);"><br clear="none"></span></div></div>
+ </div>
+
+
+ </div>
+</div>
+<div class="footer">
+ Generated by CXF SiteExporter
+</div>
+</body>
+</html>
\ No newline at end of file
Modified:
websites/production/struts/content/release/2.3.x/docs/actionmapper.html
==============================================================================
--- websites/production/struts/content/release/2.3.x/docs/actionmapper.html
(original)
+++ websites/production/struts/content/release/2.3.x/docs/actionmapper.html Fri
Nov 14 07:43:54 2014
@@ -139,11 +139,11 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
<div id="ConfluenceContent"><style type="text/css">/*<![CDATA[*/
-div.rbtoc1405758432629 {padding: 0px;}
-div.rbtoc1405758432629 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1405758432629 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1411292178688 {padding: 0px;}
+div.rbtoc1411292178688 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1411292178688 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style><div class="toc-macro rbtoc1405758432629">
+/*]]>*/</style><div class="toc-macro rbtoc1411292178688">
<ul class="toc-indentation"><li><a shape="rect"
href="#ActionMapper-Description">Description</a></li><li><a shape="rect"
href="#ActionMapper-DefaultActionMapper">DefaultActionMapper</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#ActionMapper-Methodprefix">Method prefix</a></li><li><a shape="rect"
href="#ActionMapper-Actionprefix">Action prefix</a></li></ul>
</li><li><a shape="rect" href="#ActionMapper-CustomActionMapper">Custom
ActionMapper</a></li><li><a shape="rect"
href="#ActionMapper-CompositeActionMapper">CompositeActionMapper</a></li><li><a
shape="rect"
href="#ActionMapper-PrefixBasedActionMapper">PrefixBasedActionMapper</a></li><li><a
shape="rect"
href="#ActionMapper-ActionMapperandActionMappingobjects">ActionMapper and
ActionMapping objects</a>
Modified:
websites/production/struts/content/release/2.3.x/docs/building-struts-2-normal-release.html
==============================================================================
---
websites/production/struts/content/release/2.3.x/docs/building-struts-2-normal-release.html
(original)
+++
websites/production/struts/content/release/2.3.x/docs/building-struts-2-normal-release.html
Fri Nov 14 07:43:54 2014
@@ -139,34 +139,39 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
<div id="ConfluenceContent"><h1
id="BuildingStruts2-Normalrelease-Content">Content</h1><p><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1405758786455 {padding: 0px;}
-div.rbtoc1405758786455 ul {list-style: none;margin-left: 0px;}
-div.rbtoc1405758786455 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1415950672619 {padding: 0px;}
+div.rbtoc1415950672619 ul {list-style: none;margin-left: 0px;}
+div.rbtoc1415950672619 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1405758786455">
-<ul class="toc-indentation"><li><span class="TOCOutline">1</span> <a
shape="rect" href="#BuildingStruts2-Normalrelease-Gettingready">Getting
ready</a></li><li><span class="TOCOutline">2</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-UpdateDraftDocswhenneeded">Update Draft
Docs when needed</a></li><li><span class="TOCOutline">3</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Besureyourlocalcopyisup-to-date">Be sure
your local copy is up-to-date</a></li><li><span class="TOCOutline">4</span> <a
shape="rect" href="#BuildingStruts2-Normalrelease-Createareleasebranch">Create
a release branch</a></li><li><span class="TOCOutline">5</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Preparerelease">Prepare
release</a></li><li><span class="TOCOutline">6</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Performtherelease">Perform the
release</a></li><li><span class="TOCOutline">7</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Movetheasse
mblies">Move the assemblies</a></li><li><span class="TOCOutline">8</span> <a
shape="rect"
href="#BuildingStruts2-Normalrelease-Announceavailability">Announce
availability</a></li><li><span class="TOCOutline">9</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Cleanuprepository">Clean up
repository</a></li><li><span class="TOCOutline">10</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Voteonit">Vote on it</a></li><li><span
class="TOCOutline">11</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Copyfiles">Copy files</a></li><li><span
class="TOCOutline">12</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Promoterelease">Promote
release</a></li><li><span class="TOCOutline">13</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Cleanupoldreleases">Clean up old
releases</a></li><li><span class="TOCOutline">14</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Waitforrsync">Wait for
rsync</a></li><li><span class="TOCOutline">15</s
pan> <a shape="rect"
href="#BuildingStruts2-Normalrelease-(Optional)-UpdateSecurityBulletins">(Optional)
- Update Security Bulletins</a></li><li><span class="TOCOutline">16</span> <a
shape="rect" href="#BuildingStruts2-Normalrelease-Updatesite">Update
site</a></li><li><span class="TOCOutline">17</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Redeploythedraftdocs(Optional)">Redeploy
the draft docs (Optional)</a></li><li><span class="TOCOutline">18</span> <a
shape="rect" href="#BuildingStruts2-Normalrelease-Postannouncements">Post
announcements</a></li></ul>
+/*]]>*/</style></p><div class="toc-macro rbtoc1415950672619">
+<ul class="toc-indentation"><li><span class="TOCOutline">1</span> <a
shape="rect" href="#BuildingStruts2-Normalrelease-Gettingready">Getting
ready</a></li><li><span class="TOCOutline">2</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-UpdateDraftDocswhenneeded">Update Draft
Docs when needed</a></li><li><span class="TOCOutline">3</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Besureyourlocalcopyisup-to-date">Be sure
your local copy is up-to-date</a></li><li><span class="TOCOutline">4</span> <a
shape="rect" href="#BuildingStruts2-Normalrelease-Createareleasebranch">Create
a release branch</a></li><li><span class="TOCOutline">5</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Preparerelease">Prepare
release</a></li><li><span class="TOCOutline">6</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Performtherelease">Perform the
release</a></li><li><span class="TOCOutline">7</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Movetheasse
mblies">Move the assemblies</a></li><li><span class="TOCOutline">8</span> <a
shape="rect"
href="#BuildingStruts2-Normalrelease-Announceavailability">Announce
availability</a></li><li><span class="TOCOutline">9</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Cleanuprepository">Clean up
repository</a></li><li><span class="TOCOutline">10</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Voteonit">Vote on it</a></li><li><span
class="TOCOutline">11</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Copyfiles">Copy files</a></li><li><span
class="TOCOutline">12</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Promoterelease">Promote
release</a></li><li><span class="TOCOutline">13</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Cleanupoldreleases">Clean up old
releases</a></li><li><span class="TOCOutline">14</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Waitforrsync">Wait for
rsync</a></li><li><span class="TOCOutline">15</s
pan> <a shape="rect" href="#BuildingStruts2-Normalrelease-Updatesite">Update
site</a></li><li><span class="TOCOutline">16</span> <a shape="rect"
href="#BuildingStruts2-Normalrelease-Redeploythedraftdocs(Optional)">Redeploy
the draft docs (Optional)</a></li><li><span class="TOCOutline">17</span> <a
shape="rect" href="#BuildingStruts2-Normalrelease-Postannouncements">Post
announcements</a></li></ul>
</div><h2 id="BuildingStruts2-Normalrelease-BuildingSteps(Struts)">Building
Steps (Struts)</h2><h3 id="BuildingStruts2-Normalrelease-Gettingready">Getting
ready</h3><ol><li>Create an "Struts 2.x.y omnibus ticket" ticket in JIRA to
refer to in upcoming release related commit comments and for general
documentation purposes. Mark it with priority "Blocker".</li><li>Switch to
branch <code>develop</code></li><li>Ensure that the master POM and Struts
Annotations have current releases</li><li>Review JIRA for any issues without a
fix version set, and for any issues that should be resolved for the pending
release.</li><li>Ensure that there are no repositories or pluginRepositories
listed in the poms.</li><li>If you have committed all changes regarding the
release process, close the omnibus ticket as it is the last open ticket for the
upcoming release</li><li>Release the upcoming version in JIRA (under
Administration/Manage Releases) and tag the release date</li><li>Add next
milestone ve
rsion to the JIRA roadmap</li><li>Create DONE and TODO filters for the new
version, share with all, and remove obsolete TODO filter</li><li>Create a new
Version Notes page in Confluence, link from <a shape="rect"
href="migration-guide.html">Migration Guide</a>, and link to prior release page
and JIRA DONE filters of the version to release</li><li>Export wiki pages and
put them under <code>/docs</code></li></ol><h3
id="BuildingStruts2-Normalrelease-UpdateDraftDocswhenneeded">Update Draft Docs
when needed</h3><p>Checkout <code>struts-site</code> project (see details
at the bottom of this page) and perform export:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[cd struts-site
mvn package]]></script>
</div></div><p>If build will fail try again - don't
use <code>clean</code>, the exporter is going to update only outdated
pages. After successful export, commit updated files
into <code>struts-production</code></p><h3
id="BuildingStruts2-Normalrelease-Besureyourlocalcopyisup-to-date">Be sure your
local copy is up-to-date</h3><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[git checkout develop
-git pull
-
-git fetch origin --prune]]></script>
-</div></div><h3 id="BuildingStruts2-Normalrelease-Createareleasebranch">Create
a release branch</h3><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[git fetch origin --prune
+git checkout develop
+git pull]]></script>
+</div></div> <div class="aui-message warning shadowed information-macro">
+ <span class="aui-icon icon-warning">Icon</span>
+ <div class="message-content">
+ <p>Please remember to keep BOM subproject in sync
-
<code><struts-version.version>X.X.X</struts-version.version></code>
- must be the same as the parent pom.</p>
+ </div>
+ </div>
+<h3 id="BuildingStruts2-Normalrelease-Createareleasebranch">Create a release
branch</h3><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[git flow release start X.X.X.X
git flow release publish X.X.X.X]]></script>
-</div></div><p>Now you should be on <code>release/X.X.X.X</code> branch
(<code>git status</code> supposes confirm that). You must push changes to
remote repo as the Release plugins will push changes to remote as well.</p><h3
id="BuildingStruts2-Normalrelease-Preparerelease"><span style="line-height:
1.5625;">Prepare release</span></h3><p>Tag the release by using the
"release:prepare" goal of Maven:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[mvn release:prepare
-DautoVersionSubmodules=true -Dusername=yourSvnUsername
-Dpassword=yourSvnPassword
+</div></div><p>Now you should be on <code>release/X.X.X.X</code> branch
(<code>git status</code> supposed to confirm that). You must push changes
to remote repo as the Release plugins will push changes to remote as well (it's
already done after publishing release).</p><h3
id="BuildingStruts2-Normalrelease-Preparerelease"><span style="line-height:
1.5625;">Prepare release</span></h3><p>Tag the release by using the
"release:prepare" goal of Maven:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[mvn release:prepare
-DautoVersionSubmodules=true
]]></script>
</div></div><p>For a <a shape="rect" class="external-link"
href="http://maven.apache.org/plugins/maven-release-plugin/usage.html">dry
run</a>, add <code>-DdryRun=true</code>. If you do a dry run, use <code>mvn
release:clean</code> to clean up after you have looked at the
output.</p><p>When prompted for the SCM tag name, follow this pattern:
STRUTS_2_3_[PATCH_VERSION]</p> <div class="aui-message warning shadowed
information-macro">
<span class="aui-icon icon-warning">Icon</span>
<div class="message-content">
- <p>If you get an error message, try to re-run
<code>mvn release:prepare -Dusername=yourSvnUsername -Dpassword=yourSvnPassword
-DautoVersionSubmodules=true</code> command again, <code>-Dresume</code> flag
is set to true by default and the plugin will resume the release process from
where it failed before.</p>
+ <p>If you get an error message, try to re-run
<code>mvn release:prepare -DautoVersionSubmodules=true</code> command again,
<code>-Dresume</code> flag is set to true by default and the plugin will resume
the release process from where it failed before.</p>
</div>
</div>
<p>Follow the link to get <a shape="rect" class="external-link"
href="http://maven.apache.org/plugins/maven-release-plugin/examples/prepare-release.html">more
information</a> about performed operation by release plugin.</p><h3
id="BuildingStruts2-Normalrelease-Performtherelease">Perform the
release</h3><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[mvn release:perform -Dusername=yourSvnUsername
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[mvn release:perform
]]></script>
</div></div><p>Follow the link to get <a shape="rect"
class="external-link"
href="http://maven.apache.org/plugins/maven-release-plugin/examples/perform-release.html">more
information</a> about performed operation by release plugin. <span
style="line-height: 1.4285715;">After this step the artifacts will be hosted by
</span><a shape="rect" class="external-link"
href="http://repository.apache.org/" style="line-height:
1.4285715;">Nexus</a>.</p><p>If you need to run perform again, (or in a
different box), do:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[git checkout STRUTS_2_3_[PATCH_VERSION]
@@ -215,7 +220,13 @@ rm *.asc.sha1
</div></div><p>This will remove the branch from the remote, now we can merge
once more the release branch (when on <code>develop</code>) and remove
it</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[git merge --no-ff release/X.X.X.X
git branch -d release/X.X.X.X]]></script>
-</div></div><p>Now both <code>master</code> and <code>develop</code>
branches should be up to date with the changes introduced by the
release.</p><h3 id="BuildingStruts2-Normalrelease-Voteonit">Vote on
it</h3><p>Post a release/quality vote to the dev list (and
<strong>only</strong> the dev list). The example mail is on <a shape="rect"
href="sample-announcements.html">Sample announcements</a> page. <br
clear="none"> If the vote result is for an ASF release (i.e. not test build),
update site, announce. If the vote result is for GA, push to central.</p><h3
id="BuildingStruts2-Normalrelease-Copyfiles">Copy files</h3><p>After the vote,
if the distribution is being mirrored (there was a favourable release vote)
copy the Sources and Binaries:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>Now both <code>master</code> and <code>develop</code>
branches should be up to date with the changes introduced by the release.</p>
<div class="aui-message warning shadowed information-macro">
+ <span class="aui-icon icon-warning">Icon</span>
+ <div class="message-content">
+ <p>Do not remove the tag! It clearly indicates
what was planned and it can be used as a history marker. Always used the next
version number, do not redeploy the same version as it breaks Maven's policy
and you will have to manually clean up Maven repository.</p>
+ </div>
+ </div>
+<h3 id="BuildingStruts2-Normalrelease-Voteonit">Vote on it</h3><p>Post a
release/quality vote to the dev list (and <strong>only</strong> the dev list).
The example mail is on <a shape="rect" href="sample-announcements.html">Sample
announcements</a> page. <br clear="none"> If the vote result is for an ASF
release (i.e. not test build), update site, announce. If the vote result is for
GA, push to central.</p><h3 id="BuildingStruts2-Normalrelease-Copyfiles">Copy
files</h3><p>After the vote, if the distribution is being mirrored (there was a
favourable release vote) copy the Sources and Binaries:</p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[ssh people.apache.org
cd /www/people.apache.org/builds/struts/$VERSION
cp struts-$VERSION-src.* /www/www.apache.org/dist/struts/source
@@ -227,12 +238,22 @@ cp struts-$VERSION-all.* /www/www.apache
<pre>cd /www/www.apache.org/dist/struts/
find . -type f -name "struts-2.3.x*" -exec rm -f {} \;
</pre>
-</div></div><p>where <code>x</code> is the previous version to remove (or one
more previous to keep current and one version back).</p><h3
id="BuildingStruts2-Normalrelease-Waitforrsync">Wait for rsync</h3><p>Wait 24
hours before proceeding.</p><h3
id="BuildingStruts2-Normalrelease-(Optional)-UpdateSecurityBulletins">(Optional)
- Update Security Bulletins</h3><p>If the release will fix a - hopefully yet
undisclosed - security issue, it's now time to update the <a shape="rect"
href="security-bulletins.html">Security Bulletins</a> page and add a new
announcement. For a template, just check former announcements</p><h3
id="BuildingStruts2-Normalrelease-Updatesite"><span style="line-height:
1.5625;">Update site</span></h3><ul><li><p>Check out site src code</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
+</div></div><p>where <code>x</code> is the previous version to remove (or one
more previous to keep current and one version back).</p><h3
id="BuildingStruts2-Normalrelease-Waitforrsync">Wait for rsync</h3><p>Wait 24
hours before proceeding.</p><h3
id="BuildingStruts2-Normalrelease-Updatesite"><span style="line-height:
1.5625;">Update site</span></h3><ul><li><p>Check out site src code</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[svn co
https://svn.apache.org/repos/asf/struts/site/ struts-site
]]></script>
</div></div></li><li>If a new DTD was defined, add it
to <code>source/dtds</code></li><li>Update current version and release
date in <code>struts-site/_config.yml</code></li><li>Update page source
files<ul><li>struts-site/source/announce.md (if applicable, refer also to
corresponding security bulletin)</li><li>struts-site/source/downloads.html
(Prior Releases section)</li><li>struts-site/source/index.html (some parts will
updated automatically with values defined
in <code>_config.yml</code>)</li></ul></li><li>Generate site with
Jekyll<ul><li><code>jekyll build</code></li><li>with <code>jekyll serve
-w</code> you can check the generated site at
http://localhost:4000</li></ul></li><li><p>Commit the changes and the generated
content</p></li></ul><p>Now the changes must be deployed to production which is
basically a separated Subversion repository, you check it out with command
below:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelC
ontent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[svn co
https://svn.apache.org/repos/infra/websites/production/struts/content
struts-production]]></script>
-</div></div><p>It's a good idea to keep that working copy to be used with
future releases. Right now copy content
of <code>struts-site/content</code>
to <code>struts-production</code>, then commit changes. Next step is to
update exported wiki pages. With current approach the pages are kept
in <code>struts-production/release/2.X.x/docs</code>
where <code>X</code> is the current branch (ie. 2.3.x, 2.2.x and so on).
Simply remove the whole content from under <code>/docs</code> and update
it with docs from assembly (you can download one from Maven repository or copy
generated during release process which supposes to be
in <code>struts/assembly/target/cwiki</code>). And commit changes.</p><h3
id="BuildingStruts2-Normalrelease-Redeploythedraftdocs(Optional)"><span
style="line-height: 1.5625;">Redeploy the draft docs
(Optional)</span></h3><p>Make public available all the pages that could leak
confidential information about the vulnerability. Wait or manually e
xport the space in Confluence. Build snapshot locally and copy
<code>assembly/target/assembly/out/struts2-#.#.#-SNAPSHOT-docs.zip</code> to
<code>people.apache.org</code> and update
<code>/www/struts.apache.org/2.x/docs</code></p><h3
id="BuildingStruts2-Normalrelease-Postannouncements"><span style="line-height:
1.5625;">Post announcements</span></h3><p>We leave this as the last step, once
the artifacts have had time to sync up on the mirrors. Target it to:
<code>[email protected]</code> and <code>[email protected]</code>, samples
are available at <a shape="rect" href="sample-announcements.html">Sample
announcements</a> page</p></div>
+</div></div><p>It's a good idea to keep that working copy to be used with
future releases. Right now copy content
of <code>struts-site/content</code>
to <code>struts-production</code>, then commit changes. Next step is to
update exported wiki pages. With current approach the pages are kept
in <code>struts-production/release/2.X.x/docs</code>
where <code>X</code> is the current branch (ie. 2.3.x, 2.2.x and so on).
Simply remove the whole content from under <code>/docs</code> and update
it with docs from assembly (you can download one from Maven repository or copy
generated during release process which supposes to be
in <code>struts/assembly/target/cwiki</code>). And commit changes.</p><h3
id="BuildingStruts2-Normalrelease-Redeploythedraftdocs(Optional)"><span
style="line-height: 1.5625;">Redeploy the draft docs (Optional)</span></h3><ul
style="list-style-type: square;"><li><p>Checkout source of the website and
export Confluence pages</p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent
pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[svn co
https://svn.apache.org/repos/asf/struts/site/trunk struts-site
+cd struts-site
+mvn package]]></script>
+</div></div><p>Now the whole Confluence space is exported
to <code>target/cwiki/WW/docs/</code></p></li><li><p>Checkout copy of
production website</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[svn co
https://svn.apache.org/repos/infra/websites/production/struts/content/
struts-production]]></script>
+</div></div><p>(you can checkout just a subtree, but it's better to checkout
the whole repo especially when you want to update also the main web
page)</p></li><li><p>Update production</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[cp -r struts-site/target/cwiki/WW/docs/*
struts-production/development/2.x/docs/
+cd struts-production
+svn commit "Updates production"]]></script>
+</div></div></li></ul><h3
id="BuildingStruts2-Normalrelease-Postannouncements"><span style="line-height:
1.5625;">Post announcements</span></h3><p>We leave this as the last step, once
the artifacts have had time to sync up on the mirrors. Target it to:
<code>[email protected]</code> and <code>[email protected]</code>, samples
are available at <a shape="rect" href="sample-announcements.html">Sample
announcements</a> page</p></div>
</div>
Modified: websites/production/struts/content/release/2.3.x/docs/file-upload.html
==============================================================================
--- websites/production/struts/content/release/2.3.x/docs/file-upload.html
(original)
+++ websites/production/struts/content/release/2.3.x/docs/file-upload.html Fri
Nov 14 07:43:54 2014
@@ -139,11 +139,11 @@ under the License.
<div class="pagecontent">
<div class="wiki-content">
<div id="ConfluenceContent"><p>The Struts 2 framework provides
built-in support for processing file uploads that conform to <a shape="rect"
class="external-link" href="http://www.ietf.org/rfc/rfc1867.txt"
rel="nofollow">RFC 1867</a>, "Form-based File Upload in HTML". When correctly
configured the framework will pass uploaded file(s) into your Action class.
Support for individual and multiple file uploads are provided. When a file is
uploaded it will typically be stored in a temporary directory. Uploaded files
should be processed or moved by your Action class to ensure the data is not
lost. Be aware that servers may have a security policy in place that prohibits
you from writing to directories other than the temporary directory and the
directories that belong to your web application.</p><p><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1406303008504 {padding: 0px;}
-div.rbtoc1406303008504 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1406303008504 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1411292312450 {padding: 0px;}
+div.rbtoc1411292312450 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1411292312450 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1406303008504">
+/*]]>*/</style></p><div class="toc-macro rbtoc1411292312450">
<ul class="toc-indentation"><li><a shape="rect"
href="#FileUpload-Dependencies">Dependencies</a></li><li><a shape="rect"
href="#FileUpload-BasicUsage">Basic Usage</a></li><li><a shape="rect"
href="#FileUpload-UploadingMultipleFiles">Uploading Multiple Files</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#FileUpload-UploadingMultipleFilesusingArrays">Uploading Multiple Files
using Arrays</a></li><li><a shape="rect"
href="#FileUpload-UploadingMultipleFilesusingLists">Uploading Multiple Files
using Lists</a></li></ul>
</li><li><a shape="rect" href="#FileUpload-AdvancedConfiguration">Advanced
Configuration</a>