整合struts1.2+spring2.5+hibernate3.2实现简单登录
来源:互联网 发布:农夫抢购软件 编辑:程序博客网 时间:2024/05/21 18:47
一、先准备写一份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
- );
-- ----------------------------------------------- 使用mysql5.0-- ---------------------------------------------drop database if exists test_login;-- 创建数据库create database test_login;use test_login;-- 创建用户信息表t_user_infocreate 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_logcreate 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_infocreate 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_logcreate 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
#mysqlmysql.driverClassName = com.mysql.jdbc.Drivermysql.url = jdbc:mysql://localhost:3306/test_loginmysql.username = rootmysql.password = rootmysql.dialect = org.hibernate.dialect.MySQLDialect#Oracleoracle.driverClassName = oracle.jdbc.driver.OracleDriveroracle.url = jdbc:oracle:thin:@localhost:1521:orcloracle.username = hyanqingoracle.password = oracleoracle.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>
<!-- 使用外部属性文件 --><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>
<!-- 集成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事务策略 --><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>
<!-- 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>
<!-- 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>
<!-- 引入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 --> <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 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>
<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页面等等。
- 整合struts1.2+spring2.5+hibernate3.2实现简单登录
- Struts1.3 +hibernate3.2+Spring2.5整合
- struts1.2+spring2.0+hibernate3.2 整合
- myeclipse整合Struts1.2+Hibernate3.2+Spring2.5
- Struts1.2+Spring2.0+Hibernate3.1整合总结 MyEclipse5.5
- spring2.5整合struts1.2
- struts1.2+spring2.0+hibernate3.2 整合的小示例
- MyEclipse6.0.1整合Spring2.0+Struts1.2+Hibernate3.2
- Java : Hibernate3.2 与 Spring2.5整合
- 整合Spring2.5+Struts2.1+Hibernate3.2
- dwr2.0+spring2.5+hibernate3.2整合
- Struts2.1.6 + Spring2.5+Hibernate3.2整合
- struts1.2 + hibernate3.2 + Spring2.5集成配置
- Struts1.2&Spring2.5&Hibernate3.2集成---非注解方式
- Struts1.2&Spring2.5&Hibernate3.2集成---全注解方式
- struts1.3 spring2.5 hibernate3.2问题解决过程
- struts1.3 spring2.5 hibernate3.2问题解决过程
- Struts1.2+Spring2.0+Hibernate3示例
- 豆丁Java面试题
- wince下 listbox读写txt文体
- 无法打开.csproj
- exp/imp导出导入工具的使用
- 数据库连接失败Communications link failure mysql
- 整合struts1.2+spring2.5+hibernate3.2实现简单登录
- KVM 虚拟机在物理主机之间迁移的实现
- Android内存监测工具DDMS-->Heap
- Java类型和本地类型对应
- MFC弹出对话框不响应鼠标,只相应回车键的解决方法
- linux select 函数用法!
- c++中的虚函数
- Aspose.Words把DataTable 中的数据导出到word中
- PHP 遍历文件夹下的内容