<filter>
<filter-name>webwork</filter-name>
<filter-class>
com.opensymphony.webwork.dispatcher.FilterDispatcher
</filter-class>
</filter> <filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
</filter> <filter>
<filter-name>Encoding</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>请问下 这样的过滤器顺序配置 对吗?

解决方案 »

  1.   

    <filter> 
    <filter-name>hibernateFilter </filter-name> 
    <filter-class> 
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter 
    </filter-class> 
    <init-param> 
    <param-name>singleSession </param-name> 
    <param-value>true </param-value> 
    </init-param> 
    </filter>  这段放前面
      

  2.   

    <filter>  (过滤器①)
    <filter-name>ActionContextCleanUp</filter-name>
    <filter-class>
    com.opensymphony.webwork.dispatcher.ActionContextCleanUp
    </filter-class>
    </filter> <filter> (过滤器②)
    <filter-name>webwork</filter-name>
    <filter-class>
    com.opensymphony.webwork.dispatcher.FilterDispatcher
    </filter-class>
    </filter> <filter> (过滤器③)
    <filter-name>hibernateFilter</filter-name>
    <filter-class>
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    </filter-class>
    <init-param>
    <param-name>singleSession</param-name>
    <param-value>true</param-value>
    </init-param>
    </filter> <filter> (过滤器④)
    <filter-name>Encoding</filter-name>
    <filter-class>
    org.springframework.web.filter.CharacterEncodingFilter
    </filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
    <param-name>forceEncoding</param-name>
    <param-value>true</param-value>
    </init-param>
    </filter>帮我排下顺序吧 ?  为什么要这样做呢?
      

  3.   

    1.Encoding 
    2.hibernateFilter 
    3.ActionContextCleanUp 
    4.webwork 3,4不知道有无顺序要求,
    encoding解释下为什么排第一
    一些情况下,encoding可能会被修改
    所以在encoding 设置完编码后在调用一下request.getParameter("随意")
    调用后编码就被固化了,不能在被修改了。排在第一最保险,而且这个里面没什么逻辑。不会影响其他的。
    我只遇到过一次这种情况,放第一个不会有错相信我hibernateFilter 这个好理解,你必须在使用session之前绑定是吧,否则都用完session了,你绑定也没用了。
      

  4.   

    我现在这个系统 的配置信息就我刚才粘上去的那段!! 
    现在系统维护过程中 经常会报
    ERROR 2008-10-15 20:12:01,611 [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] org.hibernate.transaction.JDBCTransaction     - JDBC commit failed
    java.sql.SQLException: 关闭的连接
            at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
            at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
            at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
            at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:1112)
            ......
    (WebAppServletContext.java:3212)
            at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
            at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
            at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:1983)
            at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1890)
            at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1344)
            at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
            at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
    ERROR 2008-10-15 20:12:01,612 [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] com.opensymphony.webwork.dispatcher.DispatcherUtils     - Could not execute action
    org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction; nested exception is org.hibernate.TransactionException: JDBC commit failed

    org.hibernate.TransactionException: JDBC commit failed
            at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:110)
            at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:584)
            at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:500)
            at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:473)
      ......
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
            at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal
            ......
            at com.zjpublic.webapps.filter.LoginFilter.doFilter(LoginFilter.java:147)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
            at cn.com.zjtelecom.sso.client.filter.CASFilter.doFilter(CASFilter.java:352)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
            ........
            at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
    Caused by: java.sql.SQLException: 关闭的连接
            at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
            at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
            at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
            at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:1112)
            at org.apache.commons.dbcp.DelegatingConnection.commit(DelegatingConnection.java:238)
            at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.commit(PoolingDataSource.java:199)
            at org.hibernate.transaction.JDBCTransaction.commitAndResetAutoCommit(JDBCTransaction.java:119)
            at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:95)
            ... 64 more
    WARN  2008-10-15 20:12:01,613 [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] org.hibernate.util.JDBCExceptionReporter     - SQL Error: 0, SQLState: null
    ERROR 2008-10-15 20:12:01,614 [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] org.hibernate.util.JDBCExceptionReporter     - Already closed.
    WARN  2008-10-15 20:12:01,614 [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] org.hibernate.util.JDBCExceptionReporter     - SQL Error: 0, SQLState: null
    ERROR 2008-10-15 20:12:01,614 [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] org.hibernate.util.JDBCExceptionReporter     - Already closed.
    ERROR 2008-10-15 20:12:01,615 [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] org.springframework.orm.hibernate3.SessionFactoryUtils     - Could not close Hibernate Session
    org.hibernate.exception.GenericJDBCException: Cannot close connection

            at org.hibernate.exception.ErrorCodeConverter.handledNonSpecificException(ErrorCodeConverter.java:92)
            at org.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:80)
            at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
            at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
            at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:331)
            at org.hibernate.jdbc.ConnectionManager.cleanup(ConnectionManager.java:262)
            at org.hibernate.jdbc.ConnectionManager.close(ConnectionManager.java:194)
            at org.hibernate.impl.SessionImpl.close(SessionImpl.java:289)
            at org.springframework.orm.hibernate3.SessionFactoryUtils.doClose(SessionFactoryUtils.java:787)
            at org.springframework.orm.hibernate3.SessionFactoryUtils.processDeferredClose(SessionFactoryUtils.java:717)
            at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:192)
            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
            at com.zjpublic.webapps.filter.SessionOuttimeFilter.doFilter(SessionOuttimeFilter.java:60)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
            at com.zjpublic.webapps.filter.PermissionFilter.doFilter(PermissionFilter.java:91)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
            at com.zjpublic.webapps.filter.LoginFilter.doFilter(LoginFilter.java:147)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
            at cn.com.zjtelecom.sso.client.filter.CASFilter.doFilter(CASFilter.java:352)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
            at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3212)
            at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
            at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
            at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:1983)
            at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1890)
            at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1344)
            at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
            at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
    Caused by: java.sql.SQLException: Already closed.
            at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:77)
            at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:180)
            at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.closeConnection(LocalDataSourceConnectionProvider.java:95)
            at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:327)
            ... 24 more
      

  5.   

    按我说的配,你的程序经常是close了已经关闭的conn