整合struts1.2+spring2.5+hibernate3.2实现简单登录

 

一、先准备写一份sql文件,用来创建数据库和表,我写了mysql和oracle版本的,比较简单,代码如下:

Sql代码 复制代码
  1. -- ---------------------------------------------   
  2. -- 使用mysql5.0   
  3. -- ---------------------------------------------   
  4. drop database if exists test_login;   
  5. -- 创建数据库   
  6. create database test_login;   
  7. use test_login;   
  8. -- 创建用户信息表t_user_info   
  9. create table if not exists t_user_info(   
  10.     uuid varchar(32) primary key,   
  11.     username varchar(32) not null,   
  12.     password varchar(32) not null,   
  13.     credits int,   
  14.     ip varchar(23),   
  15.     login_datetime datetime   
  16. )engine=InnoDB default charset=utf8;   
  17. -- 插入数据   
  18. insert into t_user_info values('32d222a5dfa','admin','123456',0,'176.19.35.2',now());   
  19. commit;   
  20. -- 创建用户日志表t_user_log   
  21. create table if not exists t_user_log(   
  22.     uuid varchar(32) primary key,   
  23.     user_id varchar(32),   
  24.     ip varchar(23),   
  25.     login_log_datetime datetime   
  26. )engine=InnoDB default charset=utf8;   
  27.   
  28. -- ---------------------------------------   
  29. -- Oracle 10g    
  30. -- ---------------------------------------   
  31. -- 创建用户   
  32. create user hyanqing identified by oracle;   
  33. -- 给用户授权   
  34. grant resource,connect,dba to hyanqing;   
  35. -- 创建用户信息表t_user_info   
  36. create table t_user_info(   
  37.   uuid varchar2(32) primary key,   
  38.   username varchar2(32) not null,   
  39.   password varchar2(32) not null,   
  40.   credits number,   
  41.   ip varchar2(23),   
  42.   login_datetime date  
  43. );   
  44. -- 插入数据   
  45. insert into t_user_info values('32d222a5dfa','admin','123456',0,'176.19.35.2',sysdate);   
  46. -- 创建用户日志表t_user_log   
  47. create table t_user_log(   
  48.   uuid varchar2(32) primary key,   
  49.   user_id varchar2(32),   
  50.   ip varchar2(23),   
  51.   login_log_datetime date  
  52. );  
-- ---------------------------------------------
-- 使用mysql5.0
-- ---------------------------------------------
drop database if exists test_login;
-- 创建数据库
create database test_login;
use test_login;
-- 创建用户信息表t_user_info
create table if not exists t_user_info(
	uuid varchar(32) primary key,
	username varchar(32) not null,
	password varchar(32) not null,
	credits int,
	ip varchar(23),
	login_datetime datetime
)engine=InnoDB default charset=utf8;
-- 插入数据
insert into t_user_info values('32d222a5dfa','admin','123456',0,'176.19.35.2',now());
commit;
-- 创建用户日志表t_user_log
create table if not exists t_user_log(
	uuid varchar(32) primary key,
	user_id varchar(32),
	ip varchar(23),
	login_log_datetime datetime
)engine=InnoDB default charset=utf8;

-- ---------------------------------------
-- Oracle 10g 
-- ---------------------------------------
-- 创建用户
create user hyanqing identified by oracle;
-- 给用户授权
grant resource,connect,dba to hyanqing;
-- 创建用户信息表t_user_info
create table t_user_info(
  uuid varchar2(32) primary key,
  username varchar2(32) not null,
  password varchar2(32) not null,
  credits number,
  ip varchar2(23),
  login_datetime date
);
-- 插入数据
insert into t_user_info values('32d222a5dfa','admin','123456',0,'176.19.35.2',sysdate);
-- 创建用户日志表t_user_log
create table t_user_log(
  uuid varchar2(32) primary key,
  user_id varchar2(32),
  ip varchar2(23),
  login_log_datetime date
);

 二、打开myeclispe,创建一个web项目。再分别导入三者的jar包(别忘了要导入数据库驱动),我的导入顺序为:spring-hibernate-struts。在导入的时候可能会产生jar包冲突(这里有一些解决方式http://hyanqing1.iteye.com/admin/blogs/405329)。

三、为了方便切换mysql和oracle的连接池,新建了个属性文件(也可以直接写在spring的配置文件),顺便把日志文件log4j.properties也放到src源文件夹下,这样启动服务器可以看到更详细的信息。

Properties代码 复制代码
  1. #mysql   
  2. mysql.driverClassName = com.mysql.jdbc.Driver   
  3. mysql.url = jdbc:mysql://localhost:3306/test_login   
  4. mysql.username = root   
  5. mysql.password = root   
  6.   
  7. mysql.dialect = org.hibernate.dialect.MySQLDialect   
  8.   
  9. #Oracle   
  10. oracle.driverClassName = oracle.jdbc.driver.OracleDriver   
  11. oracle.url = jdbc:oracle:thin:@localhost:1521:orcl   
  12. oracle.username = hyanqing   
  13. oracle.password = oracle   
  14.   
  15. oracle.dialect =org.hibernate.dialect.Oracle10gDialect  

 然后打开spring的一个配置文件(加入spring时可以自动生成,若没有,新建一个spring bean文件)applicationContext.xml(名字自己定义,这里用这个),在里面加入如下代码:

Xml代码 复制代码
  1. <!-- 使用外部属性文件 -->  
  2. <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  3.     <property name="locations">  
  4.         <list>  
  5.             <value>classpath:jdbc.properties</value>  
  6.         </list>  
  7.     </property>  
  8.     <property name="fileEncoding" value="UTF-8"></property>  
  9. </bean>  
  10. <!-- 配置数据源 -->  
  11. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
  12.     <property name="driverClassName" value="${oracle.driverClassName}"/>  
  13.     <property name="url" value="${oracle.url}"/>  
  14.     <property name="username" value="${oracle.username}" />  
  15.     <property name="password" value="${oracle.password}" />  
  16. </bean>  

  四、在上面的步骤中顺便完成PO映射文件(不一定),这样可以来集成hibernate,把下面的一段代码继续加在applicationContext.xml中:

Xml代码 复制代码
  1. <!-- 集成hibernate -->  
  2. <bean id="sessionFactory"  
  3.     class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  4.     <property name="dataSource">  
  5.         <ref bean="dataSource" />  
  6.     </property>  
  7.     <property name="mappingResources">  
  8.         <list>  
  9.             <value>com/login/entity/UserInfo.hbm.xml</value>  
  10.             <value>com/login/entity/UserLoginLog.hbm.xml</value>  
  11.         </list>  
  12.     </property>  
  13.     <property name="hibernateProperties">  
  14.         <props>  
  15.             <prop key="hibernate.dialect">${oracle.dialect}</prop>  
  16.             <prop key="hibernate.show_sql">true</prop>  
  17.         </props>  
  18.     </property>  
  19. </bean>  

    接下来,可以配置事务功能,(是在业务层添加的),采用spring2.x全新方式tx/aop方式的,如下:

Xml代码 复制代码
  1. <!-- 配置Hibernate事务策略 -->  
  2. <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  3.     <property name="sessionFactory" ref="sessionFactory"></property>  
  4. </bean>  
  5.   
  6. <!-- 配置tx/aop声明式事务 -->  
  7. <tx:advice id="txAdvice" transaction-manager="txManager">  
  8.     <tx:attributes>  
  9.         <tx:method name="find*" propagation="REQUIRED" read-only="true"/>  
  10.         <tx:method name="save*" propagation="REQUIRED"/>  
  11.         <tx:method name="update*" propagation="REQUIRED"/>  
  12.         <tx:method name="*" propagation="SUPPORTS" read-only="true" />  
  13.     </tx:attributes>  
  14. </tx:advice>  
  15.   
  16. <aop:config>  
  17.     <aop:pointcut id="productServiceMethods" expression="execution(* com.login.business.*.*(..))" />  
  18.     <aop:advisor advice-ref="txAdvice" pointcut-ref="productServiceMethods" />  
  19. </aop:config>  

 

  这样hibernate就集成到了spring中,可以享用spring依赖注入和一些spring封装的hibernate模版。

五、写DAO层和Business层(整个过程都可以做的,这里略)

       下面是一段DAO层的配置代码:

    

Xml代码 复制代码
  1. <!-- DAO层的配置 -->  
  2. <bean id="userInfoDAO" class="com.login.DAO.UserInfoDAOImpl">  
  3.     <property name="sessionFactory" ref="sessionFactory"></property>  
  4. </bean>  

       下面是一段business层的配置代码如下:

 

Xml代码 复制代码
  1. <!-- business层的配置 -->  
  2. <bean id="userInfoManager" class="com.login.business.UserInfoManagerImpl">  
  3.     <property name="userInfoDAO" ref="userInfoDAO"></property>  
  4.     <property name="userLoginLogDAO" ref="userLoginLogDAO"></property>  
  5. </bean>  

    在实际的开发当中,这两层的配置文件都是单独出来,还有的是每个模块单独划出来,以减少团队的文件冲突数。

六、打开web.xml,引入spring框架

Xml代码 复制代码
  1. <!-- 引入spring -->  
  2.  <context-param>  
  3.     <param-name>contextConfigLocation</param-name>  
  4.     <param-value>classpath:config/*.xml,classpath:config/**/*.xml</param-value>  
  5.  </context-param>  
  6.  <listener>  
  7.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  8.  </listener>  

 

七、整合struts。在加入struts时会自动在web.xml文件中载入如下代码(myeclispe自动生成,也可以手动配置):

Xml代码 复制代码
  1. <!-- struts -->  
  2.   <servlet>  
  3.     <servlet-name>action</servlet-name>  
  4.     <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>  
  5.     <init-param>  
  6.       <param-name>config</param-name>  
  7.       <param-value>/WEB-INF/struts-config.xml</param-value>  
  8.     </init-param>  
  9.     <init-param>  
  10.       <param-name>debug</param-name>  
  11.       <param-value>3</param-value>  
  12.     </init-param>  
  13.     <init-param>  
  14.       <param-name>detail</param-name>  
  15.       <param-value>3</param-value>  
  16.     </init-param>  
  17.     <load-on-startup>0</load-on-startup>  
  18.   </servlet>  
  19.   <servlet-mapping>  
  20.     <servlet-name>action</servlet-name>  
  21.     <url-pattern>*.do</url-pattern>  
  22.   </servlet-mapping>  

使用struts时,配置action的时候可以享用spring的注入,同时spring的配置文件中的bean的name属性与struts-config.xml中action配置的path一致且spring中的scope="prototype",因为每次请求都会产生一个实例,spring中配置如下:

Xml代码 复制代码
  1. <!-- Struts Action -->  
  2. <bean name="/userLogin" class="com.login.struts.action.UserLoginAction" scope="prototype">  
  3.     <property name="userInfoManger" ref="userInfoManager"></property>  
  4. </bean>  

 struts-config.xml中配置(注意action的type属性:type="org.springframework.web.struts.DelegatingActionProxy">,采用spring的代理)如下:

Xml代码 复制代码
  1. <action  
  2.   input="/index.jsp"  
  3.   name="userInfoForm"  
  4.   path="/userLogin"  
  5.   scope="request"  
  6.   validate="true"  
  7.   type="org.springframework.web.struts.DelegatingActionProxy">  
  8.   <forward name="suc" path="/loginOk.jsp"></forward>  
  9.   <forward name="input" path="/index.jsp"></forward>  
  10. </action>  

 这样,三者之间的配置文件就差不多了,写的有点乱,这样你就可以根据上面的架子增加各层的文件,如PO映射文件、DAO层、business层、struts的FormBean和Action以及一些jsp页面等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值