Newsletter |
Example on Struts 2 SessionAware Interface
Let us see concept behind this SessionAware interface in struts 2.x, we need to implement our Action class from SessionAware interface in order to get HTTP Session behavior into our Action class.
If we implement from SessionAware interface we need to override the method setSession() by SessionAware in our action class. If we implement our action class from SessionAware interface then struts 2 controller doesn’t inject exactly session object, but it will injects a Map object with similar behavior.
For each Action class or a jsp visited by the same client, the controller injects the same map object, the controller creates a new map object for each client, it means one map object per session ( browser )
No. of clients = No. of map objects created by controller
Example on struts 2 SessionAware
files we used…
- index.jsp
- success.jsp
- success1.jsp
- LogingEx.java [ in java4s package ]
- NextActions.java [ in java4s package ]
- web.xml [ in web-inf ]
- struts.xml [ in web-inf/classes folder ]
Directory Structure
index.jsp
<%@ taglib prefix="s" uri="/struts-tags" %> <html> <body> <s:form action="verify"> <s:textfield name="stuname" label="Enter Username" /><br> <s:textfield name="stuage" label="Enter Age" /><br> <s:textfield name="stumarks" label="Enter Marks" /><br> <s:textfield name="country" label="Enter Country" /><br> <s:submit value="Click" align="center" /> </s:form> </body> </html>
success.jsp
<%@ taglib prefix="s" uri="/struts-tags" %> <s:form action="next"> Name:<s:property value="#session.a" /><br> Age:<s:property value="#session.b" /> <s:submit value="next" /> </s:form>
success1.jsp
<%@ taglib prefix="s" uri="/struts-tags" %> Marks:<s:property value="#session.c" /><br> Country:<s:property value="#session.d" />
LogingEx.java
package java4s; import java.util.Map; import org.apache.struts2.interceptor.SessionAware; import com.opensymphony.xwork2.ActionSupport; public class LogingEx extends ActionSupport implements SessionAware{ private static final long serialVersionUID = 1L; private String stuname,stuage,country; private int stumarks; Map m; public String getStuname() { return stuname; } public void setStuname(String stuname) { this.stuname = stuname; } public String getStuage() { return stuage; } public void setStuage(String stuage) { this.stuage = stuage; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public int getStumarks() { return stumarks; } public void setStumarks(int stumarks) { this.stumarks = stumarks; } public void setSession(Map m) { this.m=m; } public String execute() { m.put("a",stuname); m.put("b", stuage); m.put("c",stumarks); m.put("d",country); return SUCCESS; } }
NextActions.java
package java4s; import java.util.Map; import org.apache.struts2.interceptor.SessionAware; import com.opensymphony.xwork2.ActionSupport; public class NextActions extends ActionSupport implements SessionAware{ Map m; public void setSession(Map m) { this.m=m; } public String execute() { return SUCCESS; } }
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <include file="struts-default.xml"/> <package name="a" extends="struts-default"> <action name="verify" class="java4s.LogingEx"> <result name="success">/success.jsp</result> </action> <action name="next" class="java4s.NextActions"> <result name="success">/success1.jsp</result> </action> </package> </struts>
After Execution
Output
Output1
You Might Also Like
::. About the Author .:: | ||
Excellent – made access to session information completely clear to developer with NO previous knowledge of struts, JSP
@strutsNewbie
That’s what our actual intention 🙂 Thanks for your feedback on this article.
Hello java4s,
I have a question on concepts Application/ Session aware interface.
You are using the same technique for storing values into the map. But at value retrieval time, you are changing as #session.a or #application.a.
At storing time we are not specifying that we are going to store in session map or application map. We are just specifying map only na. Then how can we differentiate the code as #session.c or #application.c while retrieving?
Hope myself clear.
Thanks
Mohammed Vaseem
@Mohammed Vaseem
All aware interfaces provides Map, but writing #session.a or #application.a in .jsp’s will be depends on the interface we implemented in our action class.
In this current example we have implemented SessionAware interface so we have to write #session.a
hope you are clear.
but if I request directly with following url then its displaying (course empty string like
http://localhost:8080/sessionAware/next.action
Marks:
Country:
but it supposed to redirect to index.jsp, how can we do that ?
I am a student, somebody asked me
how can you handle any junk Url request in struts( if somebody requested for myprofile.jsp, without login even if there is no such myProfile.Jsp file in server…
in such situation how can we handle dummy requested Urls in Struts ?
hi
i want to know that how can i access the session value saved in action context in an action.
How to set session between java and jsp page in struts 2 ??
I just want to know how to invalidate session after user is logged from the application in struts 2.
Please give some example.
Hi,
this is an awesome example…. Kindly give examples on otnl.
I really enjoyed..thanks a lot to java4s..it is very useful to every one and simple site….. fine.
Hi ,
This demo is very useful for me and i hava one more doubt what is the scope of session and can i use this any jsp and java pages?
Hi,
This example is very useful but i have a doubt. Isn’t struts internally storing a session object in map? If so then accordingly a session is one per user and can be accessed in the whole application. So my doubt is in NextActions class why there a neccasity to once again set the session?
Hello java4s, I have an application with struts2 and hibernate. As of now, we have maintained with struts2.0.11 version jars. Now we are upgrading our application with struts2.3.15.1 jars. Everything is okay, After deploying my project into tomcat server, session is invalidating immediately after creating. what may be the reason?
Hi,
If we can achieve the same thing using Application and Session aware interface. Then what is the necessity of using two different interfaces?
Please clarify my doubt.
Thanks in advance.
please do reply..
I’m in TCS, and this site helped me alot to complete my training project. Good Work !! Please Keep it up admin.
Wow what a tutorial ,really nice lol.
hai ,
thanks for your good explanation and code its work.but i have one doubt we take data using session it is access with in browser. this sessionaware also accessing like session ?