1.  HiberSessionFilter过滤器代码: 
  2. [java] view plaincopyprint? 
  3. package www.csdn.dbshop.filter; 
  4. import java.io.IOException; 
  5. import javax.servlet.Filter; 
  6. import javax.servlet.FilterChain; 
  7. import javax.servlet.FilterConfig; 
  8. import javax.servlet.ServletException; 
  9. import javax.servlet.ServletRequest; 
  10. import javax.servlet.ServletResponse; 
  11. import javax.servlet.http.HttpServletRequest; 
  12. import org.hibernate.Transaction; 
  13. import www.csdn.dbshop.util.HiberSessionFactory; 
  14. public class HiberSessionFilter implements Filter { 
  15. public void destroy() { 
  16. public void doFilter(ServletRequest request, ServletResponse response, 
  17. FilterChain chain) throws IOException, ServletException { 
  18. HttpServletRequest req = (HttpServletRequest) request; 
  19. // 获取当前请求的URI路径,例如/shoping/csdn/MemberAction_query.action 
  20. String reqrequesturi = req.getRequestURI(); 
  21. // 截取字符串,获取‘_’之后的字符串 
  22. String str = requesturi.substring(requesturi.indexOf("_") + 1); 
  23. // 截取 _名字 如过以 add ,update ,delete 开始 就添加事务处理,把有过事务的处理 都删除 
  24. // 根据获取‘_’之后的字符串,截取‘.’之前的字符串,即:就是URI中_到.之间的字符串,即:Action中的方法名 
  25. String uri = str.substring(0, str.indexOf(".")); 
  26. // 判断截取的字符,如果是CUD则进行开启事务的操作,反之,不用开启事务 
  27. if ("addObject".equals(uri) || "updateObject".equals(uri) 
  28. || "deleteObject".equals(uri) || "reg".equals(uri) 
  29. || "register".equals(uri) || "buy".equals(uri)) { 
  30. Transaction ts = null
  31. try { 
  32. ts = HiberSessionFactory.getSession().beginTransaction(); 
  33. chain.doFilter(request, response); 
  34. ts.commit(); 
  35. } catch (Exception e) { 
  36. if (ts != null) { 
  37. ts.rollback(); 
  38. throw new RuntimeException(e); 
  39. } finally { 
  40. // 关闭session 
  41. HiberSessionFactory.closeSession(); 
  42. } else { 
  43. try { 
  44. chain.doFilter(request, response); 
  45. } catch (Exception e) { 
  46. throw new RuntimeException(e); 
  47. } finally { 
  48. // 关闭session 
  49. HiberSessionFactory.closeSession(); 
  50. public void init(FilterConfig filterConfig) throws ServletException { 
  51. // TODO Auto-generated method stub 
  52.  
  53.  
  54.  
  55.  
  56. web.xml代码: 
  57. [html] view plaincopyprint? 
  58. <!-- sessionclose过滤器 --> 
  59. <filter> 
  60. <filter-name>HiberSessionFilter</filter-name> 
  61. <filter-class>www.csdn.dbshop.filter.HiberSessionFilter</filter-class> 
  62. </filter> 
  63. <filter-mapping> 
  64. <filter-name>HiberSessionFilter</filter-name> 
  65. <url-pattern>*.action</url-pattern> 
  66. </filter-mapping> 
  67.  
  68. 注意:在Struts2中,过滤器最好放在Struts2过滤器之前。