Struts1.2+Spring2.5+Hibernate3.2框架搭建(四)
???? 在web.xml文件中配置监听器以及web应用的初始化参数:
??? <!-- 向监听器类中传递初始化参数,以获取beanFactory对象 -->
??? <context-param>
?????? <param-name>contextConfigLocation</param-name>
?????? <param-value>classpath:applicationContext.xml</param-value>
??? </context-param>
??? <!--
?????? 使用监听器初始化Spring的beanFactory,并将其放入到Context中,在使用时将其取出,以获取IOC容器中的bean
??? -->
??? <listener>
?????? <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
??? </listener>
在web.xml文件中配置Spring中的过滤器解决中文乱码问题
??? <!-- 使用Spring中的过滤器解决中文乱码问题 -->
??? <filter>
?????? <filter-name>characterEncodingFilter</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>
??? <filter-mapping>
?????? <filter-name>characterEncodingFilter</filter-name>
?????? <url-pattern>/*</url-pattern>
</filter-mapping>
在web.xml文件中配置Spring中的过滤器解决hibernate延迟加载的问题
??? <!-- 解决hibernate延迟加载带来的异常,配置过滤器使Session在请求完成之后再关闭 -->
??? <filter>
?????? <filter-name>OpenSessionInViewFilter</filter-name>
?????? <filter-class>
?????????? com.zlk.util.OpenSessionInViewFilter</filter-class>
?????? <init-param>
?????????? <param-name>singleSession</param-name>
?????????? <param-value>true</param-value>
?????? </init-param>
</filter>
??? <filter-mapping>
?????? <filter-name>OpenSessionInViewFilter</filter-name>
?????? <url-pattern>/*</url-pattern>
</filter-mapping>
注:我重写了org.springframework.orm.hibernate3.support.OpenSessionInViewFilter类
下面是我重写的类:
① com.zlk.override.OpenSessionInViewFilter
package com.zlk.override;
?
import org.hibernate.FlushMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.dao.DataAccessResourceFailureException;
import org.springframework.orm.hibernate3.SessionFactoryUtils;
?
public class OpenSessionInViewFilter extends
?????? org.springframework.orm.hibernate3.support.OpenSessionInViewFilter {
?
??? protected void closeSession(Session session, SessionFactory sessionFactory) {
?????? // TODO Auto-generated method stub
??????? session.flush();
?????? super.closeSession(session, sessionFactory);
??? }
?
??? protected Session getSession(SessionFactory sessionFactory)
?????????? throws DataAccessResourceFailureException {
?????? // TODO Auto-generated method stub
??? ??? Session session = SessionFactoryUtils.getSession(sessionFactory, true);?
??? ??? this.setFlushMode(FlushMode.COMMIT);
??? ??? return session;???
??? }
?
}
② com.zlk.util.OpenSessionInViewFilter
package com.zlk.util;
?
public class OpenSessionInViewFilter extends
?????? com.zlk.override.OpenSessionInViewFilter {
?
}
?
</plug-in>这个了吗,为什么加了之后OpenSessionInViewFilter不管用了呢, </plug-in>
这个了吗,为什么加了之后OpenSessionInViewFilter不管用了呢,
这是因为他俩的启动顺序的问题,你必须让spring先启动才行。
OpenSessionInViewFilter 是在web.xml中的,而你的spring是加载在Struts的配置文件中的 ,这样你的spring还没启动起来呢,就用她的过滤器,你想想可能么。所以你得该一下spring的启动方式,把他放在web。xml中,让他先启动。这样就可以用他的过滤器了。 4 楼 zdzyh1989 2011-04-19 其实spring是放在web.xml中启动的,
这个问题时期找到原因了,因为分层不彻底,所以service层和action并没有分开,调用的时候就没有正确的处理opensessionview
http://www.iteye.com/topic/15057