技术开发 频道

struts+hibernate+spring简单实例



ApplicationResources.properties

 

prompt.username=User Name
prompt.password=User Password

 

errors.required={0} is required.

 

ApplicationResources_zh_CN.properties

 

prompt.username=用户名称
prompt.password=登录密码

 

errors.required={0} 是必须的.

 

validation.xml

 

<form-validation> <formset> <form name="loginForm"> <field property="username" depends="required"> <arg0 key="prompt.username" /> </field> <field property="password" depends="required"> <arg0 key="prompt.password" /> </field> </form> </formset> </form-validation>

到此已经完成了全部代码!

 

******************************************************************** 现在创建spring框架

 

配置struts-config.xml文件,添加(spring)的插件

 

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"> <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" /> </plug-in>

修改LoginAction配置

 

原:

 

<action attribute="loginForm" input="/login.jsp" name="loginForm" path="/login" scope="request" validate="true" type="com.test.struts.action.LoginAction" /> </action-mappings>

改为:

 

<action
      attribute="loginForm"
      input="/login.jsp"
      name="loginForm"
      path="/login"
      scope="request"
      validate="true"
      type="org.springframework.web.struts.DelegatingActionProxy" />

 

  </action-mappings>

 

绿色字体部份为修改内容

 

这里将使用spring的代理器来对Action进行控制

 

当提交到/login.do是将控制权交给了spring,然后由spring来决定是否转回到struts的Action

 

现在来配置spring

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "
http://www.springframework.org/dtd/spring-beans.dtd">

 

<beans>
 <bean name="/login" class="net.xiaxin.action.LoginAction" singleton="false"></bean>
</beans>

 

绿色字体是关于转交控制权的配置内容属性singleton="false",指明了Action 的实例获取方式为每次重新创建。解决了Struts中令人诟病的线程安全问题(Struts中,由一个Action实例处理所有的请求,这就导致了类公用资源在并发请求中的线程同步问题。)(摘自spring开发指南)

 

建立数据库在 这里我使用的是mysql4.1.1x

 

CREATE TABLE `user` ( `ID` int(11) NOT NULL auto_increment, `USERNAME` varchar(50) NOT NULL default '', `PASSWORD` varchar(50) NOT NULL default '', PRIMARY KEY (`ID`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

创建Hibernate框架

 

使用MyEclipse的数据Database Explorer工具创建User.hmb.xml、AbstractUser.java、User.java映射文件

 

创建完成后可以将自动生成的hibernate.cfg.xml删除

 

创建UserDAO.java、UserDAOImp.java

 

修改LoginAction.java文件,使用userDao的方法来进行用户验证

 

package com.test.struts.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.validator.DynaValidatorForm; import com.test.UserDAO; public class LoginAction extends Action { public UserDAO getUserDAO() { return userDAO; } public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; } public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { DynaValidatorForm loginForm = (DynaValidatorForm) form; // TODO Auto-generated method stub String username = (String) loginForm.get("username"); String password = (String) loginForm.get("password"); loginForm.set("password", null); if (userDAO.isValidUser(username,password)) { return mapping.findForward("indexGo"); } else { return mapping.getInputForward(); } } }

绿色字体为修改部份

 

现在剩下最后的spring配置了

 

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/test</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value></value> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="dataSource"> <ref local="dataSource" /> </property> <property name="mappingResources"> <list> <value>com\test\Hibernate\User.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="userDAO" class="com.test.UserDAOImp"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="target"> <ref local="userDAO" /> </property> <property name="transactionAttributes"> <props> <prop key="insert*">PROPAGATION_REQUIRED</prop> <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> <bean name="/login" class="com.test.struts.action.LoginAction" singleton="false"> <property name="userDAO"> <ref bean="userDAOProxy" /> </property> </bean> </beans>

现在可以进行测试了!
0
相关文章