总结一下整合Struts2+Hibernate3+Spring4开发Java Web应用过程

来源:互联网 发布:淘宝收藏软件哪个靠谱 编辑:程序博客网 时间:2024/06/05 19:22
-
--------------------------------------------------------------------------------------------------------------------------------------------------------------
开发实例:用户管理系统
实现功能:系统与本地数据库连接,支持在网页上用户的登陆,注册,与查询用户信息。
开发流程
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.编写用户登录action类
     ---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层Action类中的属性service是Serivce层中的对象(通过Spring注入Action类),但当Action被实例化调用该属性service时发现为null,没有注入成功.
解决:
a.有可能在struts.xml中配置action时class值设了action类名,没有用Spring中Actionbean的id值作class值(即是不通过Spring容器拿到Action实例,而是自己用类名实例化);
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: 
Java代码  
  1. @Autowired  
  2.     public void setSessionFactoryOverride(SessionFactory sessionFactory)  
  3.     {  
  4.   
  5.         super.setSessionFactory(sessionFactory);  
  6.     }  
第二步:在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包





     
0 0
原创粉丝点击