- 浏览: 375836 次
- 来自: 北京
文章分类
- 全部博客 (237)
- XML (6)
- JavaSE (39)
- Junit (1)
- Maven (10)
- JavaScript (12)
- JavaEE (16)
- HTML5 (10)
- java多线程 (8)
- Hibernate (30)
- Java反射 (3)
- Spring (11)
- Struts (1)
- svn (2)
- linux (12)
- 代码实例 (1)
- 设计模式 (1)
- UML (1)
- javassist (1)
- Oracle (3)
- Hibernate异常 (9)
- DWR (6)
- Java泛型 (2)
- SpringMVC (11)
- Dbunit (3)
- github (2)
- Algorithm (1)
- zTree (1)
- jquery (7)
- freemarker (4)
- mysql (5)
- ffmpeg (1)
- 编码 (1)
- lucene (15)
- hadoop (1)
- JVM (1)
- Regular Expressions (5)
- myeclipse (1)
- 爬虫 (7)
- 加密 (3)
- WebService (2)
- Socket (2)
- Windows (1)
最新评论
-
wxpsjm:
好直接
HV000030: No validator could be found for type: java.lang.Integer. -
wxhhbdx:
学习了,对新手来说很不错的教程。
SpringMVC入门 (二) 数值传递 -
xgcai:
正好在学dwr
DWR入门 (二)用户实例
摘自孔浩视频 spring部分-17_spring_SSH整合02_OpenSessionInViewer的讲解
思路就是创建一个filter,这个filter在视图请求的过程中获取到Spring所管理的SessionFactory对象。 这样便解决了视图层Session无法获取的问题。
1. 首先创建一个OpenSessionFilter.java
OpenSessionFilter
2. 在web.xml中配置filter
Note: 注意这里如果使用的是struts2, 那么struts2的url-pattern也是/*,所有的请求都会被struts2的拦截器拦截, 这个filter也就不会起作用了。
因此必须要将这个filter的配置放在Struts2的前面,才能正常使用。
这时就可以在Dao层调用这个类来获取Session,例如:
这样web容器便会在视图层中获取Session,并执行相应的Session操作。
==========================
Spring已经提供了OpenSessionInViewerFilter, 一般直接配置Spring的就可以了。
思路就是创建一个filter,这个filter在视图请求的过程中获取到Spring所管理的SessionFactory对象。 这样便解决了视图层Session无法获取的问题。
1. 首先创建一个OpenSessionFilter.java
OpenSessionFilter
package com.lj.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; public class OpenSessionFilter implements Filter { //Spring的工厂,在init中获取 private WebApplicationContext wac; private static SessionFactory factory; private static ThreadLocal<Session> sessionHolder=new ThreadLocal<Session>(); private static void setSession(Session session){ sessionHolder.set(session); } public static Session getSession(){ return sessionHolder.get(); } private static void removeSession(){ sessionHolder.remove(); } @Override public void init(FilterConfig filterConfig) throws ServletException { /** * 在这里获取Spring的工厂信息,在init里面就只会执行一次 * 使用WebApplicationContextUtils.getWebApplicationContext(ServletContext)来获取Web中的Spring工厂。 * 这种手段非常重要,要熟悉 */ wac=WebApplicationContextUtils.getWebApplicationContext(filterConfig.getServletContext()); //我们在beans.xml中定义的sessionFactory <bean id="sessionFactory"> factory=(SessionFactory) wac.getBean("sessionFactory"); } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { //开启session System.out.println("begin"); /** 要获取SessionFactory,需要先获取Spring的工厂 * 如果使用new ClassPathXmlApplicationContext(),就会产生一个新工厂,和Servlet初始化时的工厂是两个对象 * 必须通过其他方法来获取 * 在Spring中可以通过Web */ //这里不能用getCurrentSession,要用openSession() try { setSession(factory.openSession()); chain.doFilter(req, res); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); } //关闭session System.out.println("back"); } @Override public void destroy() { } }
2. 在web.xml中配置filter
<filter> <filter-name>mySessionInViewerFilter</filter-name> <filter-class>com.lj.filter.OpenSessionFilter</filter-class> </filter> <filter-mapping> <filter-name>mySessionInViewerFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Note: 注意这里如果使用的是struts2, 那么struts2的url-pattern也是/*,所有的请求都会被struts2的拦截器拦截, 这个filter也就不会起作用了。
因此必须要将这个filter的配置放在Struts2的前面,才能正常使用。
这时就可以在Dao层调用这个类来获取Session,例如:
public List<Group> list() { // TODO Auto-generated method stub //return this.getSession().createQuery("from Group").list(); return OpenSessionFilter.getSession().createQuery("from Group").list(); }
这样web容器便会在视图层中获取Session,并执行相应的Session操作。
==========================
Spring已经提供了OpenSessionInViewerFilter, 一般直接配置Spring的就可以了。
<filter> <filter-name>openSessionInViewerFilter</filter-name> <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>openSessionInViewerFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
发表评论
-
Connection is read-only. Queries leading to data modification are not allowed。
2014-04-06 21:52 3721<tx:advice id="txAdvic ... -
org.hibernate.HibernateException: No Session found for current thread
2014-04-06 12:37 0今天在maven中整合spring和hibernate,并使用 ... -
select new Topic from ' Mysql 生成SQL语句错误
2014-03-30 22:51 1653Caused by: com.mysql.jdbc.exce ... -
Unable to locate appropriate constructor on class
2014-02-20 00:11 1460org.hibernate.hql.internal.ast. ... -
Hibernate的load和get实际应用区分简单实例
2013-12-18 11:58 871今天在看孔浩的CMS视频时候看到的。 在57 -文章管理06 ... -
数据库事务 (三)虚读(Phantom Read)
2013-12-01 13:21 0关于各种读 虚读 phantom read: 转自维基 ... -
Hibernate悲观锁
2013-11-30 17:30 0为了防止两个线程同时修改一个数据,造成更新数据丢失,我们可以使 ... -
Hibernate查询HQL实例
2013-11-29 15:56 1292三个实体类对象: public class Team { ... -
QBC与HQL检索
2013-11-28 17:39 0QBC(Query By Criteria) API提供了检索 ... -
Hibernate继承映射
2013-11-28 12:36 646继承映射分为三种情况 1.每个子类一张表 比如说有一个Pers ... -
Hibernate通过Composite-element配置外联表实例 (码)
2013-11-28 11:07 1015摘自圣思园Hibenrate 26. 组件映射深度解析 -37 ... -
Hibernate配置复合主键 composite primary key (二)
2013-11-27 16:41 1446摘自圣思园Hibernate 26.组件映射深度解析 上一篇 ... -
Hibernate配置复合主键 composite primary key (一)
2013-11-27 14:15 2454这篇是关于如何配置Hibernate实现复合主键的映射功能。 ... -
Hibernate通过Comparator接口自定义排序规则
2013-11-25 20:42 2514摘自圣思园 Hibernate25.自定义内存排序器详解及符合 ... -
Hibernate配置Set和List
2013-11-25 10:44 1877========================Set==== ... -
Hibernate的Map配置
2013-11-23 16:21 1295摘自圣思园022.Hibernate映 ... -
Hibernate多对多配置
2013-11-21 22:39 875场景: Student和Course,每一个Student有多 ... -
Hibernate延迟加载案例 (多: 一: 一,附代码)
2013-11-21 17:41 590摘自圣思园Hibernate20.一 ... -
Hibernate一对一配置
2013-11-20 21:49 1038摘自圣思园 19.Hibernate的对象检索策略深度解析.a ... -
Hibernate的对象检索策略 (一) SQL左外连接检索策略
2013-11-20 15:32 1137首先是测试表的结构: 先通过hibernate将数据放入 ...
相关推荐
JavaFilter自定义编码过滤器知识点 一、Filter接口和 FilterChain接口 在 Java 中, Filter 接口和 FilterChain 接口是 Servlet 规范中的两个重要组件。 Filter 接口用于定义一个过滤器, FilterChain 接口用于将...
vue.js的filter定义的方式,已经简单的demo,自定义过滤器如何给文字加颜色
"SpringSecurity学习之自定义过滤器的实现代码" Spring Security学习之自定义过滤器的实现代码主要介绍了Spring Security学习之自定义过滤器的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有...
自定义模板过滤器则是在Django提供的过滤器基础上,扩展或修改现有功能,以满足特定需求。本文将结合实例,分析Django模板过滤器的功能、原理、使用方法以及在自定义模板过滤器时需要注意的相关操作事项。 首先,...
然后,我们可以在控制器或特定动作上应用这个自定义的授权过滤器,确保只有登录的用户才能访问: ```csharp [CustomAuthorize] public class AccountController : Controller { public ActionResult Index() { /...
### 在Django框架中自定义模板过滤器的方法 #### 一、引言 Django作为最受欢迎的Python Web开发框架之一,提供了丰富的功能和强大的社区支持。在Django中,模板系统是一个非常重要的组成部分,用于处理前端展示...
SpringBoot的filter过滤器 一、过滤器的作用和概述 1.1 简述 1.2 使用场景 二、自定义过滤的两种方式 ...2.3.4自定义过滤器类UserLoginFilter.java 2.3.5 templates下的index页面 2.3.6被拦截后重定向的页面 2.3.7 测试
总之,AngularJS通过提供内置过滤器和自定义过滤器的能力,赋予开发者强大的数据处理能力,使他们能够在不直接修改数据源的情况下调整数据的显示方式。这种方法提高了代码的复用性,并且在保持了数据源不变的前提下...
在Python编程中,自定义过滤器是Django模板语言(DTL)中增强模板功能的一种方式,它允许开发者创建自己的函数来处理数据,以便在模板渲染时应用特定的逻辑。本篇文章将深入探讨如何在Python中实现一个计算时间差的...
自定义表单设计器是一种强大的工具,它允许用户根据自己的需求创建和定制各种数据输入界面,无需深入编程细节。本项目提供了C#语言实现的自定义表单设计器的演示版源码,这对于开发者来说是一个很好的学习资源,特别...
在 "Hangfire.Dashboard.Authorization-master" 压缩包中,你将找到一组 C# 代码,这些代码提供了自定义授权过滤器的示例和实现。这些过滤器可以根据你的应用需求,比如用户身份验证、角色检查或其他业务规则,来...
Vue提供了内置过滤器,如`capitalize`、`uppercase`、`lowercase`、`currency`等,但很多时候,我们需要创建自定义过滤器以满足特定的业务逻辑。自定义过滤器的定义语法如下: ```javascript Vue.filter('...
"安卓自定义男女选择器"就是一个专门解决这一问题的组件,它允许用户在男性和女性之间进行选择,并且可以设定为只能选择一个性别,避免了多选或者误选的情况。本篇文章将详细介绍如何在安卓应用中实现这样一个自定义...
系统提供了预设的时间选择器对话框,但有时为了满足特定的UI设计或者功能需求,开发者需要自定义时间选择器。本教程将深入探讨如何在安卓平台上创建自定义的时间选择器。 首先,我们从基础开始。在安卓中,`...
Django自定义过滤器是Django模板系统中一个强大的功能,它允许开发者根据自己的需求,创建可重用的模板标记,从而在模板中执行各种自定义逻辑。接下来,我们将详细探讨Django自定义过滤器的概念、功能、定义以及用法...
2. 基于自定义过滤器类的过滤器(Custom filter class-based filter):通过编写一个继承自CFilter类的自定义过滤器类,并重写preFilter和postFilter方法来实现。 在自定义过滤器类的方法中,preFilter在动作执行...
Envoy 过滤器可以用于添加自定义的过滤器,以满足特定的网络需求。 Envoy 过滤器描述了 Envoy 特定于代理的过滤器, 可用于自定义由 Istio 网络子系统(Pilot)生成的 Envoy 代理配置。必须小心使用此功能,因为不...
4. **自定义日志过滤器**:Log4j的过滤器功能允许我们根据条件决定哪些日志应该被记录。例如,我们可以创建一个过滤器,只让日志级别高于WARN的消息通过。 5. **自定义日志事件处理器**:通过实现`Filter`接口,...