This is an automated email from the ASF dual-hosted git repository.
git-site-role pushed a commit to branch asf-staging
in repository https://gitbox.apache.org/repos/asf/struts-site.git
The following commit(s) were added to refs/heads/asf-staging by this push:
new 82b595e98 Updates stage by Jenkins
82b595e98 is described below
commit 82b595e9844f8df27f8ca7b8eda67c1c7b637f04
Author: jenkins <[email protected]>
AuthorDate: Wed Aug 16 11:27:17 2023 +0000
Updates stage by Jenkins
---
...essing-application-session-request-objects.html | 53 ++++++++++++----------
1 file changed, 29 insertions(+), 24 deletions(-)
diff --git
a/content/core-developers/accessing-application-session-request-objects.html
b/content/core-developers/accessing-application-session-request-objects.html
index b2a408adc..19aab608e 100644
--- a/content/core-developers/accessing-application-session-request-objects.html
+++ b/content/core-developers/accessing-application-session-request-objects.html
@@ -133,44 +133,49 @@
<h1 id="accessing-application-session-request-objects">Accessing
application, session, request objects</h1>
-<p><strong>DEPRECATED???</strong></p>
-
<p>The framework provides several access helpers to access Session,
Application, Request scopes.</p>
<h2 id="accessing-from-java">Accessing from Java</h2>
-<p>All the JEE scope attribute maps can be accessed via <code
class="language-plaintext highlighter-rouge">ActionContext</code>.</p>
-
-<p><strong>Accessing servlet scopes</strong></p>
-
-<div class="language-java highlighter-rouge"><div class="highlight"><pre
class="highlight"><code><span class="nc">Map</span> <span class="n">attr</span>
<span class="o">=</span> <span class="o">(</span><span
class="nc">Map</span><span class="o">)</span> <span
class="nc">ActionContext</span><span class="o">.</span><span
class="na">getContext</span><span class="o">().</span><span
class="na">get</span><span class="o">(</span><span class="s">"attr"</span><span
class="o">);</span>
-<span class="n">attr</span><span class="o">.</span><span
class="na">put</span><span class="o">(</span><span class="s">"myId"</span><span
class="o">,</span> <span class="n">myProp</span><span class="o">);</span>
<span class="c1">// Page scope.</span>
+<p>The best way to access Request, Session or Application scope is to use one
of the following interfaces:</p>
+<ul>
+ <li><code class="language-plaintext
highlighter-rouge">ServletRequestAware</code> - to access Request scope</li>
+ <li><code class="language-plaintext
highlighter-rouge">ServletResponseAware</code> - to access Response scope</li>
+ <li><code class="language-plaintext highlighter-rouge">SessionAware</code> -
to access Session scope</li>
+ <li><code class="language-plaintext
highlighter-rouge">ApplicationAware</code> - to access Application scope</li>
+</ul>
-<span class="nc">Map</span> <span class="n">application</span> <span
class="o">=</span> <span class="o">(</span><span class="nc">Map</span><span
class="o">)</span> <span class="nc">ActionContext</span><span
class="o">.</span><span class="na">getContext</span><span
class="o">().</span><span class="na">get</span><span class="o">(</span><span
class="s">"application"</span><span class="o">);</span>
-<span class="n">application</span><span class="o">.</span><span
class="na">put</span><span class="o">(</span><span class="s">"myId"</span><span
class="o">,</span> <span class="n">myProp</span><span class="o">);</span>
+<p>Example usage of the interfaces:</p>
-<span class="nc">Map</span> <span class="n">session</span> <span
class="o">=</span> <span class="o">(</span><span class="nc">Map</span><span
class="o">)</span> <span class="nc">ActionContext</span><span
class="o">.</span><span class="na">getContext</span><span
class="o">().</span><span class="na">get</span><span class="o">(</span><span
class="s">"session"</span><span class="o">);</span>
-<span class="n">session</span><span class="o">.</span><span
class="na">put</span><span class="o">(</span><span class="s">"myId"</span><span
class="o">,</span> <span class="n">myProp</span><span class="o">);</span>
+<div class="language-java highlighter-rouge"><div class="highlight"><pre
class="highlight"><code><span class="kd">public</span> <span
class="kd">class</span> <span class="nc">MyAction</span> <span
class="kd">implements</span> <span class="nc">ApplicationAware</span> <span
class="o">{</span>
+
+ <span class="kd">private</span> <span class="nc">Map</span><span
class="o"><</span><span class="nc">String</span><span class="o">,</span>
<span class="nc">Object</span><span class="o">></span> <span
class="n">application</span><span class="o">;</span>
-<span class="nc">Map</span> <span class="n">request</span> <span
class="o">=</span> <span class="o">(</span><span class="nc">Map</span><span
class="o">)</span> <span class="nc">ActionContext</span><span
class="o">.</span><span class="na">getContext</span><span
class="o">().</span><span class="na">get</span><span class="o">(</span><span
class="s">"request"</span><span class="o">);</span>
-<span class="n">request</span><span class="o">.</span><span
class="na">put</span><span class="o">(</span><span class="s">"myId"</span><span
class="o">,</span> <span class="n">myProp</span><span class="o">);</span>
+ <span class="kd">public</span> <span class="kt">void</span> <span
class="nf">withApplication</span><span class="o">(</span><span
class="nc">Map</span><span class="o"><</span><span
class="nc">String</span><span class="o">,</span> <span
class="nc">Object</span><span class="o">></span> <span
class="n">application</span><span class="o">)</span> <span class="o">{</span>
+ <span class="k">this</span><span class="o">.</span><span
class="na">application</span> <span class="o">=</span> <span
class="n">application</span><span class="o">;</span>
+ <span class="o">}</span>
+
+ <span class="kd">public</span> <span class="nc">String</span> <span
class="nf">execute</span><span class="o">()</span> <span class="o">{</span>
+ <span class="n">application</span><span class="o">.</span><span
class="na">set</span><span class="o">(</span><span
class="s">"myKey"</span><span class="o">,</span> <span
class="s">"myValue"</span><span class="o">);</span>
+ <span class="o">...</span>
+ <span class="k">return</span> <span class="s">"success"</span><span
class="o">;</span>
+ <span class="o">}</span>
+
+<span class="o">}</span>
</code></pre></div></div>
-<blockquote>
- <p>Do not use <code class="language-plaintext
highlighter-rouge">ActionContext.getContext()</code> in the constructor of your
Action class. The values may not be set up, and
-the call may return null for getSession().</p>
-</blockquote>
+<p>Implementing <code class="language-plaintext
highlighter-rouge">ServletRequestAware</code> or <code
class="language-plaintext highlighter-rouge">ServletResponseAware</code> will
tie your actions to Servlet objects. Yet using these
+interfaces and <code class="language-plaintext
highlighter-rouge">SessionAware</code> or <code class="language-plaintext
highlighter-rouge">ApplicationAware</code> combined with the <code
class="language-plaintext highlighter-rouge">servletConfig</code> interceptor,
is the best way
+to access these scopes.</p>
-<p>We can also access the <code class="language-plaintext
highlighter-rouge">HttpServletRequest</code> and <code
class="language-plaintext highlighter-rouge">HttpServletResponse</code> objects
themselves through <code class="language-plaintext
highlighter-rouge">ServletActionContext</code>.
-In general this isn’t recommended as it will tie our action to the servlet
specification.</p>
+<h3 id="avoid-using-actioncontext">Avoid using ActionContext</h3>
-<p><strong>Setting session attribute through session object</strong></p>
+<p>Using <code class="language-plaintext
highlighter-rouge">ActionContext</code> directly is a bad practice and should
be avoided, instead of using</p>
-<div class="language-java highlighter-rouge"><div class="highlight"><pre
class="highlight"><code><span class="nc">ServletActionContext</span><span
class="o">.</span><span class="na">getRequest</span><span
class="o">().</span><span class="na">getSession</span><span
class="o">().</span><span class="na">put</span><span class="o">(</span><span
class="s">"myId"</span><span class="o">,</span> <span
class="n">myProp</span><span class="o">);</span>
+<div class="language-java highlighter-rouge"><div class="highlight"><pre
class="highlight"><code><span class="nc">ActionContext</span><span
class="o">.</span><span class="na">getContext</span><span
class="o">().</span><span class="na">getSession</span><span
class="o">().</span><span class="na">put</span><span class="o">(</span><span
class="s">"myAttribute"</span><span class="o">,</span> <span
class="s">"myValue"</span><span class="o">);</span>
</code></pre></div></div>
-<p>Implementing <code class="language-plaintext
highlighter-rouge">ServletRequestAware</code> or <code
class="language-plaintext highlighter-rouge">ServletResponseAware</code>,
combined with the <code class="language-plaintext
highlighter-rouge">servletConfig</code> interceptor,
-is an alternative way to access the request and response objects, with the
same caveat.</p>
+<p>use one of the <code class="language-plaintext
highlighter-rouge">*Aware</code> interfaces above.</p>
<h2 id="accessing-from-the-view-jsp-freemarker-etc">Accessing from the view
(JSP, FreeMarker, etc.)</h2>