-
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个答案 按时间排序 按投票排序
-
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/16989162013年4月27日 13:52
-
1.使用 Autowired 需要在spring中配置 <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
2.静态变量是全局的,java虚拟机中只存一份,多用户的时候就乱套了
3.id为public是可以用m.id直接使用的,
4.你可以写个control,继承spring的control,把代码放到里面,所有的业务control都继承这个control2013年4月27日 13:47
-
静态方法:
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排行榜春季会议Redis这一系列项目,将会有多个spring相关的简单的例子,包括session-with-redis、spring整合redis等1、在springmvc项目session存储到redis中...
这表明我们不仅得到了Spring MVC的相关资源,还获得了Hibernate 3.6.8版本的资料,这是一个流行的Java对象关系映射(ORM)框架,用于简化数据库操作。 1. **Spring MVC**: - **基本概念**:Spring MVC提供了一个...
当我们在Controller方法中尝试获取session时,如果当前请求没有与之关联的session,Spring MVC就会抛出“No Session found for current thread”的异常。 1. **配置问题**: - **DispatcherServlet配置**:确保你...
Spring MVC 中获取 Session 的几种方法 在 Spring MVC 中,获取 Session 是一个常见的操作,但是获取 Session 的方法却有很多种。下面我们将介绍五种获取 Session 的方法,每种方法都有其特点和使用场景。 第一种...
Spring mvc 分步式session的实例详解 Session代表服务器与浏览器的一次会话过程,它的信息是保存在服务器端的。在Servlet中,session指的是HttpSession类的对象。服务器在创建session后,会把sessionid以cookie的...
Spring MVC提供了`@RequestParam`注解来获取请求参数。 5. **数据持久层整合Hibernate3**:使用Hibernate3作为ORM(对象关系映射)工具,简化数据库操作。这可能涉及到实体类、配置文件、SessionFactory的创建,...
### Spring MVC框架简介 Spring MVC 是一款基于 Java 的 Web 应用框架,它遵循 MVC(Model-View-Controller)设计模式。Spring MVC 提供了一种结构化的开发方式,旨在简化 Web 层的开发过程,同时提供了高度灵活性...
Spring MVC是Spring框架的一个模块,主要用于构建Web应用程序,而Spring JDBC则是Spring提供的用于简化数据库操作的工具。 【描述】"用spring4.0.5版本开发的,spring mvc,spring jdbc,最简单的用户登录,注册和...
Spring MVC 是一个强大的Java web开发框架,用于构建可维护、高性能和灵活的Web应用程序。这个"spring mvc login demo"项目旨在提供一个基础的登录功能示例,帮助开发者理解如何在Spring MVC环境中实现用户身份验证...
在本教程中,我们将深入探讨如何使用Spring MVC、Spring和Hibernate三大框架进行全注解的整合开发。这个视频教程系列的第12部分,将帮助开发者掌握如何在Java Web项目中高效地集成这三个核心框架,实现松耦合、可...
【Spring MVC + Hibernate + MySQL 整合详解】 在IT领域,Spring MVC、Hibernate和MySQL是构建Web应用程序的常用技术栈。Spring MVC作为Spring框架的一部分,提供了强大的MVC(Model-View-Controller)架构,用于...
《Spring MVC + Hibernate 实现BBS论坛系统详解》 在当今的互联网开发中,Spring MVC 和 Hibernate 是两个非常重要的框架,它们在企业级应用开发中起着关键作用。本项目"Spring MVC bbs"结合了Spring3和Hibernate,...
可用于分析spring mvc源码、spring mvc父子容器初始化流程、session和cookie机制、spring session等,也可以用于学习Java Web(servlet、filter、listener等)、spring源码等。 该项目使用servlet3.0规范,无web.xml...
本教程专注于使用Spring、Spring MVC和MyBatis这三个关键组件进行实战教学。这三者构成了Java EE开发中的重要支柱,为开发者提供了强大的功能和灵活性。 Spring框架是Java EE开发的核心,它是一个全功能的容器,...
**基于JPA+Hibernate+Spring+Spring MVC注解方式项目详解** 在现代Java Web开发中,Spring框架扮演了核心角色,而Spring MVC作为其MVC(Model-View-Controller)实现,提供了强大的Web应用程序构建能力。同时,JPA...
这是一个基于Java技术栈的通用后台管理系统,主要使用了Spring MVC、Spring、Hibernate、Bootstrap和Maven等技术。这些技术在IT行业中广泛应用于企业级Web应用开发,构建高效、可维护的系统。下面将分别详细解释这些...
在Spring MVC框架中,`Locale`是用来处理应用程序中的多语言支持的关键组件。它定义了用户的语言和地区设置,例如中文(zh_CN)或英文(en_US)。这篇博客文章将深入探讨如何在Spring MVC应用中实现语言切换功能,以...
Spring MVC、Spring 和 Hibernate 是 Java 开发中三个非常重要的框架,它们共同构成了企业级应用的基石,尤其是在构建大型、复杂的Web应用程序时。Spring MVC 作为Spring框架的一部分,负责处理HTTP请求,提供MVC...
Servlet、JSP和Spring MVC是Java Web开发中的三个重要技术,它们在构建动态网页和企业级应用程序中扮演着核心角色。下面将详细解释这三个技术及其相互关系。 **Servlet** 是Java编程语言中的一种接口,由Java ...
在本项目中,我们探讨的是一个基于Spring MVC框架构建的JavaWeb应用。Spring MVC是Spring框架的一个模块,专为创建Web应用程序提供模型-视图-控制器(MVC)架构支持。这个项目涉及到的功能包括分页显示、单个或批量...