`

通过Filter过滤器来实现OSIV模式

阅读更多

使用Servlet过滤器来实现OSIV模式(Open Session In View 模式)

 

util中的代码,用于获得SessionFactory

package com.lbx.util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateSessionFactoryUtil {
	
	private static final SessionFactory sessionFactory ;
	
	private HibernateSessionFactoryUtil(){
		
	}
	
	static {
		try {
			sessionFactory = new Configuration().configure().buildSessionFactory();
		}catch(Throwable e){
			throw new ExceptionInInitializerError(e);
		}
	}
	
	public static SessionFactory getSessionFactory(){
		return sessionFactory;
	}
	
}

 

 

 

Servlet的Filter代码

package com.lbx.servlet;

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.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import com.lbx.util.HibernateSessionFactoryUtil;

/**
 * 使用Servlet过滤器来实现OSIV模式(Open Session In View 模式)
 * @author Administrator
 *
 */

public class HibernateSessionFilter implements Filter {

	private SessionFactory sessionFactory;
	
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		sessionFactory.close();
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		Transaction tx = null;
		try{
			Session session = sessionFactory.getCurrentSession();
			tx = session.beginTransaction();
			chain.doFilter(request, response);
			tx.commit();
		}catch(Exception e){
			e.printStackTrace();
			try{
				if(tx.isActive()){
					tx.rollback();
				}
			}catch(Exception e2){
				e2.printStackTrace();
			}
		}
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		sessionFactory = HibernateSessionFactoryUtil.getSessionFactory();
	}

}

 

 

 

修改web.xml文件(配一个Filter)

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  
  <filter>
  	<filter-name>hibernateSessionFactory</filter-name>
  	<filter-class>com.lbx.servlet.HibernateSessionFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>hibernateSessionFactory</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
  
</web-app>

 

分享到:
评论

相关推荐

    Filter(过滤器)简介和工作原理

    Filter(过滤器)简介和工作原理 Filter 简介 Filter(过滤器)是 Java EE 中的一种组件,用于拦截和处理 Servlet 容器中的请求和响应。Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 ...

    java 中如何使用filter过滤器

    这里,`filter-name`是过滤器的唯一标识,`filter-class`是实现Filter接口的类全名,`url-pattern`则定义了过滤器作用的URL路径。 ### 3. 编写Filter 创建一个类实现Filter接口,并重写上述三个方法。例如,我们...

    过滤器(Filter)

    创建一个过滤器需要继承`javax.servlet.Filter`接口,并实现其核心方法`doFilter()`。以下是一个简单的过滤器示例: ```java public class MyFilter implements Filter { @Override public void init...

    如何配置Filter过滤器处理JSP中文乱码

    【如何配置Filter过滤器处理JSP中文乱码】 在开发Java Web应用时,尤其是在处理包含中文字符的请求时,可能会遇到中文乱码的问题。解决这个问题的一种常见方法是使用Filter过滤器。以下是配置Filter过滤器处理JSP...

    拦截过滤器模式

    这种模式通过定义一个过滤器链(Filter Chain)来管理一系列过滤器,并将请求传递给实际的目标组件。 #### 二、关键概念与组成 拦截过滤器模式由以下几个核心组成部分构成: 1. **过滤器(Filter)**:这是模式中...

    过滤器Filter的全面解析

    在web.xml中,我们可以通过`&lt;filter&gt;`和`&lt;filter-mapping&gt;`元素来定义和配置过滤器。`&lt;filter&gt;`元素用于定义过滤器类,而`&lt;filter-mapping&gt;`则用于指定过滤器要拦截的URL模式。 2. **过滤器链**: 在一个Web应用...

    设计模式-过滤器模式

    在iOS平台上,我们可以使用Swift语言来实现过滤器模式。首先,定义一个`Component`协议,表示待过滤的数据模型,然后创建一个`Filter`协议,包含用于过滤的方法。接着,实现`Concrete Filter`类,每个类对应一个具体...

    Filter过滤器(分类讨论,分类讲解)

    ### Filter过滤器(分类讨论,分类讲解) #### 一、Filter概述 在Java Web开发中,`Filter`是一种非常重要的技术,它可以在请求到达目标资源(如Servlet或JSP页面)之前进行预处理,或者在响应返回客户端之前进行...

    bloom filter(C#版自制布隆过滤器)

    C# 版本的布隆过滤器实现了这一概念,通过使用八种不同的哈希函数来提高准确性和减少冲突。 布隆过滤器的基本原理是将所有可能存在的元素映射到一个固定大小的位数组(bit array)上。这个位数组最初全部设置为0。...

    设计模式-拦截过滤器

    拦截过滤器模式(Interceptor Filter Pattern)基于责任链模式,通过创建一个过滤器链,每个过滤器都实现一个共同的接口,这个接口定义了对请求进行处理的方法。当请求到达时,它会依次通过这个过滤器链,每个过滤器...

    jsp中Filter类实现过滤器功能

    为了实现过滤脏话的功能,开发者通过JSP中的`Filter`类来完成。具体来说,是将一些敏感词汇封装在一个文本文件中,当用户提交的内容中包含这些敏感词汇时,通过过滤器时这些词汇将会被替换为星号“*”。 #### 代码...

    ffmpeg filter过滤器基础实例以及全面解析

    FFmpeg Filter 过滤器是FFmpeg项目中用于音视频数据处理的一个重要组件,通过libavfilter库提供丰富的视频和音频过滤功能。这些过滤器可以在不同阶段对媒体数据进行操作,包括但不限于格式转换、帧率调整、大小缩放...

    管道过滤器的实现java

    管道过滤器(Pipeline Filter)是Java编程中一种常见的设计模式,它在处理数据流时非常有用,尤其是在构建复杂系统或需要对数据进行一系列处理的情况下。这个模式基于“责任链”概念,允许我们创建一系列相互连接的...

    管道过滤器程序,主要用java实现

    这种模式通过连接一系列的处理组件(过滤器),每个组件执行特定的任务,来实现复杂的数据转换。在这个场景中,"管道过滤器程序,主要用java实现" 指的是一个基于Java的系统,它利用了这种模式来处理数据流。 首先...

    filter过滤器防止恶意注入

    本示例中的`URLfilter`类就是一个简单的过滤器,它的主要目的是防止SQL注入攻击,这是一种常见的恶意攻击手段,攻击者试图通过输入恶意SQL语句来获取未经授权的数据或者破坏数据库。 SQL注入攻击通常是由于应用程序...

    java常用设计模式-过滤器模式

    * 压缩和加密:可以使用过滤器模式来实现压缩和加密,例如压缩传输的数据、加密敏感信息等。 结论 过滤器模式是一种非常有用的设计模式,可以用于实现不同的功能,如验证、日志记录、压缩等。通过使用过滤器模式,...

    过滤器(filter) 例子源码

    一个简单的过滤器实现如下: ```java import javax.servlet.*; import java.io.IOException; public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ...

    servlet+jsp实现过滤器 防止用户未登录访问

    使用servlet和jsp技术时,我们可以通过过滤器(Filter)来实现这样的安全防护机制。过滤器是一种服务器端的组件,它能够对请求和响应进行拦截,执行一些预处理或者后处理操作。它常用于进行登录验证、权限检查、字符...

    jsp filter 过滤器判断用户是否登录

    下面我们就通过分析一个具体的示例代码来详细了解如何使用JSP Filter过滤器来判断用户是否已经登录。 #### 示例代码分析 首先,我们来看一下示例中的过滤器类`RightFilter`: ```java import javax.servlet....

    使用过滤器实现判断用户是否登录验证.

    在Web开发中,确保用户身份的安全性...总的来说,使用过滤器实现用户登录验证是一种常见的实践,它允许我们集中管理权限控制,提高代码的可维护性。同时,通过合理的配置和扩展,可以适应不同规模和需求的Web应用程序。

Global site tag (gtag.js) - Google Analytics