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;
    }
View Code

biz中:

public User Login(User user) {
        List<User> list = userdao.Search(user);
        if(list==null) return null;
        user = (User)list.get(0);
        return user;
    }
View Code

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;
    }
View Code

 

其中涉及到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的,不然子类继承不了,这一点感觉不太好。。

posted @ 2015-09-16 14:38  -.-|  阅读(779)  评论(0编辑  收藏  举报