基于Struts+Spring+Hibernate的Web应用框架的搭建(一)

本文详细介绍了一个结合Struts、Spring和Hibernate(SSH)框架的简单用户注册系统的搭建过程,包括环境配置、页面设计、代码实现等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   
这个Web应用很简单,就是实现一个用户注册页面,当用户在register.jsp页面输入注册信息,点保存,如果成功,进入registerSuccess.jsp页面。这个应用虽然很小,但它也有三层组成,表示层由Struts框架负责,业务层由Spring框架负责,持久层由Hibernate框架负责。
开发环境:MyEclipse 5+ MySQL4 + Struts1.3.5 + Spring2.0.1 + Hibernate3.2.1 + Tomcat5.0.19 + jdk1.4.2_06.
1.       首先,我们在MyEclipse中新建一个Web Project ,login;
2.然后把Struts,Spring,Hibernate框架所需要的jar包以及MySQL的驱动拷贝到WEB-INF/lib下;
3.创建用户注册页面register.jsp
 
<%@ taglib uri = "http://struts.apache.org/tags-bean" prefix = "bean" %>
<%@ taglib uri = "http://struts.apache.org/tags-html" prefix = "html" %>
< html >
 
< head >
  < title >< bean:message key = "register.title" /></ title >
</ head >
 
< body >
< html:errors />
  < html:form action = "register.do" >
    < table >
      < tr >
        < td >< bean:message key = "register.username" /> : </ td >
        < td >< html:text property = "register.username" /></ td >
      </ tr >
      < tr >
        < td >< bean:message key = "register.password" /> : </ td >
        < td >< html:password property = "register.password" /></ td >
      </ tr >
       < tr >
        < td >< bean:message key = "register.email" /> : </ td >
        < td >< html:text property = "register.email" /></ td >
      </ tr >
      < tr >
        < td colspan = "2" align = "center" >
        < html:submit >< bean:message key = "register.submit" /></ html:submit >
        </ td >
      </ tr >
    </ table >
  </ html:form >
</ body >
 
</ html >
4. 创建注册成功后显示的页面 registerSuccess.jsp
<%@ taglib uri = " http://struts.apache.org/tags-bean " prefix = "bean" %>
< html >
 
< head >
  < title >< bean:message key = "register.title" /></ title >
</ head >
 
< body >
  < bean:message key = "register.success" />
</ body >
 
</ html >
 
5.         创建消息资源文件registermessages.properties
 
register.title = Register
register.username = UserName
register.password = Password
register.email = Email
register.submit = Submit
register.success = Register Success!
 
6.      由于我们使用动态 ActionForm, 只需在 Struts-config.xml 中配置与 register.jsp 页面中 form 对应的 ActionForm
7.         创建配置文件 Struts-config.xml
<? xml version = "1.0" encoding = "iso-8859-1" ?>
<! DOCTYPE struts-config PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
        "http://struts.apache.org/dtds/struts-config_1_3.dtd" >
<!--
 Default configuration file for examples application.
 Each module also has its own struts-config under: /WEB-INF/$MODULE/
 @version $Revision: 1.9 $ $Date: 2006-02-13 18:39:49 -0700 (Mon, 13 Feb 2006) $
-->
< struts-config >
  < form-beans >
   <!— 配置 register.jsp form 对应的 ActionFrom-->
    < form-bean name = "registerForm" type = "org.apache.struts.action.DynaActionForm" >
        < form-property name = "register" type = "test.register.entity.Register" />                     
    </ form-bean >
  </ form-beans >
 <!— 配置对 Struts Action 请求的代理 -->
  < controller processorClass = "org.springframework.web.struts.DelegatingRequestProcessor" />
 <!— 配置 register.jsp form 对应的 Action-->
  < action-mappings >
    < action     
      name = "registerForm"
      path = "/register"
      scope = "request"
      type = "test.register.action.RegisterAction"
      validate = "false"
      input = "register.jsp" >
      < forward name = "success" path = "/registerSuccess.jsp" />
    </ action >
   </ action-mappings >
 
  < message-resources parameter = "test.register.registermessages" />
 <!— 配置插件,让 action 能访问 sping 容器 -->
  < plug-in
       className = "org.springframework.web.struts.ContextLoaderPlugIn" >
       < set-property property = "contextConfigLocation"
           value = "/WEB-INF/action-servlets.xml" />
</ plug-in >
 
</ struts-config >
8.      创建实体类 Register.java
package test.register.entity;
 
import java.io.Serializable;
 
public class Register implements Serializable{  
    private static final long serialVersionUID = 1521645755684977819L;
    private Long id ;
    private String username ;
    private String password ;
    private String email ;
   
    public Register(){
      
    }
 
    public String getEmail() {
       return email ;
    }
 
    public void setEmail(String email) {
       this . email = email;
    }
 
    public Long getId() {
       return id ;
    }
 
    public void setId(Long id) {
       this . id = id;
    }
 
    public String getPassword() {
       return password ;
    }
 
    public void setPassword(String password) {
       this . password = password;
    }
 
    public String getUsername() {
       return username ;
    }
 
    public void setUsername(String username) {
       this . username = username;
    }
   
   
 
}
9. 创建 Hibernate 映射文件, Register.hbm.xml
<? xml version = "1.0" ?>
<! DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
< hibernate-mapping
    package = "test.register.entity" >
 
    < class name = "Register" table = "REGISTER" >
      
       < id name = "id" >
           < generator class = "native" />
       </ id >
             
    < property name = "username"
             not-null = "true"
             length = "15"
             column = "USERNAME" />
      
    < property name = "password"
             not-null = "true"
             length = "15"
             column = "PASSWORD" />
      
    < property name = "email"
             not-null = "true"
             length = "15"
             column = "EMAIL" />       
      
    </ class >
   
</ hibernate-mapping >
 
9.         创建Spring配置文件applicationContext.xml
<? xml version = "1.0" encoding = "UTF-8" ?>
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" >
 
< beans >    
 
    < bean id = "dataSource" class = "org.springframework.jdbc.datasource.DriverManagerDataSource" >
< property name = "driverClassName" value = "com.mysql.jdbc.Driver" />
       < property name = "url" value = "jdbc:mysql://localhost/register" />
       < property name = "username" value = "root" />
       < property name = "password" value = "root" />
    </ bean >    
 
    <!-- Hibernate SessionFactory -->
    < bean id = "sessionFactory" class = "org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
       < property name = "dataSource" ref = "dataSource" />
       < property name = "mappingDirectoryLocations" >
           < value > classpath:test/register/entity/ </ value >
       </ property >
       < property name = "hibernateProperties" >
           < props >
              < prop key = "hibernate.dialect" > org.hibernate.dialect.MySQLDialect </ prop >
              < prop key = "hibernate.show_sql" > true </ prop >
              < prop key = "hibernate.generate_statistics" > true </ prop >
           </ props >
       </ property >       
    </ bean >    
   
   < bean id = "registerDAO" class = "test.register.dao.RegisterDAO" >
        < property name = "sessionFactory" >
             < ref local = "sessionFactory" />
        </ property >
  </ bean >
 
   < bean id = "registerService" class = "test.register.service.RegisterService" >
        < property name = "registerDAO" >
             < ref local = "registerDAO" />
        </ property >
  </ bean >
 
</ beans >
10. 创建数据访问对象 RegisterDAO.java
package test.register.dao;
 
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
 
import test.register.entity.Register;
 
public class RegisterDAO extends HibernateDaoSupport{
   
    public Register saveRegister(Register r){
       try {
           this .getHibernateTemplate().saveOrUpdate(r);
           return r;
       } catch (Exception e) {
           e.printStackTrace();
           return null ;
       }     
    }
}
12.创建服务对象RegisterService.java
package test.register.service;
 
import test.register.dao.RegisterDAO;
import test.register.entity.Register;
 
public class RegisterService {
    private RegisterDAO registerDAO ;  
   
    public RegisterDAO getRegisterDAO() {
       return registerDAO ;
    }
 
    public void setRegisterDAO(RegisterDAO registerDAO) {
       this . registerDAO = registerDAO;
    }
 
    public Register saveRegister(Register r){
       this .getRegisterDAO().saveRegister(r);
       return r;
    }
}
 
11.  创建 web.xml
<? xml version = "1.0" encoding = "UTF-8" ?>
<! DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
< web-app >
< context-param >
    < param-name > contextConfigLocation </ param-name >
    < param-value > /WEB-INF/applicationContext.xml </ param-value >
</ context-param >
< listener >
    < listener-class > org.springframework.web.context.ContextLoaderListener </ listener-class >
</ listener >
< 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 >
 
  < welcome-file-list >
   < welcome-file > register.jsp </ welcome-file >
  </ welcome-file-list >
 
</ web-app >
14 .创建 RegisterAction.java
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.action.DynaActionForm;
 
import test.register.entity.Register;
import test.register.service.RegisterService;
 
public class RegisterAction extends Action{
   
    private RegisterService registerService ;
 
    public RegisterService getRegisterService() {
       return registerService ;
    }
 
    public void setRegisterService(RegisterService registerService) {
       this . registerService = registerService;
    }
 
    public ActionForward execute(ActionMapping mapping,
                                ActionForm form,
                         HttpServletRequest request,
                          HttpServletResponse response)
    throws Exception {
 
       Register r = (Register)((DynaActionForm)form).get( "register" );
       getRegisterService().saveRegister(r);    
       return mapping.findForward( "success" );
    }
}
RegisterAction.java 中,为了获取 spring 容器中的 RegisterService 对象,我们要对 struts-config.xml 作下修改,具体修改如下:
struts-config.xml 增加 controller 元素
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>
目的告诉 Struts 自动将对 Action 的请求委托给 Spring 上下文中的 Struts Action 来处理。
并且为了让 Struts 能访问 Spring 容器,还必须在 struts-config.xml 注册一个能访问 Spring 上下文的插件:
< plug-in      className = "org.springframework.web.struts.ContextLoaderPlugIn" >
       < set-property property = "contextConfigLocation"
           value = "/WEB-INF/action-servlets.xml" />
</ plug-in >
 
action-servlets.xml 文件的具体内容如下:
<? xml version = "1.0" encoding = "UTF-8" ?>
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" >
 
< beans >    
    < bean name = "/register" class = "test.register.action.RegisterAction" >
       < property name = "registerService" ref = "registerService" />       
    </ bean >      
</ beans >
注意:这里bean是name属性,而不是id。
至此,一个完整的SSH(Struts,Spring,Hibernate)框架搭建好了。
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值