很多情况下,我们需要在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"/>
分享到:
相关推荐
然后,利用Spring的依赖注入(DI)特性,可以在Service层或其他组件中轻松注入泛型DAO的实例,从而实现对数据库的操作。 #### 结论 泛型DAO层为SSH框架下的数据访问提供了统一、高效且灵活的解决方案。通过上述...
标题中的“hibernate4 通用dao,service”指的是在Java开发中使用Hibernate框架实现的通用数据访问对象(DAO)和业务服务层(Service)。Hibernate是一个流行的对象关系映射(ORM)工具,它允许开发者使用面向对象的...
在Java Web开发中,三层架构是一种常见的设计模式,它将应用程序分为表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。这种分层设计有助于提高代码的可读性、...
DAO层的主要职责是对数据进行增删查改(CRUD)操作,它封装了对数据库的直接访问,使得业务逻辑层(Service Layer)与数据存储层解耦。在实际开发中,为了提高代码的可复用性和可维护性,通常会采用面向接口编程的...
DAO模式是一种用于封装对底层数据访问的模式,它可以隔离业务逻辑层和数据访问层,提高代码的可测试性和可维护性。在Hibernate中,DAO类通常包含以下方法: 1. **保存/插入(Save/Insert)**:`void save(Student ...
DAO是用于访问数据库的一层抽象,它隔离了应用程序和数据存储之间的交互。通过DAO,我们可以隐藏具体的数据库访问细节,比如SQL语句,使代码更加灵活且易于测试。 在Hibernate中,每个实体类通常对应一个DAO接口和...
在案例中,你将学习如何配置 MyBatis,定义 Mapper 映射文件,编写 DAO 类,以及如何在 Service 层中调用 DAO 方法进行数据的增删改查操作。 5. **SSM 学习框架**: SSM 是 Spring、SpringMVC 和 MyBatis 三个框架...
DAO(Data Access Object)是一种设计模式,它提供了一种与数据库交互的抽象层,使得业务逻辑层与数据访问层解耦。在用户登录时,DAO负责与数据库进行交互,比如执行SQL查询来验证用户名和密码。通过DAO,我们可以...
这种技术可以帮助开发者自动创建数据访问对象(DAO)和业务服务层(Service)的代码,从而避免手动编写这些重复性的基础代码。 首先,我们需要理解`HibernateTemplate`。它是Spring对Hibernate提供的一个抽象层,它...
而HibernateDAO则是基于Hibernate进行数据访问的对象,是业务逻辑层和持久层之间的桥梁。本文将详细探讨HibernateDAO的实现方式以及常见设计模式,旨在帮助开发者更好地理解和运用这一技术。 1. HibernateDAO的基本...
DAO(Data Access Object)设计模式是Java开发中用于数据库访问的一种常见模式,它在J2EE应用程序中扮演着至关重要的角色。DAO模式的主要目的是将业务逻辑层与数据存储层进行解耦,使得代码更加模块化,易于维护和...
5. **业务层调用**:最后,在业务层Service对象中,通过@Autowired注解注入DAO,然后调用其方法执行数据库操作。 在给出的文件名"yyuu4DAOframework"中,可能包含了相关的DAO实现代码或者配置文件。分析这个文件的...
Action类处理用户请求,调用业务逻辑层(通常为Service或DAO),对数据进行操作,然后将结果传递给视图层进行展示。Form Bean则用于在请求间传递数据,如用户输入的表单信息。 2. 分页: 分页是处理大量数据时必不...
- 使用三层架构,即表现层(JSP)、业务逻辑层(Service)和数据访问层(DAO)。 - 在`src`目录下创建对应的包结构,如`com.gxy.controller`(用于存放Servlet)、`com.gxy.model`(实体类)和`com.gxy.service`、...
* 数据访问层(DAO 层):该层由若干 DAO 接口和 MyBatis 映射文件组成。 * 业务逻辑层(Service 层):该层由若干 Service 接口和实现类组成。 * Web 表现层:该层主要包括 Spring MVC 中的 Controller 类和 JSP ...
在Java Web开发中,MVC(Model-View-Controller)设计模式和DAO(Data Access Object)模式是两个核心概念,广泛应用于构建高效、可维护的Web应用程序。本篇将深入探讨这两个框架及其在实际开发中的应用。 MVC模式...
三层架构是一种常见的软件设计模式,它将应用程序分为数据访问层、业务逻辑层和用户界面层,以实现良好的分离和解耦。在本实例中,我们将深入探讨如何使用Nhibernate构建一个基于三层架构的简单博客系统。 1. **...
这个实验旨在帮助开发者理解如何在MyEclipse环境中利用Spring框架来实现服务层(Service Layer)和数据访问对象层(DAO Layer)的解耦合,从而提高代码的可维护性和可测试性。 首先,Spring框架是JavaEE应用开发中...
3. **DAO(数据访问对象)层**:包含对数据库进行操作的接口和实现类,如使用 Hibernate 的 Session 进行 CRUD(创建、读取、更新、删除)操作。 4. **Service 层**:业务逻辑处理层,调用 DAO 实现业务功能,通常...