s2sh框架搭建(辅助工具:MyEclipse)及解决一些遇到的问题
1.新建一個web project
2.首先生成Hibernate Facet
3.Hibernate Facet 安裝步驟
?
4.然后是spring facet安裝步驟
?
5.最后是struts facet 的配置
?6.最后的整體布局如下所示
7.在服務器上運行,發現如下錯誤:
嚴重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.service.UnknownUnwrapTypeException: Cannot unwrap to requested type [javax.sql.DataSource]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)........主要是沒有在applicationContext.xml中配置?DataSource 這個bean,配置好后將其注入sessionFactory
<!--新加入 datasource --><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/hjzgg_test?characterEncoding=UTF-8" /><property name="username" value="root" /><property name="password" value="hjzgg5211314" /></bean><bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="configLocation"value="classpath:hibernate.cfg.xml"></property><!--新加入 將dataSource注入到sessionFactory中 --><property name="dataSource" ref="dataSource"></property><property name="hibernateProperties"><value>hibernate.dialect=org.hibernate.dialect.MySQL5Dialecthibernate.hbm2ddl.auto=updatehibernate.show_sql=truehibernate.format_sql=falsehibernate.cache.use_second_level_cache=truehibernate.cache.use_query_cache=falsehibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider hibernate.current_session_context_class=thread <!-- 解決Hibernate4 No Session found for current thread --> </value> </property>8.新建PersonDao(DAO層),它的實現類PersonDaoImpl,以及 Action類?LoginAction
在applicationContext.xml中添加如下代碼:
<bean id="personDao" class="com.xunchang.PersonDaoImpl"><!-- 采用依賴注入傳入SessionFactory的引用 --><property name="sessionFactory" ref="sessionFactory"/></bean><bean id="login" class="com.xunchang.LoginAction"> <property name="personDao" ref="personDao"/></bean>9.POJO 與 hibernate層:新建POJO(普通java類, 對于每一個變量擁有getter 和 setter方法),新建 映射hibernate持久化類person.cfg.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.xunchang"><class name="Person" table="home402"><!-- 定義持久化類的表示屬性 --><id name="personId" column="personId" type="java.lang.Integer"><!-- 定義主鍵生成策略 --><generator class="identity"/></id><property name="person_name" column="person_name" type="java.lang.String"/><property name="person_age" column="person_age" type="java.lang.Integer"/></class> </hibernate-mapping>然后在applicationContext.xml中的sessionFactory(bean)中加載該映射文件如下:
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="configLocation"value="classpath:hibernate.cfg.xml"></property><!--新加入 將dataSource注入到sessionFactory中 -->.............<!--通過配置文件的方式獲取數據源--><property name="mappingResources"><list><!-- 以下用來列出所有的PO映射文件 --><value>person.cfg.xml</value></list></property> </bean>10.運行服務器,問題又來了,如下:
org.hibernate.HibernateException: No Session found for current threadorg.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97)org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1041)com.xunchang.PersonDaoImpl.getSession(PersonDaoImpl.java:16)com.xunchang.PersonDaoImpl.findAllPerson(PersonDaoImpl.java:63)com.xunchang.LoginAction.execute(LoginAction.java:20)sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)Hibernate4 No Session found for current thread原因: ?http://www.yihaomen.com/article/java/466.htm
解決方法:在applicationContext.xml中的sessionFactory 中<property name="hibernateProperties"></property>加入?hibernate.current_session_context_class=thread
<property name="hibernateProperties"><value>......hibernate.current_session_context_class=thread <!-- 解決Hibernate4 No Session found for current thread --></value> </property>11.最后一個問題就是hibernate 中文亂碼,解決方案如下:
//寫一個字符集過濾器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 javax.servlet.http.HttpServlet; public class SetCharacterEncodingFilter extends HttpServlet implements Filter {public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); chain.doFilter(request, response); } public void init(FilterConfig config) throws ServletException{ } public void destroy(){ } }
//在web.xml中加入如下代碼,問題解決
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.xunchang.SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
?
轉載于:https://www.cnblogs.com/hujunzheng/p/4366980.html
總結
以上是生活随笔為你收集整理的s2sh框架搭建(辅助工具:MyEclipse)及解决一些遇到的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支付宝相互保可以保障多少
- 下一篇: 建设银行中午休息吗