Struts+Spring+Hibernate配置全过程

 
工具:
    Eclipse3.1 MyEclipse4.03 Tomcat 5.5.9 Properties Editor 插件、 MySql4.1.13
 
新建工程:名称为 login
 
创建 Struts 框架
 
创建 index.jsp ,增加一链接指向 login.jsp
 
按下 Ctrl + N ,创建 login.jsp LoginAction ,使用 MyEclipse 的向导就可以了, 记得选对正确的版本
 
ActionForm 配置页中选择类型为动态 Form ,并继承于 DynaValidatorForm ,新增两个属性: username password ,在创建 jsp 文件打上钩,将路径改为 /login.jsp ,然后下一步,改 LoginAction Input source 改为 /login.jsp ,点击完成
 
按下 Ctrl + N 创建一个 forwards 记得选对正确的版本
name 输入 indexGo
路径选择 /index.jsp
 
配置 validator
先添加 Struts 插件,使用向导
Plugin class : org.apache.struts.validator.ValidatorPlugIn
Property : pathnames
Value : /WEB-INF/validator-rules.xml,/WEB-INF/validation.xml
这里需要两个 xml 文件
现在创建 “validation.xml”  文件
 
在这里说明一点,我使用 MyEclipse 创建的 Struts 框架中缺少了 validator-rules.xml 文件,需要动拷贝到 WEB-INF 目录中
此文件可以到 http://struts.apache.org/ 下载
 
文件内容如下:
<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>
 
编辑资源文件 “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} 必需填写!
 
修改 struts-config.xml 文件
在以下位置增加绿色字体部份
<action-mappings >
    <action
      attribute="loginForm"
      input="/login.jsp"
      name="loginForm"
      path="/login"
      scope="request"
     
validate="true"
      type="com.test.struts.action.LoginAction" />
  </action-mappings>
 
这里说明提交的数据必需经过验证,而验证则是通过 validator 框架进行的。
 
修改 LoginAction.java 文件的 execute 方法,内容如下
public ActionForward execute(
  ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) {
  DynaValidatorForm loginForm = (DynaValidatorForm) form;
  
String username=loginForm.getString("username");
  String password=loginForm.getString("password");
  if(username.equals("test")||password.equals("test")){
   return mapping.findForward("indexGo");
  }else{
   return mapping.getInputForward();
  }
 }
 
现在再修改一下 login.jsp
增加以下绿色字体部份
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
 
其中 charset=UTF-8 是使用 UTF-8 的字符编码,这也是为了支持国际化而使用的。
 
好了,现在可以启动 Tomcat 进行测试了
http://localhost/login/  这里说明一下,我的 Tomcat 已经装端口号改为 80 了,所以就不必使用 http://localhost:8080/login/ 这样的方法了。
 
如果不输入任何数据而直接提交表单的话就可以看到效果了。
 
好了,如果没有什么问题的话就继续往下看吧,如果有问题的话就得往上看了 ^_^
 
现在创建 Spring 框架了,在这里我将 Spring 所有的包全部加载进去,因为我还不知道具体用到哪些类,全部加进去方便点
  这里要注意 spring 的版本问题这里用的是 spring1.2  而不是 2.0
单选框选第二个,这样的话所有的类库和标签等都将拷贝到项目中去,这样方便以后的布署
下一步后是创建配置文件,将文件放到 “WebRoot/WEB-INF” 目录下,文件名称为 “applicationContext.xml”
 
 
配置 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="com.test.struts.action.LoginAction" singleton="false"></bean>
</beans>
 
绿色字体是关于转交控制权的配置内容
 
属性 singleton="false" ,指明了 Action 的实例获取方式为每次重新创建。解决了 Struts 中令人诟病的线程安全问题( Struts 中,由一个 Action 实例处理所有的请求,这就导致了类公用资源在并发请求中的线程同步问题。)(摘自 spring 开发指南)
 
这时如果你要进行测试也是可以的,不过为了省点时间就不进行测试了。
 
建立数据库在 这里我使用的是 mysql 4.1.13
 
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=UTF8;
 
添加记录 insert into user (USERNAME,PASSWORD) values ('test','test')
 
创建 Hibernate 框架
在配置界面中配置数据库的连接部份,重要的是点击链接将 jdbc 拷贝到 lib 目录中
使用 MyEclipse 的数据 Database Explorer 工具创建 User.hmb.xml AbstractUser.java User.java 映射文件
创建完成后可以将自动生成的 hibernate.cfg.xml 删除
 
创建 UserDAO.java UserDAOImp.java
UserDAO.java
public interface UserDAO {
   public abstract boolean isValidUser(String username, String password);
}
 
UserDAOImp.java
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.test.Hibernate.SessionFactory;
public class UserDAOImp extends HibernateDaoSupport implements UserDAO {
    private SessionFactory sessionFactory;
    private static String hql = "from User u where u.username=? ";
    public boolean isValidUser(String username, String password) {
       List userList = this.getHibernateTemplate().find(hql, username);
       if (userList.size() > 0) {
           return true;
       }
       return false;
    }
}
 
修改 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 {

 
private UserDAO userDAO ;
 
 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/test</value>
  </property>
  <property name="username">
   <value>root</value>
  </property>
  <property name="password">
   <value>root</value>
  </property>
 </bean>
 
 <!-- 配置 sessionFactory, 注意这里引入的包的不同   -->
 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.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">org.hibernate.dialect.MySQLDialect</prop>
    <prop key="hibernate.show_sql">true</prop>
   </props>
  </property>
 </bean>
 
 <bean id="transactionManager" class="org.springframework.orm.hibernate3.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>
 
现在可以进行测试了!
 
在编写代码有配置内容时一定要注意 hibernate hibernate3 ,这两个包的名字就只差一个字,千万不要有错,否则找错误可是很难的。
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值