在Struts
里
如果需要在Action中使用session
可以通过下面两种方式得到
通过ActionContext class中的方法getSession得到
Action实现orgapachestrutsinterceptorSessionAware接口的方式来对session进行操作
下面先看一个采用第一种方式在action中得到session的例子
package sexaction;
import javautilMap;
import comopensymphonyxworkActionContext;
import comopensymphonyxworkActionSupport;
public class SessionTestAction extends ActionSupport {
public String execute() {
ActionContext actionContext = ActionContextgetContext()
Map session = actionContextgetSession()
sessionput(USER_NAME Test User)
return SUCCESS;
}
}
在这个例子中通过ActionContext得到session并往session里放置一个key为USER_NAME值为Test User的内容
下面是一个实现orgapachestrutsinterceptorSessionAware接口来对session操作的例子
package sexaction;
import javautilMap;
import orgapachestrutsinterceptorSessionAware;
import comopensymphonyxworkActionSupport;
public class SessionTestAction extends ActionSupport implements SessionAware {
private Map session;
public void setSession(Map session) {
thissession = session;
}
public String execute() {
thissessionput(USER_NAME Test User )
return SUCCESS;
}
}
在这个例子中实现了接口SessionAware中的setSession方法
上面两种方式都可以得到session能实现的功能都是一样的
这里推荐通过第二种方式来使用session原因是便于做单体测试用第二种方式只需要构造一个Map就可以对action class进行单体测试了
在一个项目中可能会有很多action都需要用到session如果每个action都来实现 orgapachestrutsinterceptorSessionAware这个接口可能会显得比较麻烦所以建议作一个抽象的 BaseAction类来实现orgapachestrutsinterceptorSessionAware接口以后所有的action只要继承这个BaseAction就可以了
下面是一个如何在JSP中使用session的例子
<%@ page contentType=text/html; charset=UTF %>
<%@page pageEncoding=utf %>
<%@taglib prefix=s uri=/strutstags %>
<html>
<head>
<title>Session Test</title>
</head>
<body>
<h><s:property value=#sessionUSER_NAME/></h>
</body>
</html>
一般在项目中往往会往session里放置一个Object必如说useruser里有个boolean admin和String userName如果user里存在isAdmin的方法在jsp中可以通过<s:if test=#sessionuseradmin>来判断用户有没有管理权限通过<s:property value=#sessionuseruserName>或者来取得用户名