0 0

Spring MVC获取session的问题5

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就是想实现这样 , 图省事 


恩,知识太浅,很多地方都不知道如何实现,或者能不能那样实现... 
2013年4月27日 13:12

3个答案 按时间排序 按投票排序

2 0


1.能不能实现 , 不使用 getId() , 直接使用 id 获取值?  最好不要 这样失去了封装的好处

2.能不能实现静态变量获取SESSION值呢? 
需要你自己去实现ThreadLocal

3.为什么使用注解@Autowired, 获取不到session值呢? 
因为你是new的 不是spring容器创建的 所以不行

4.第二种写法,我会在每个需要用到session的地方都加一个 , 而这个我是每个control中必须要用到的 
4.1、直接在控制器的方法上传入 HttpSession即可
4.2、在控制器上使用
public abstract class UserController {
    @Autowired
    public HttpSession session;

如何实现注入的呢? 其实也是使用RequestContextHolder
private static class SessionObjectFactory implements ObjectFactory<HttpSession>, Serializable {

public HttpSession getObject() {
return currentRequestAttributes().getRequest().getSession();
}

@Override
public String toString() {
return "Current HttpSession";
}
}

此时必须把你的Controller 的scope设置为:
原型、request、session之一 不能是单例

可以绑定的数据
http://jinnianshilongnian.iteye.com/blog/1698916

2013年4月27日 13:52
1 0

1.使用 Autowired 需要在spring中配置    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
2.静态变量是全局的,java虚拟机中只存一份,多用户的时候就乱套了
3.id为public是可以用m.id直接使用的,
4.你可以写个control,继承spring的control,把代码放到里面,所有的业务control都继承这个control

2013年4月27日 13:47
0 0

静态方法:
public class Member { 
    public static String getId() { 
    HttpServletRequest session = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getSession(); 
    return session.getAttribute("emp_id") != null ? session.getAttribute("emp_id").toString() : ""; 
    } 
    private String id; 

2013年4月27日 13:41

相关推荐

    spring集成redis,spring mvc实现session共享以及redis排行榜.zip

    spring集成redis,spring mvc实现session共享以及redis排行榜春季会议Redis这一系列项目,将会有多个spring相关的简单的例子,包括session-with-redis、spring整合redis等1、在springmvc项目session存储到redis中...

    Spring MVC jar包

    这表明我们不仅得到了Spring MVC的相关资源,还获得了Hibernate 3.6.8版本的资料,这是一个流行的Java对象关系映射(ORM)框架,用于简化数据库操作。 1. **Spring MVC**: - **基本概念**:Spring MVC提供了一个...

    spring MVC No Session found for current thread

    当我们在Controller方法中尝试获取session时,如果当前请求没有与之关联的session,Spring MVC就会抛出“No Session found for current thread”的异常。 1. **配置问题**: - **DispatcherServlet配置**:确保你...

    Spring MVC 中获取session的几种方法(小结)

    Spring MVC 中获取 Session 的几种方法 在 Spring MVC 中,获取 Session 是一个常见的操作,但是获取 Session 的方法却有很多种。下面我们将介绍五种获取 Session 的方法,每种方法都有其特点和使用场景。 第一种...

    Spring mvc 分步式session的实例详解

    Spring mvc 分步式session的实例详解 Session代表服务器与浏览器的一次会话过程,它的信息是保存在服务器端的。在Servlet中,session指的是HttpSession类的对象。服务器在创建session后,会把sessionid以cookie的...

    Spring MVC简单例子

    Spring MVC提供了`@RequestParam`注解来获取请求参数。 5. **数据持久层整合Hibernate3**:使用Hibernate3作为ORM(对象关系映射)工具,简化数据库操作。这可能涉及到实体类、配置文件、SessionFactory的创建,...

    Spring MVC框架简介和使用

    ### Spring MVC框架简介 Spring MVC 是一款基于 Java 的 Web 应用框架,它遵循 MVC(Model-View-Controller)设计模式。Spring MVC 提供了一种结构化的开发方式,旨在简化 Web 层的开发过程,同时提供了高度灵活性...

    最简单的用户登录与注册系统 spring mvc spring jdbc

    Spring MVC是Spring框架的一个模块,主要用于构建Web应用程序,而Spring JDBC则是Spring提供的用于简化数据库操作的工具。 【描述】"用spring4.0.5版本开发的,spring mvc,spring jdbc,最简单的用户登录,注册和...

    spring mvc login demo

    Spring MVC 是一个强大的Java web开发框架,用于构建可维护、高性能和灵活的Web应用程序。这个"spring mvc login demo"项目旨在提供一个基础的登录功能示例,帮助开发者理解如何在Spring MVC环境中实现用户身份验证...

    spring mvc + spring + hibernate 全注解整合开发视频教程 12

    在本教程中,我们将深入探讨如何使用Spring MVC、Spring和Hibernate三大框架进行全注解的整合开发。这个视频教程系列的第12部分,将帮助开发者掌握如何在Java Web项目中高效地集成这三个核心框架,实现松耦合、可...

    Spring mvc+hibernate+mysql Demo

    【Spring MVC + Hibernate + MySQL 整合详解】 在IT领域,Spring MVC、Hibernate和MySQL是构建Web应用程序的常用技术栈。Spring MVC作为Spring框架的一部分,提供了强大的MVC(Model-View-Controller)架构,用于...

    bbs.zip_Spring mvc bbs_hibernate bbs_spring mvc_spring mvc hiber

    《Spring MVC + Hibernate 实现BBS论坛系统详解》 在当今的互联网开发中,Spring MVC 和 Hibernate 是两个非常重要的框架,它们在企业级应用开发中起着关键作用。本项目"Spring MVC bbs"结合了Spring3和Hibernate,...

    spring mvc项目

    可用于分析spring mvc源码、spring mvc父子容器初始化流程、session和cookie机制、spring session等,也可以用于学习Java Web(servlet、filter、listener等)、spring源码等。 该项目使用servlet3.0规范,无web.xml...

    Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)所有实验及实验报告.zip

    本教程专注于使用Spring、Spring MVC和MyBatis这三个关键组件进行实战教学。这三者构成了Java EE开发中的重要支柱,为开发者提供了强大的功能和灵活性。 Spring框架是Java EE开发的核心,它是一个全功能的容器,...

    基于jpa+hibernate+spring+spring mvc注解方式项目

    **基于JPA+Hibernate+Spring+Spring MVC注解方式项目详解** 在现代Java Web开发中,Spring框架扮演了核心角色,而Spring MVC作为其MVC(Model-View-Controller)实现,提供了强大的Web应用程序构建能力。同时,JPA...

    spring mvc+spring+hibernaate+bootstrap+maven通用后台部门员工管理系统.zip

    这是一个基于Java技术栈的通用后台管理系统,主要使用了Spring MVC、Spring、Hibernate、Bootstrap和Maven等技术。这些技术在IT行业中广泛应用于企业级Web应用开发,构建高效、可维护的系统。下面将分别详细解释这些...

    Spring MVC Locale 的使用 中文 英文 等语言 切换

    在Spring MVC框架中,`Locale`是用来处理应用程序中的多语言支持的关键组件。它定义了用户的语言和地区设置,例如中文(zh_CN)或英文(en_US)。这篇博客文章将深入探讨如何在Spring MVC应用中实现语言切换功能,以...

    spring mvc,spring,hibernate框架开发

    Spring MVC、Spring 和 Hibernate 是 Java 开发中三个非常重要的框架,它们共同构成了企业级应用的基石,尤其是在构建大型、复杂的Web应用程序时。Spring MVC 作为Spring框架的一部分,负责处理HTTP请求,提供MVC...

    Servlet JSP Spring MVC初学指南(alin书签).pdf

    Servlet、JSP和Spring MVC是Java Web开发中的三个重要技术,它们在构建动态网页和企业级应用程序中扮演着核心角色。下面将详细解释这三个技术及其相互关系。 **Servlet** 是Java编程语言中的一种接口,由Java ...

    基于Spring Mvc的JavaWeb项目

    在本项目中,我们探讨的是一个基于Spring MVC框架构建的JavaWeb应用。Spring MVC是Spring框架的一个模块,专为创建Web应用程序提供模型-视图-控制器(MVC)架构支持。这个项目涉及到的功能包括分页显示、单个或批量...

Global site tag (gtag.js) - Google Analytics