Struts2中使用Session
嗯,没错,过了这么长时间我还在做我的注册和登录。
登陆的部分自然是从数据库中查找响应的用户信息,然后把一个user放到session里,
Action中代码如下:
public String Login(){ User user = new User(username,password); user = userbiz.Login(user); if(user != null){ session.put("user", user); return this.SUCCESS; } return this.ERROR; }
biz中:
public User Login(User user) { List<User> list = userdao.Search(user); if(list==null) return null; user = (User)list.get(0); return user; }
dao中:
public List<User> Search(User user) { List<User> list=null; //通过sessionFactory获得Session Session session=sessionFactory.openSession(); //创建Criteria对象 Criteria c=session.createCriteria(User.class); //使用Example工具类创建示例对象 Example example=Example.create(user); //为Criteria对象指定示例对象example作为查询条件 c.add(example); list = c.list(); //执行查询,获得结果 if(list.size()!=0){ return (List<User>)list; } return null; }
其中涉及到session的使用,于是查了下struts2中如何获取session。
有两个方法:
1.通过ActionContext class中的方法getSession得到
2.Action实现org.apache.struts2.interceptor.SessionAware接口的方式来对session进行操作
方法一:
public class SessionTestAction extends ActionSupport { public String execute() { ActionContext actionContext = ActionContext.getContext(); Map session = actionContext.getSession(); session.put("user", user); return SUCCESS; } }
方法二:
public class SessionTest1Action extends ActionSupport implements SessionAware { private Map session; public void setSession(Map session) { this.session = session; } public String execute() { this.session.put("user", user); return SUCCESS; } }
一个项目中有可能有多个Action需要用到session,那么可以写一个抽象类BaseAction,之后的Action只要继承这个类就可以了:
package action; import java.util.Map; import org.apache.struts2.interceptor.SessionAware; import com.opensymphony.xwork2.ActionSupport; abstract class BaseAction extends ActionSupport implements SessionAware { Map session; @Override public void setSession(Map session) { this.session=session; } }
其中session不能是private的,不然子类继承不了,这一点感觉不太好。。