一、先准备写一份sql文件,用来创建数据库和表,我写了mysql和oracle版本的,比较简单,代码如下:
-- --------------------------------------------- -- 使用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源文件夹下,这样启动服务器可以看到更详细的信息。
#mysql mysql.driverClassName = com.mysql.jdbc.Driver mysql.url = jdbc:mysql://localhost:3306/test_login mysql.username = root mysql.password = root mysql.dialect = org.hibernate.dialect.MySQLDialect #Oracle oracle.driverClassName = oracle.jdbc.driver.OracleDriver oracle.url = jdbc:oracle:thin:@localhost:1521:orcl oracle.username = hyanqing oracle.password = oracle oracle.dialect =org.hibernate.dialect.Oracle10gDialect
然后打开spring的一个配置文件(加入spring时可以自动生成,若没有,新建一个spring bean文件)applicationContext.xml(名字自己定义,这里用这个),在里面加入如下代码:
<!-- 使用外部属性文件 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> <property name="fileEncoding" value="UTF-8"></property> </bean> <!-- 配置数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${oracle.driverClassName}"/> <property name="url" value="${oracle.url}"/> <property name="username" value="${oracle.username}" /> <property name="password" value="${oracle.password}" /> </bean>
四、在上面的步骤中顺便完成PO映射文件(不一定),这样可以来集成hibernate,把下面的一段代码继续加在applicationContext.xml中:
<!-- 集成hibernate --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="mappingResources"> <list> <value>com/login/entity/UserInfo.hbm.xml</value> <value>com/login/entity/UserLoginLog.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${oracle.dialect}</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean>
接下来,可以配置事务功能,(是在业务层添加的),采用spring2.x全新方式tx/aop方式的,如下:
<!-- 配置Hibernate事务策略 --> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 配置tx/aop声明式事务 --> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="find*" propagation="REQUIRED" read-only="true"/> <tx:method name="save*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="*" propagation="SUPPORTS" read-only="true" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="productServiceMethods" expression="execution(* com.login.business.*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="productServiceMethods" /> </aop:config>
这样hibernate就集成到了spring中,可以享用spring依赖注入和一些spring封装的hibernate模版。
五、写DAO层和Business层(整个过程都可以做的,这里略)
下面是一段DAO层的配置代码:
<!-- DAO层的配置 --> <bean id="userInfoDAO" class="com.login.DAO.UserInfoDAOImpl"> <property name="sessionFactory" ref="sessionFactory"></property> </bean>
下面是一段business层的配置代码如下:
<!-- business层的配置 --> <bean id="userInfoManager" class="com.login.business.UserInfoManagerImpl"> <property name="userInfoDAO" ref="userInfoDAO"></property> <property name="userLoginLogDAO" ref="userLoginLogDAO"></property> </bean>
在实际的开发当中,这两层的配置文件都是单独出来,还有的是每个模块单独划出来,以减少团队的文件冲突数。
六、打开web.xml,引入spring框架
<!-- 引入spring --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:config/*.xml,classpath:config/**/*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
七、整合struts。在加入struts时会自动在web.xml文件中载入如下代码(myeclispe自动生成,也可以手动配置):
<!-- struts --> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>3</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>3</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
使用struts时,配置action的时候可以享用spring的注入,同时spring的配置文件中的bean的name属性与struts-config.xml中action配置的path一致且spring中的scope="prototype",因为每次请求都会产生一个实例,spring中配置如下:
<!-- Struts Action --> <bean name="/userLogin" class="com.login.struts.action.UserLoginAction" scope="prototype"> <property name="userInfoManger" ref="userInfoManager"></property> </bean>
struts-config.xml中配置(注意action的type属性:type="org.springframework.web.struts.DelegatingActionProxy">,采用spring的代理)如下:
<action input="/index.jsp" name="userInfoForm" path="/userLogin" scope="request" validate="true" type="org.springframework.web.struts.DelegatingActionProxy"> <forward name="suc" path="/loginOk.jsp"></forward> <forward name="input" path="/index.jsp"></forward> </action>
这样,三者之间的配置文件就差不多了,写的有点乱,这样你就可以根据上面的架子增加各层的文件,如PO映射文件、DAO层、business层、struts的FormBean和Action以及一些jsp页面等等。