您的位置:首页 > 编程语言 > Java开发

s2sh框架搭建(辅助工具:MyEclipse)及解决一些遇到的问题

2015-03-25 22:26 405 查看
1.新建一个webproject



2.首先生成HibernateFacet



3.HibernateFacet安装步骤



4.然后是springfacet安装步骤









5.最后是strutsfacet的配置



6.最后的整体布局如下所示



7.在服务器上运行,发现如下错误:

严重:Exceptionsendingcontextinitializedeventtolistenerinstanceofclassorg.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'transactionManager'definedinclasspathresource[applicationContext.xml]:Invocationofinitmethodfailed;nestedexceptionisorg.hibernate.service.UnknownUnwrapTypeException:Cannotunwraptorequestedtype[javax.sql.DataSource] atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) ........

主要是没有在applicationContext.xml中配置DataSource这个bean,配置好后将其注入sessionFactory

<!--新加入datasource-->
<beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<propertyname="driverClassName"value="com.mysql.jdbc.Driver"/>
<propertyname="url"value="jdbc:mysql://localhost:3306/hjzgg_test?characterEncoding=UTF-8"/>
<propertyname="username"value="root"/>
<propertyname="password"value="hjzgg5211314"/>
</bean>

<beanid="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<propertyname="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
<!--新加入将dataSource注入到sessionFactory中-->
<propertyname="dataSource"ref="dataSource"></property>

<propertyname="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.format_sql=false
hibernate.cache.use_second_level_cache=true
hibernate.cache.use_query_cache=false
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.current_session_context_class=thread<!--解决Hibernate4NoSessionfoundforcurrentthread-->

</value></property>


8.新建PersonDao(DAO层),它的实现类PersonDaoImpl,以及Action类LoginAction

在applicationContext.xml中添加如下代码:

    <beanid="personDao"class="com.xunchang.PersonDaoImpl">
<!--采用依赖注入传入SessionFactory的引用-->
<propertyname="sessionFactory"ref="sessionFactory"/>
</bean>
<beanid="login"class="com.xunchang.LoginAction">
<propertyname="personDao"ref="personDao"/>
</bean>


9.POJO与hibernate层:新建POJO(普通java类,对于每一个变量拥有getter和setter方法),新建映射hibernate持久化类person.cfg.xml文件如下:

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEhibernate-mapping
PUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mappingpackage="com.xunchang">
<classname="Person"table="home402">
<!--定义持久化类的表示属性-->
<idname="personId"column="personId"type="java.lang.Integer">
<!--定义主键生成策略-->
<generatorclass="identity"/>
</id>
<propertyname="person_name"column="person_name"type="java.lang.String"/>
<propertyname="person_age"column="person_age"type="java.lang.Integer"/>
</class>
</hibernate-mapping>


然后在applicationContext.xml中的sessionFactory(bean)中加载该映射文件如下:

<beanid="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<propertyname="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
<!--新加入将dataSource注入到sessionFactory中-->
.......
......
<!--通过配置文件的方式获取数据源-->
<propertyname="mappingResources">
<list>
<!--以下用来列出所有的PO映射文件-->
<value>person.cfg.xml</value>
</list>
</property>
</bean>


10.运行服务器,问题又来了,如下:

org.hibernate.HibernateException:NoSessionfoundforcurrentthread org.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(NativeMethod)

Hibernate4NoSessionfoundforcurrentthread原因: 'target='_blank'>http://www.yihaomen.com/article/java/466.htm
解决方法:在applicationContext.xml中的sessionFactory中<propertyname="hibernateProperties"></property>加入hibernate.current_session_context_class=thread

<propertyname="hibernateProperties">
<value>
......
hibernate.current_session_context_class=thread<!--解决Hibernate4NoSessionfoundforcurrentthread-->
</value></property>


11.最后一个问题就是hibernate中文乱码,解决方案如下:

//写一个字符集过滤器
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.http.HttpServlet;
publicclassSetCharacterEncodingFilterextendsHttpServletimplementsFilter{
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsServletException,IOException{
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
chain.doFilter(request,response);
}

publicvoidinit(FilterConfigconfig)throwsServletException{
}

publicvoiddestroy(){
}
}

//在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>


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐