Fork me on GitHub
Edit on GitHub << back to Core Developers Guide

Accessing application, session, request objects

The framework provides several access helpers to access Request, Session, Application scopes. See Servlet Config Interceptor page to find all the supported interfaces.

Accessing from Java

The best way to access Request, Session or Application scope is to use one of the following interfaces:

Example usage of the interfaces:

public class MyAction implements ApplicationAware {
 
    private Map<String, Object> application;

    public void withApplication(Map<String, Object> application) {
        this.application = application;
    }
    
    public String execute() {
        application.set("myKey", "myValue");
        ...
        return "success";
    }
    
}

Implementing ServletRequestAware or ServletResponseAware will tie your actions to Servlet objects. Yet using these interfaces and SessionAware or ApplicationAware combined with the servletConfig interceptor, is the best way to access these scopes.

Avoid using ActionContext

Using ActionContext directly is a bad practice and should be avoided, instead of using

ActionContext.getContext().getSession().put("myAttribute", "myValue");

use one of the *Aware interfaces above.

Accessing from the view (JSP, FreeMarker, etc.)

Request and session attributes are accessed via OGNL using the #session and #request stack values. Page attributes are accessed via OGNL using the #attr stack value, and Application attributes via the #application stack value.

The #attr stack value will search the javax.servlet.jsp.PageContext for the specified key. If the PageContext doesn’t exist, it will search the request, session and application scopes, in that order.

Accessing attributes in the Application, Session, Request or Page scope from a JSP

Retrieve the attribute (property), with key myId, from the specified scope:

<s:property value="#application.myId" />

<s:property value="#session.myId" />

<s:property value="#request.myId" />

<s:property value="#attr.myId" />

Note: #attr is for Page scope attributes first, but will search the remaining scopes, in order, seeking a match. In opposite using just # means you want to fetch a value from the top of the ValueStack without searching down the stack.