-
--------------------------------------------------------------------------------------------------------------------------------------------------------------
开发实例:用户管理系统实现功能:系统与本地数据库连接,支持在网页上用户的登陆,注册,与查询用户信息。
开发流程:
SSH整合开发--用户管理系统
--0.环境的搭建
---a.spring和hibernate的整合
---b.spring和Struts的整合
---c.配置文件的配置
--1.数据库的实现
---a.建表:id,name,password,type
--2.Hibernate持久层的设计
---a.编写持久化类
---b.编写映射文件
--3.Dao层设计
---a.编写Dao层接口
---b.编写Dao层接口实现类
--4.业务逻辑层的设计
---a.编写service层接口
---b.编写service层接口的实现类
---c.配置spring的配置文件,为service的实现类注入dao组件
--5.完成用户登录的设计--表现层Struts2
---a.编写用户登录act ion类
---b.编写用户登录login界面jsp文件
---c.配置spring配置文件和web.xml和 struts.xml
----------------------------------------------------------------------------------------------------------------------------------------------------------------
开发中遇到的问题:
Q1:Spring和Hibernate整合后当通过Spring中的this.getHibernateTemplate.find()调用find方法时,出现错误
user is not mapped [from user]
解决:
原错误代码:
public List<User> findAll() {
String hql = "from user";
return (List<User>)this.getHibernateTemplate().find( hql);
}
表名是user,会出现user is not mapped [from user]这个语法错误
原因:Hibernate是对类查询的,原hql语句“from user”中user是数据表,
而持久化类是User,所以将hql语句改成“from User”即可解决错误。
----------------------------------------------------------------------------------------
Q2:Sturts层Act ion类中的属性service是Serivce层中的对象(通过Spring注入Act ion类),但当Act ion被实例化调用该属性service时发现为null,没有注入成功.
解决:
a.有可能在struts.xml中配置act ion时class值设了act ion类名,没有用Spring中Actionbean的id值作class值(即是不通过Spring容器拿到Act ion实例,而是自己用类名实例化);
b.有可能在struts.xml配置文件中没有设置属性
<constant name="struts.objectFactory" value="spring">中value没有设值为Spring的值
----------------------------------------------------------------------------------------
Q3:错误Caused by: Cannot locate the chosen ObjectFactory implementation: spring - [unknown location]
解决:
1.添加struts2-spring-plugin jar包
2.添加下述配置文件xml
<!-- Struts2配置 --> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> <init-param> <param-name>config</param-name> <param-value>struts-default.xml,struts-plugin.xml,struts.xml</param-value> </init-param> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
----------------------------------------------------------------------------------------
Q4:Spring整合Hibernate出错,异常 'sessionFactory' or 'hibernateTemplate' is required的解决方法
解决:第一步:在继承HibernateDaoSupport类的DaoImp类中中增加如下方法,使用@Autowired:
- @Autowired
- public void setSessionFactoryOverride(SessionFactory sessionFactory)
- {
- super.setSessionFactory(sessionFactory);
- }
第二步:在spring配置文件中配置DaoImp类的bean元素时加入设值注入。
<property name= "sessionFactory">
<ref bean ="sessionFactory" />
</property>
----------------------------------------------------------------------------------------
Q5:报错java.lang.NoClassDefFoundError: javax/transaction/TransactionManager
解决: google了一下,原来是少了hibernate包中的jta.jar。
----------------------------------------------------------------------------------------
Q6:报错Caused by: java.lang.NoClassDefFoundError:javax/persistence/EntityListeners
解决:这个是hibernate3.6版本的;所以还缺少JPA jar 包;还需要导入jar包。可以在Hibernate 3.6 distro: hibernate-distribution-3.6.0.Final/lib/jpa/hibernate-jpa-2.0-api-1.0.0.Final.jar找到之后导入就可以了。
----------------------------------------------------------------------------------------
Q7:Struts2中出现 严重: Dispatcher initialization failed错误
解决:拦截器初始化失败,一般是缺少了struts2相关的jar包