Struts+Spring+Hibernate框架配置方案

 
本文以给出了一个完整的 SSH(Struts+Spring+Hibernat) 框架配置方案。(附源文件)
 
本文的读者 :适合刚刚学习 SSH 、想体验一下 SSH 和想用 SSH 做点事情的朋友。
 
你需要的知识 :会 eclipse 的基本操作、 tomcat 的配置,如果不会你可能犯了“躁进”的毛病,先学基础吧(建议你读一下《学习原来是这样的》)。当然你要有一定的 Struts Spring Hibernate 知识,至少知道 struts-config.xml hibernate.cfg.xml ApplicationContext.xml是干什么的。      因为要配置的文件比较多,为了给读者一个直观印象,在正式开始前,我先给出配置的路线图。
图中按照 hello.do 请求的处理顺序,描述了 6 个配置文件之间的依赖关系。下面我们将一个实际的例子,依次来讲述各个文件的配置。
例子 SSHDemo 演示了又前台传入请求 hello.do, 请求,返回一条由数据库中取出的数据。
 
第一步、建立项目
 
1 .用 MyEclipse 建立 SSHDemo 项目。你至少需要下面的 jar 文件:
1.Struts.jar 2.commons-beanutils.jar  3.commons-digester.jar
4. commons-collections.jar   5. commons-logging.jar  6 Hibernate3.jar   
7. antlr- 2.7.6 .jar  8.asm.jar  9.cglib-2.1.1.jar 
10. dom4j- 1.6.1 .jar 11.dom4j-1.6.1.jar   12. ehcache-1.2.jar  13.jta.jar
14. log4j- 1.2.11 .jar  15. mysql-connector-java-5.0.0-beta-bin.jar  16. spring.jar
 
这些文件你可以在 spring 的下载包中找到。把上面的 jar 文件加入 classPath 中,并拷贝到 WEB-INF 中的 lib 中。
 
第二步、建立相关文件,包括类文件, jsp 文件等
 
1  1. 建立 hello.jsp 用来显示由数据库传来的信息
hello.jsp
<%@ page language = "java" contentType = "text/html; charset=GB2312"
    pageEncoding = "GB2312" %>
<! DOCTYPE HTML PUBLIC "-//W 3C //DTD HTML 4.01 Transitional//EN" >
< html >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=GB2312" >
< title > Struts Demo </ title >
</ head >
< body >
    < H1 > Hell, ${userInfo["username"]} ! </ H1 >    
</ body >
</ html >
 
2.      建立数据库表
 
create table us (id int(10) primary key auto_increment, name varchar(20))type=innodb;
insert into us (name) values( " zhaoyuan " );
 
3 创建 User.java
package edu.bjtu.zhao.ssh;
 
public class User {
    private Integer id ;
    private String name ;
    public Integer getId() {
        return id ;
    }
    public void setId(Integer id) {
        this . id = id;
    }
    public String getName() {
        return name ;
    }
    public void setName(String name) {
        this . name = name;
    }
}
 
4.      创建 UserDAO.java
 
package edu.bjtu.zhao.ssh;
 
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
public class UserDAO {
    private SessionFactory sessionFactory;  
    public UserDAO() {
    } 
    public UserDAO(SessionFactory sessionFactory) {
        this.setSessionFactory(sessionFactory);
    }  
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }
    public User find(Integer id) {
        Session session = sessionFactory.openSession();
        User user = (User) session.load(User.class, id);
        Hibernate.initialize(user);
        session.close();
        return user;
    }
}
 
5 .创建 HalloAction.java
 
package edu.bjtu.zhao.ssh;
 
import java.util.*;
import javax.servlet.http.*;
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.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class HelloAction extends Action {
 //  private UserChecker userChecker;
   
    public ActionForward execute(
                             ActionMapping mapping,
                             ActionForm form,
                             HttpServletRequest request,
                             HttpServletResponse response)
                                  throws Exception {
         
      String username = request.getParameter("user");
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
       // 建立 DAO 对象
       UserDAO userDAO =  (UserDAO) context.getBean("userDAO");
       User user = new User();
       user = userDAO.find(new Integer(1));
       if(username==null )
       {
             username=user.getName();
       }
        Map model = new HashMap();
        model.put("username", username);
        request.setAttribute("userInfo", model);
 
        return mapping.findForward("helloUser");
    }
}
 
第三步,开始配置路线图中的 6 xml 文件( 你可以参考文章的路线图)
 
1.            配置 web.xml
 
<? xml version = "1.0" encoding = "UTF-8" ?>
< web-app id = "WebApp_ID" version = "2.4" xmlns = "http://java.sun.com/xml/ns/j2ee" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee [url]http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd[/url]" >
    < session-config >
        < session-timeout >
            30
        </ session-timeout >
    </ session-config >
   
    <!-- Standard Action Servlet Configuration -->
< 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 >
        < load-on-startup > 1 </ load-on-startup >
    </ servlet >
 
    <!-- Standard Action Servlet Mapping -->
    < servlet-mapping >
        < servlet-name > action </ servlet-name >
        < url-pattern > *.do </ url-pattern >
    </ servlet-mapping >
   
<!― 配置 Spring applicationContext.xml -->
   < context-param >
              < param-name > contextConfigLocation </ param-name >
        
< param-value >
                     /WEB-INF/classes/applicationContext.xml
              </ param-value >
       </ context-param >  
</ web-app >
 
2.   配置 struts-config.xml
 
<? xml version = "1.0" encoding = "UTF-8" ?>
<! DOCTYPE struts-config PUBLIC
  "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
  "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd" >
 
< struts-config >
    < action-mappings >
        < action
            path = "/hello"
            type = "org.springframework.web.struts.DelegatingActionProxy" >
            < forward
                name = "helloUser"
                path = "/WEB-INF/jsp/hello.jsp" />
        </ action >
    </ action-mappings >
    <!-- 因为使用了代理类, DelegatingActionProxy ,注册一个插件,让它通过 /Hello 去寻找真正的实现类 -->
    < plug-in className = "org.springframework.web.struts.ContextLoaderPlugIn" >
        < set-property property = "contextConfigLocation"
                      value = "/WEB-INF/action-servlet.xml" />
    </ plug-in >    
</ struts-config >
 
 
3. 配置 ApplicationContext.xml
 
<? 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 = "userDAO" class = "edu.bjtu.zhao.ssh.UserDAO" >
        < property name = "sessionFactory" ref = "sessionFactory" />
    </ bean >
       < bean id = "sessionFactory"       class = "org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
              < property name = "configLocation" >
                       < value > hibernate.cfg.xml </ value >  
                     </ property >
       </ bean >
</ beans >
 
4. 配置 action-servlet.xml
 
<? xml version = "1.0" encoding = "UTF-8" ?>
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
< beans >
<!-- struts-config.xml 里的 "/hello" 对应,由代理类返回 HelloActoine
到此 spring struts 配置完毕,也就是还说 spring 只是管理了 action
 -->
    < bean name = "/hello"
          class = "edu.bjtu.zhao.ssh.HelloAction" >
            </ bean >
</ beans >
 
5.      配置 hibernate.cfg.xml
 
<? xml version = '1.0' encoding = 'UTF-8' ?>
<! DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
< hibernate-configuration >
< session-factory >
       <!-- 是否使运行时生成的 sql 输出到控制台以供调试   -->
       < property name = "show_sql" > true </ property >
       < property name = "dialect" >
              org.hibernate.dialect.MySQLDialect
       </ property >
       < property name = "connection.driver_class" >
              com.mysql.jdbc.Driver
       </ property >
       < property name = "connection.url" >
              jdbc:mysql://localhost:3306/sample
       </ property >
       < property name = "connection.username" > root </ property >
       < property name = "connection.password" >
       </ property >
       <!-- 以下设置对象与数据库表格的映射文件(所用用到的 hbm 文件在此配置) , 必须是相对于根的全路径 -->
       < mapping resource = "edu/bjtu/zhao/ssh/User.hbm.xml" />
</ session-factory >
</ hibernate-configuration >
 
6. 创建映射文件 User.hbm.xml
 
<? xml version = "1.0" encoding = "utf-8" ?>
<! DOCTYPE hibernate-mapping
    PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
 
< hibernate-mapping >
    < class name = "edu.bjtu.zhao.ssh.User"
           table = "user" >
        < id name = "id" column = "id" >
            < generator class = "native" />
        </ id >
        < property name = "name" column = "name" />
    </ class >
</ hibernate-mapping >
 
第四步,测试
 
1.      打开 TOMCAT_HOME/conf/server.xml ,在 <Host> 下配置
 
 <Context path="/SSHDemo" docBase="D:\j2ee\workspace\SSHDemo\WebRoot" reloadable="true" debug="0">
    </Context>
 
2.            启动 TOMCAT
IE 中输入 [url]http://localhost:8080/SSHDemo/hello.do[/url]
将显示“ Hello zhaoyuan
 
IE 中输入 [url]http://localhost:8080/SSHDemo/hello.do?user=yourname[/url]
          将显示“ hello  yourname ”;
 
以上程序在
tomcat- 5.5.17 jdk1.5.0_06   MySQLversion: 4.0.14 -nt 下测试成功。
 
看到输出的结果,说明配置成功,你拥有了自己的 SSH 开发框架。这只是一个入门级别的框架配置,用来做个 Demo 还可以,如果用它来做企业级开发,我基本上可以断言不能。因为至少连接池没配,再说用 SSH 这种东西来开发,虽然网上炒的比较热,但在具体的项目中还是要慎用。
 

你可能感兴趣的:(Hibernate,职场,休闲)