`
squll369
  • 浏览: 108699 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

DAO层和Service层中访问Session

阅读更多

    很多情况下,我们需要在DAO或者Service层拿到Session中的值,比如下面这个应用,session中存放了当前用户的账号,在DAO层中需要insert一条record,这条record需要记录当前用户(该记录是由谁创建的),对于这样的应用,我们一般可以在Action层中通过request拿到session里的用户账号,然后传入service,再传入DAO层,就可以解决了。

    今天,我在这里记录一种方式,利用ThreadLocal来存入sesion,然后可以在任何业务层,DAO层获取Session的方式,首先建立一个CSession来存放session的值,只放了2个属性,用户的账号和姓名

 

public class CSession {
	private String username;
	private String userId;
		
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	
	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
}
 

建立SessionUser类,用来存放在整个运行期CSession的存在

 

public class SessionUser {


	@SuppressWarnings("unchecked")
	static ThreadLocal sessionUser = new ThreadLocal();
	
	@SuppressWarnings("unchecked")
	public static void setSessionUser(CSession cSession) {
		sessionUser.set(cSession);
	}
	
	public static CSession getSessionUser(){
		return (CSession )sessionUser.get();
	}
	
	public static String getSessionUserId(){
		return getSessionUser().getUserId();
	}
	
	public static String getSessionUserName(){
		return getSessionUser().getUsername();
	}
}

 

在登录的Action里,登录成功后,加Session里的用户信息,放入CSession中,

 

HttpSession session = request.getSession(true);
CSession cs = new CSession();
cs.setUserId(userId);
cs.setUsername(userName);
session.setAttribute("C_SESSION",cs);

 

最后,在session check的Filter中,把CSession注入到SessionUser中,

 

public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
		HttpServletRequest hrequest = (HttpServletRequest) request;
		HttpServletResponse hresponse = (HttpServletResponse) response;
		
               .......
		
		CSession cs = (CSession) hrequest.getSession(true).getAttribute("C_SESSION");
		
		SessionUser.setSessionUser(cs);
						
                .......
	}

 

下面我们就可以再DAO层中直接从SessionUser中获取 userid 和 username,

 

xxxTO.setUserId(SessionUser.getSessionUserId());
xxxTO.setUserName(SessionUser.getSessionUserName());
 

页面上,

 

<bean:write name="C_SESSION" property="username"/>
<bean:write name="C_SESSION" property="userId"/>
分享到:
评论

相关推荐

    经典泛型dao层代码,非常好用简易

    然后,利用Spring的依赖注入(DI)特性,可以在Service层或其他组件中轻松注入泛型DAO的实例,从而实现对数据库的操作。 #### 结论 泛型DAO层为SSH框架下的数据访问提供了统一、高效且灵活的解决方案。通过上述...

    hibernate4 通用dao,service

    标题中的“hibernate4 通用dao,service”指的是在Java开发中使用Hibernate框架实现的通用数据访问对象(DAO)和业务服务层(Service)。Hibernate是一个流行的对象关系映射(ORM)工具,它允许开发者使用面向对象的...

    java设计三层架构

    在Java Web开发中,三层架构是一种常见的设计模式,它将应用程序分为表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。这种分层设计有助于提高代码的可读性、...

    JSP,SSH框架学习日志3,DAO层.pdf

    DAO层的主要职责是对数据进行增删查改(CRUD)操作,它封装了对数据库的直接访问,使得业务逻辑层(Service Layer)与数据存储层解耦。在实际开发中,为了提高代码的可复用性和可维护性,通常会采用面向接口编程的...

    (hibernate_10增删改查DAO

    DAO模式是一种用于封装对底层数据访问的模式,它可以隔离业务逻辑层和数据访问层,提高代码的可测试性和可维护性。在Hibernate中,DAO类通常包含以下方法: 1. **保存/插入(Save/Insert)**:`void save(Student ...

    hibenate 对DAO的封装

    DAO是用于访问数据库的一层抽象,它隔离了应用程序和数据存储之间的交互。通过DAO,我们可以隐藏具体的数据库访问细节,比如SQL语句,使代码更加灵活且易于测试。 在Hibernate中,每个实体类通常对应一个DAO接口和...

    springmvc案例源码 session 增删改查 登录案例.zip

    在案例中,你将学习如何配置 MyBatis,定义 Mapper 映射文件,编写 DAO 类,以及如何在 Service 层中调用 DAO 方法进行数据的增删改查操作。 5. **SSM 学习框架**: SSM 是 Spring、SpringMVC 和 MyBatis 三个框架...

    使用Struts+DAO+Hibernate完成用户登录 源代码

    DAO(Data Access Object)是一种设计模式,它提供了一种与数据库交互的抽象层,使得业务逻辑层与数据访问层解耦。在用户登录时,DAO负责与数据库进行交互,比如执行SQL查询来验证用户名和密码。通过DAO,我们可以...

    基于HIbernateTemplate的代码自动生成

    这种技术可以帮助开发者自动创建数据访问对象(DAO)和业务服务层(Service)的代码,从而避免手动编写这些重复性的基础代码。 首先,我们需要理解`HibernateTemplate`。它是Spring对Hibernate提供的一个抽象层,它...

    HibernateDAO的写法

    而HibernateDAO则是基于Hibernate进行数据访问的对象,是业务逻辑层和持久层之间的桥梁。本文将详细探讨HibernateDAO的实现方式以及常见设计模式,旨在帮助开发者更好地理解和运用这一技术。 1. HibernateDAO的基本...

    J2EE之DAO设计模式

    DAO(Data Access Object)设计模式是Java开发中用于数据库访问的一种常见模式,它在J2EE应用程序中扮演着至关重要的角色。DAO模式的主要目的是将业务逻辑层与数据存储层进行解耦,使得代码更加模块化,易于维护和...

    spring 对dao 的操作

    5. **业务层调用**:最后,在业务层Service对象中,通过@Autowired注解注入DAO,然后调用其方法执行数据库操作。 在给出的文件名"yyuu4DAOframework"中,可能包含了相关的DAO实现代码或者配置文件。分析这个文件的...

    struts1.2增删改查分页Filter Session

    Action类处理用户请求,调用业务逻辑层(通常为Service或DAO),对数据进行操作,然后将结果传递给视图层进行展示。Form Bean则用于在请求间传递数据,如用户输入的表单信息。 2. 分页: 分页是处理大量数据时必不...

    用jsp三层架构实现对mysql数据库的增删改查项目实施步骤.docx

    - 使用三层架构,即表现层(JSP)、业务逻辑层(Service)和数据访问层(DAO)。 - 在`src`目录下创建对应的包结构,如`com.gxy.controller`(用于存放Servlet)、`com.gxy.model`(实体类)和`com.gxy.service`、...

    JAVAEE期末项目总结报告.doc

    * 数据访问层(DAO 层):该层由若干 DAO 接口和 MyBatis 映射文件组成。 * 业务逻辑层(Service 层):该层由若干 Service 接口和实现类组成。 * Web 表现层:该层主要包括 Spring MVC 中的 Controller 类和 JSP ...

    java web开发框架 MVC+DAO实现

    在Java Web开发中,MVC(Model-View-Controller)设计模式和DAO(Data Access Object)模式是两个核心概念,广泛应用于构建高效、可维护的Web应用程序。本篇将深入探讨这两个框架及其在实际开发中的应用。 MVC模式...

    Nhibernate三层架构的简单实例

    三层架构是一种常见的软件设计模式,它将应用程序分为数据访问层、业务逻辑层和用户界面层,以实现良好的分离和解耦。在本实例中,我们将深入探讨如何使用Nhibernate构建一个基于三层架构的简单博客系统。 1. **...

    JavaEE技术-试验九.zip_Spring入门_依赖注入

    这个实验旨在帮助开发者理解如何在MyEclipse环境中利用Spring框架来实现服务层(Service Layer)和数据访问对象层(DAO Layer)的解耦合,从而提高代码的可维护性和可测试性。 首先,Spring框架是JavaEE应用开发中...

    spring mvc + hibernate整合项目源码,导入即可直接运行.zip

    3. **DAO(数据访问对象)层**:包含对数据库进行操作的接口和实现类,如使用 Hibernate 的 Session 进行 CRUD(创建、读取、更新、删除)操作。 4. **Service 层**:业务逻辑处理层,调用 DAO 实现业务功能,通常...

Global site tag (gtag.js) - Google Analytics