本文的拦截器部分是好的,但是session部分不对,这里有两个对的:
http://blog.youkuaiyun.com/weiyanghuadi/article/details/8931820
http://blog.youkuaiyun.com/weiyanghuadi/article/details/9050245
本文把拦截器和sessionAware写在一起了,本来觉得DummyAction类简单,让它实现了一个sessionAware借口,想看看struts2中的session,
无奈太简单了,以至于框架总是无法生成session对象。框架不给注入,我只好自己new一个Map,当然不起作用!
如果没有客户端请求,这里指提交表单,表单中的文本域要对应action中的属性,那么struts2控制器就不会产生Map对象.我按这个思路改,还是空空空!I am really breaking my head to get session object in my action class。When I get the session map using sessionaware interface, I get an empty map.
我是想:通过actionInvocation.getInvocationContext().getSession();获得struts2的session
package org.arpit.javapostsForLearning;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.*;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
public class DummyAction extends ActionSupport implements SessionAware {
private Map session2;
private String justForHavingMapObject;
public String execute()
{
System.out.println(" In Action");
System.out.println(getJustForHavingMapObject());
//如果下面直接用session.put,则有null exception
//setSession(Map session);
//this.session.put("kankan","liusir");
NiMaNull();
return SUCCESS;
}
//public Map getSession(){
//session=actionInvocation.getInvocationContext().getSession();
//return session;
// }
public void NiMaNull(){
//session.get("kanak");
//session.put("kankan","liusir");
System.out.println(getJustForHavingMapObject());
session2=new HashMap();
session2.put("kankan","liusir");
}
public void setSession(Map session3) {
this.session2 = session3;
//System.out.println(this.session.get("JSESSIONID"));
System.out.println("who use setSession");
}
public String getJustForHavingMapObject() {
return justForHavingMapObject;
}
public void setJustForHavingMapObject(String justForHavingMapObject) {
System.out.println("inside setJustFor");
this.justForHavingMapObject = justForHavingMapObject;
}
}
package org.arpit.javapostsForLearning;
import java.util.Map;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class FirstInterceptor implements Interceptor {
@Override
public void destroy() {
}
@Override
public void init() {
}
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
String startInterceptor = " Start Interceptor 1";
System.out.println(startInterceptor);
/*
* Map session = actionInvocation.getInvocationContext().getSession();
* String temp=(String)session.get("kankan"); System.out.println(temp);
*/
String result = actionInvocation.invoke();
Map session = actionInvocation.getInvocationContext().getSession();
if (session == null) {
System.out.println("no fucking session");
} else {
System.out.println("yes session");
}
String temp = (String) session.get("kankan");
System.out.println(temp);
String endInterceptor = " End Interceptor 1";
System.out.println(endInterceptor);
return result;
}
}
<body>
<s:form action="Dummy">
<s:textfield name="justForHavingMapObject"
label="justForHavingMapObject" />
<s:submit value="For calling Dummy Action" align="center" />
</s:form>
</body>
<package name="default" extends="struts-default" namespace="/">
<interceptors>
<interceptor name="firstInterceptor"
class="org.arpit.javapostsForLearning.FirstInterceptor" />
<interceptor name="secondInterceptor"
class="org.arpit.javapostsForLearning.SecondInterceptor" />
</interceptors>
<action name="Dummy" class="org.arpit.javapostsForLearning.DummyAction">
<interceptor-ref name="firstInterceptor"/>
<interceptor-ref name="secondInterceptor"/>
<result name="success">Welcome.jsp</result>
<result name="input">login.jsp</result>
</action>
</package>
原文:http://javapostsforlearning.blogspot.com/2012/07/struts-2-interceptors-with-example.html
源代码:http://pan.baidu.com/share/link?shareid=3673532014&uk=3878681452