Googel 标签: 李顺利 ; Java ; Java EE ; myeclipse ; spring struts ; hibernate ; ssh ; mysql ; 整合 ; 配置 ; exception


Struts+Spring+Hibernate整合注册登录


 

开发环境:

1.       MyEclipse Enterprise Workbench 7.0 Milestone-1(MyEclipse 7.0 M1)

2.       Spring 2.5

3.       Struts 1.3

4.       Hibernate 3.2

5.       Tomcat6.0

6.       MySql 5.0

7.       其他(SVN等)


 

开发需求:

1.       开发分为简单的用户注册模块和用户登录模块

其中在用户注册模块中,用户名是唯一的,也就是说需要对用户名进行验证

在用户登录模块中需要对用户的用户名和密码进行验证,验证通过,登录成功

2.

 

开发步骤:

1.       前期准备:新建数据库(test:user)

spring登录失败冻结_Struts


 

2.       在MyEclipse的DB Browser中新建DataBase Driver。(新建Driver template选择mysql,具体配置相信大家应该很熟悉了)


 

spring登录失败冻结_Struts_02


 

3.       新建一个web工程,工程名我定为SSHUser

4.       添加对Struts的支持

在工程上右键选择MyEclipse->add Struts Capabilities,如下图,(后面对其他的支持就不截图了,原理一样)

spring登录失败冻结_spring登录失败冻结_03


 

spring登录失败冻结_Spring_04


 

5.       添加对Spring的支持


 

spring登录失败冻结_Spring_05

注:添加了Spring 2.5 web libraries这个包


 

6.       添加对Hibernate的支持

spring登录失败冻结_Spring_06

注:添加Spring 2.5 Persistence Core Libraries



spring登录失败冻结_Hibernate_07

spring登录失败冻结_Spring_08

spring登录失败冻结_Hibernate_09


 

spring登录失败冻结_Struts_10


 

7.       把数据库user映射到web工程中

在DB Browser中选择user右键选择Hibernate…

spring登录失败冻结_Hibernate_11


 

spring登录失败冻结_Struts_12


 

8.       新建两个Action Form:reg 和 login

spring登录失败冻结_Myeclipse_13

spring登录失败冻结_Spring_14


 

spring登录失败冻结_Struts_15


 

9.       编写代码和配置文件(略,提供源码压缩包给大家)

就写一些程序当中最精彩的部分了

1)         整合SSH后,写了一个程序,后面发布(tomcat)的话,就会报下面的错,上网搜了一下解决方案,

说“由于Spring中的“asm-2.2.3.jar”和Hibernate中的“asm.jar”包冲突。解决办法是移除Spring2.0 AOP Libraries中的“asm-2.2.3.jar”即可”,我看了一下,确实有这两个包,删除asm-2.2.3.jar,发布成功。


 


 

2009-06-07 09:43:36,134 ERROR [org.springframework.web.context.ContextLoader] - Context initialization failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name '/reg' defined in file [D:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\testd\WEB-INF\classes\applicationContext-actions.xml]: Cannot resolve reference to bean 'userManager' while setting bean property 'um'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userManager' defined in file [D:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\testd\WEB-INF\classes\applicationContext-beans.xml]: Cannot resolve reference to bean 'UserDAO' while setting bean property 'dao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UserDAO' defined in file [D:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\testd\WEB-INF\classes\applicationContext-beans.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in file [D:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\testd\WEB-INF\classes\applicationContext-common.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V

     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275)

……


 

2)         由于本程序要用到DAO,在用户管理类中我一开始使用

UserDAO dao = new UserDAO();

 
    public void addUser(User user)
    {
       dao.save(user);
    }

 后面一直会报一个空指针异常的错误(java.lang.NullPointerException),后来也是在网上找了好久,才发现一个我不小心的地方,就是我已经使用了Spring进行依赖注入,不过上面的语句根本就没有注入,所以会报空指针异常的错误,改为下面的语句,使用Spring进行注入,也就是使用set方法就行注入即可(初学者经常犯的错误吧)。


 

private UserDAO dao; 

 
    public void setDao(UserDAO dao)
    {
       this.dao = dao;
    }

 

 
    public void addUser(User user)
    {
       dao.save(user);
    }


 

<beanid="userManager" class="com.usc.manager.userManagerImpl">
       <propertyname="dao" ref="UserDAO"/>
    </bean>


 

3)         用Struts生成jsp文件的时候,会出现一个Cancel按钮,如果不处理的话,单击会报org.apache.struts.action.InvalidCancelException异常,网上说的话:Cancel按钮的机制和submit机制是一样的,没有处理,如果要解决的话,在Struts配置文件中的每个action里面加上cancellable="true",虽然这样能够解决异常,但是治标不治本,此时如果点击Cancel按钮会当一个submit按钮来进行提交,我觉得真有点违背常理,所以我的解决方案就是1.删除cancel按钮,2.修改为reset按钮(我觉得是最好的解决方案)


 

4)         配置文件

Spring的配置文件

Spring的配置文件主要是对Spring的一些机制进行配置,如:配置sessionFactory、配置sessionFactory、配置事务的传播特性、配置那些类的哪些方法参与事务、配置action,配置一些bean

Struts的配置文件

主要是修改action中type属性,设置为spring管理,修改为

type="org.springframework.web.struts.DelegatingActionProxy">

 


 

         本人也是刚学SSH不久,难免会有一些错误的理解,如果有什么建议或者意见的,我们可以一起学习,谢谢 ,请Q我506817493。


 

木子写于2009年6月7日