java菜鸟一枚,问一个问题
一个管理系统 , 使用spring mvc 3.2
先描述一下我想实现的目标:
我想有一个类Member , 实现获取当前用户的SESSION , 调用方式想类似这样
1.new一个Member实例
Member m = new Member();
m.getId();
//或
m.id;
2.不用new , 直接获取
Member.getId();
//或
Member.id;
最早我这样写
public class Member {
@Autowired
HttpSession session;
public String getId() {
return session.getAttribute("emp_id") != null ? session.getAttribute("emp_id").toString() : "";
}
private String id;
}
其中@Autowired是根据 http://blog.csdn.net/yousite1/article/details/7108585 设置的 可是我在使用的时候
Member m = new Member();
String id = m.getId();
会报错 java.lang.NullPointerException 同时输出 session 为 null
后面我又改了一下 , 同样参考上面那个文章
public class Member {
public String getId() {
HttpServletRequest session = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getSession();
return session.getAttribute("emp_id") != null ? session.getAttribute("emp_id").toString() : "";
}
private String id;
}
这样是能获取SESSION了...
我想知道
1.能不能实现 , 不使用 getId() , 直接使用 id 获取值?
Member m = new Member();
String id = m.id; //如果id为public
2.能不能实现静态变量获取SESSION值呢?
恩 , 比如我在C#下这么些
public class Member {
private static String _id;
public static String id{
get { return (String)HttpContext.Current.Session["emp_id"];}
set { Member.id = value; }
}
}
String id = Member.id;
3.为什么使用注解@Autowired, 获取不到session值呢?
因为如果按我第二种写法, 每一字段都需要加获取sesssion的方法
如果有id , name , code ....需要写好多
有没有办法实现在一个地方写一次 , 其他地方直接获取?
4.第二种写法,我会在每个需要用到session的地方都加一个 , 而这个我是每个control中必须要用到的
Member m = new Member();
//然后再使用 m.getId()
所以,能不能实现在页面进入到controller前,能有个地方设置一个全局变量 , 然后我直接在controller中使用呢,比如 m.getId() , m为已经设置过的全局变量
其实我上面第二个问题中用static就是想实现这样 , 图省事
恩,知识太浅,很多地方都不知道如何实现,或者能不能那样实现...
求助大家,谢谢...
我也觉得楼主这样写有点乱,Member应该算Model层的代码吧,怎么能直接和session打交道,这个工作应该交给controller层吧。而且你说你想使用static字段来存储在session中,问题是一个tomcat容器里(假设你不是用cluster)应该只有一个static字段的实例(如果我没有猜错一个tomcat应该对一个JVM),你让每个连接的用户对应的所有session怎么去共享这个字段。一般的写法都不是像楼主这么写的。