`
squll369
  • 浏览: 106784 次
  • 性别: 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"/>
分享到:
评论

相关推荐

    公司练习项目.简历管理系统.RMS

    index表中读取的当前招聘的全局信息保存在session中,提高访问效率。 另外处于对公司内部信息的保密,数据库内容、功能设计书、结构设计书等等与公司相关的文档、资 源均未提供,仅提供源码和必要的资源以供大家...

    基于JavaScript的数据可视化实验室后台管理系统源码+项目说明(期末大作业).zip

    * DAO层:实现分页功能都需要在对应实体的DAO Mapper的xml文件中添加查询总数目和查询列表的sql语句(其中要包含分页的两个参数:start页数和limit每页条数)。 * Controller层:获得前端的param,验证页数和条数是否...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    它使用服务层框架可以将JavaBeans从Jsp/Servlet中分离出来,而使用表现层框架则可以将Jsp中剩余的JavaBeans完全分离,这部分JavaBeans主要负责显示相关信息,一般是通过标签库(Taglib)实现,不同框架有不同自己的...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    该案例采用目前最流行、最规范的java ee架构,整个应用分为jpa实体层、eao层、业务逻辑层、mvc层和视图层,各层之间分层清晰,层与层之间以松耦合的方法组织在一起。该案例既提供了ide无关的、基于ant管理的项目源码...

    基于ssm+shiro+redis+nginx tomcat服务器集群管理项目源码+项目说明.zip

    【资源说明】 1、该资源包括项目的全部源码,下载...service层和dao层,提供具体的业务逻辑和数据库访问,需要依赖ssm-model模块,并提供出来给ssm-rs模块调用 ssm-rs controller层,提供RESTFul接口。

    基于SSM架构实现的大型分布式购物网站-B2C项目源码+项目说明.zip

    子容器可以访问父容器中的对象。 ##分页插件pageHelper的使用 该分页插件对逆向工程生成的代码支持不好,不能对有查询条件的查询分页,会抛异常。 #图片保存位置 1、小型网站,传统项目是把图片放到Tomcat工程的...

    客户关系管理系统框架搭建(二)

    * 创建dao层共同的接口的实现类,,放置在cn.itcast.crm.dao.impl下 public class CommonDaoImpl&lt;T&gt; extends HibernateDaoSupport implements ICommonDao&lt;T&gt; { public void save(T entity) { ...

    Spring中文帮助文档

    中间层数据访问 9. 事务管理 9.1. 简介 9.2. 动机 9.3. 关键抽象 9.4. 使用资源同步的事务 9.4.1. 高层次方案 9.4.2. 低层次方案 9.4.3. TransactionAwareDataSourceProxy 9.5. 声明式事务管理 9.5.1. ...

    java面试题

    Struts2只是起到一个数据接收和转接的功能,就是Controller控制器,而传来数据的页面叫view显示层,Struts2将数据提交给进行处理的类叫Model模型层,专门进行数据处理和数据库的连接。 heap和stack有什么区别? 答:...

    JAVA程序开发大全---上半部分

    9.2.6 使用反向工程生成持久化对象、映射文件和DAO类 143 9.2.7 使用Hibernate功能 151 9.3 MyEclipse中Hibernate框架的高级操作 152 9.3.1 在Hibernate反向工程中定制映射关系 153 9.3.2 使用HQL编辑器 154 9.4 ...

    springboot学习思维笔记.xmind

    @Repository在数据访问层(dao层) @Controller在展现层(MVC→SpringMVC) 注入Bean的注解 @Autowired:Spring提供的注解 @Inject:JSR-330提供的注解 @Resource:JSR-250提供的注解 Java...

    智能发票识别系统后台.zip

    Spring MVC + Spring + JDBC搭建后端框架,Controller负责接收请求,Service负责主要业务逻辑,Dao负责数据库访问 算法端用C++编写,java后端通过多线程+socket+TCP与算法端通讯,利用对象锁完成线程调度 利用redis...

    当当网全套源码(附带邮箱验证功能)

    org.tarena.dang.dao :数据访问层 org.tarena.dang.entity :实体类 org.tarena.dang.util :工具类 org.tarena.dang.interceptor :拦截器 3)struts配置文件结构 web.xml(配置Filter控制器) struts.xml ...

    Java课程设计-基于JavaWeb和Mysql实现的宿舍管理系统源码带数据库+详细说明文档.zip

    后端方面:JavaSe核心语法、MVC(controlle层、service、dao层)模型开发、jsp相关语法(jstl标签库、el表达式)、maven构建项目和管理jar包 前端方面:JavaScript(jquery)核心语法、AJAX异步刷新、Layui前端 UI ...

    Spring API

    中间层数据访问 9. 事务管理 9.1. 简介 9.2. 动机 9.3. 关键抽象 9.4. 使用资源同步的事务 9.4.1. 高层次方案 9.4.2. 低层次方案 9.4.3. TransactionAwareDataSourceProxy 9.5. 声明式事务管理 9.5.1. ...

    java后台框架源码

    dao:数据库访问封装 enm:系统中使用到的常量包,这里不是用的常量,用的是枚举替代常量 entity:hibernate对应的orm与数据库表一一对应的实体类 filter:Log4jFormatFilter(格式化log4j日志输出的),...

    ssh框架整合step by step (springMVC + spring 5.0.4 + hibernate 5.0.12)

    # 使用entity/dao/service全部使用注解扫描, 大大减少再开发的代码量; # 事务的织入: 开发时不必再处理SessionFactory、Session等, 只要按配置文件指定的格式对方法进行命名, 即可自动开启/提交事务; # 做了BaseDao...

    ssh(structs,spring,hibernate)框架中的上传下载

     LobHandler必须注入到Hibernate会话工厂sessionFactory中,因为sessionFactory负责产生与数据库交互的Session。LobHandler的配置如代码 5所示:  代码 5 Lob字段的处理句柄配置 1. 2. … 3. 4. class="org....

    JAVA Spring框架实现登陆查询 完整搭建框架方法的word文档 包含mysql文件

    包含基本步骤实现完整的JAVA框架搭建 1 创建web项目,创建dao...7 配置 项目默认访问页面和设置session的会话时间(可选,不是必须的) Ssm项目搭建完了!现在建立一张表,随便写一个功能,测试下项目是否搭建成功

    Active4j-oa办公系统-其他

    使用分层设计,分为dao,service,Controller,view层,层次清楚,低耦合,高内聚。 支持分布式部署,session集成了redis 灵活的权限控制, 整合shiro,可控制到页面或按钮,满足绝大部分的权限需求,优化权限注解方便...

Global site tag (gtag.js) - Google Analytics