Struts+Spring+Hibernate整合

java 代码
  1. Struts+Spring+Hibernate    
  2. 本次配置环境:Myeclipse5.5、MySQL5.0、Struts1.2、Spring2.0、Hibernate3.1    
  3. 一、建工程    
  4. 略。。。。。。    
  5. 二、要使用Struts、Spring、Hibernate必须导入必需的包    
  6. 1、Struts(和之前没区别)    
  7. 2、Spring    
  8.    分别导入Spring 2.0 Core Libraries、Spring 2.0 Web Libraries    
  9.    选择把*.jar Copy到工程/WebRoot/WEB-INF/lib下; 点击NEXT    
  10.    选择applicationContext.xml的目录,/WebRoot/WEB-INF;点击finish    
  11. 3、Hibernate    
  12.    在导入Hibernate时,当然先要配置DataSource咯,这里就不再说了    
  13.    选择导入Hibernate全选上    
  14.    选上复选框:Hibernate 3.1 Core......、Hibernate 3.1 Advanced......、Spring 2.0 ORM/DAO.......    
  15.    同样选择把*.jar Copy到工程/WebRoot/WEB-INF/lib下; 点击NEXT    
  16.    这里我们选择把hibernate交给spring去管理    
  17. 选中单选按钮 Spring configuration file...... 点击NEXT    
  18.    选择已存在的applicationContext.xml文件,    
  19.    填写SessionFactory ID :sessionFactory 点击NEXT    
  20.    这里我们需要填写Bean Id :dataSource    
  21.    选择 DB Driver :选择刚才配置的DataSource 点击NEXT    
  22.    这里不需要创建 SessionFactory Class 点击Finish    
  23.    注意:查看applicationContext.xml的变化    
  24. 三、映射VO、数据操作    
  25. 首先工程的结构建好,比较简单的结构:    
  26. org.chenwj.dao    
  27. org.chenwj.struts    
  28. org.chenwj.struts.action    
  29. org.chenwj.struts.form    
  30. org.chenwj.vo    
  31. 映射表userinfo创建持久类到org.chenwj.vo目录    
  32. 在dao下创建数据库操作类 UserDAO 这里只是对数据库进去插入,代码如下:    
  33. private SessionFactory sessionFactory;    
  34.   
  35.     public SessionFactory getSessionFactory() {    
  36.        return sessionFactory;    
  37.     }    
  38.     public void setSessionFactory(SessionFactory sessionFactory) {    
  39.        this.sessionFactory = sessionFactory;    
  40.     }    
  41.     /* 用户注册 */    
  42.     public boolean regist(Userinfo user) {    
  43.        try {    
  44.            Session session = sessionFactory.openSession();    
  45.            Transaction tx = session.beginTransaction();    
  46.            session.save(user);    
  47.            tx.commit();    
  48.            session.close();    
  49.            return true;    
  50.        } catch (Exception ex) {    
  51.            ex.printStackTrace();    
  52.            return false;    
  53.               }    
  54.        }    
  55.     使用依赖注入,setter设值 sessionFactory    
  56.     到此数据层已经完成    
  57.       
  58. 四、配置struts-config.xml    
  59.     添加action、form、jsp 略……    
  60.     首先在struts-config.xml添加一个插件    
  61.     <plug-in    
  62.     className="org.springframework.web.struts.ContextLoaderPlugIn">    
  63.        <set-property property="contextConfigLocation"    
  64.            value="/WEB-INF/applicationContext.xml" />    
  65.     </plug-in>    
  66.     为什么要添回这个插件呢?    
  67.     因为在后面会在applicationContext.xml下配置action,让action交给spring    
  68.     去管理,实现了struts的依赖注入机制    
  69.     接下来添加cuntroller,这里你可以使用DelegatingActionProxy代理    
  70.     <controller processorClass=    
  71.     "org.springframework.web.struts.DelegatingRequestProcessor"/>    
  72.     Controller取代了struts的RequestProcessor,在定义action里,我们可以省略    
  73. type属性。(我个人比较喜欢用这个)下面让我们看配置好的struts-config.xml:    
  74. <struts-config>    
  75.         <data-sources />    
  76.         <form-beans>    
  77.            <form-bean name="userForm"    
  78.            type="org.chenwj.struts.form.UserForm" />    
  79.         </form-beans>    
  80.     <global-exceptions />    
  81.     <global-forwards />    
  82.     <action-mappings>    
  83.        <action attribute="userForm" input="/index.jsp" name="userForm"    
  84.            path="/user" scope="request">    
  85.            <forward name="success" path="/success.jsp" />    
  86.            <forward name="error" path="/index.jsp" />    
  87.        </action><!--type属性可不写-->    
  88.     </action-mappings>    
  89.   
  90.     <controller processorClass=    
  91. "org.springframework.web.struts.DelegatingRequestProcessor"/>    
  92.   
  93.      <message-resources    
  94.        parameter="org.chenwj.struts.ApplicationResources" />    
  95.      <plug-in    
  96.     className="org.springframework.web.struts.ContextLoaderPlugIn">    
  97.        <set-property property="contextConfigLocation"    
  98.            value="/WEB-INF/applicationContext.xml" />    
  99.      </plug-in>    
  100. </struts-config>    
  101.   
  102. 五、在applicationContext.xml配置action    
  103.     这里我们先在 action类里添加一些业务逻辑,代码如下:    
  104.     public class UserAction extends Action {    
  105.   
  106.     private UserDAO userDao;    
  107.     private Userinfo user;    
  108.   
  109.     public ActionForward execute(ActionMapping mapping, ActionForm form,    
  110.        HttpServletRequest request, HttpServletResponse response) {    
  111.    UserForm userForm = (UserForm) form;    
  112.    //封装数据    
  113.    user.setName(userForm.getName());    
  114.        user.setPassword(userForm.getPassword());    
  115.        if(userDao.regist(user)){    
  116.            return mapping.findForward("success");    
  117.        }    
  118.        return mapping.findForward("error");    
  119.     }    
  120.   
  121.     public Userinfo getUser() {    
  122.        return user;    
  123.     }    
  124.     public void setUser(Userinfo user) {    
  125.        this.user = user;    
  126.     }    
  127.     public UserDAO getUserDao() {    
  128.        return userDao;    
  129.     }    
  130.     public void setUserDao(UserDAO userDao) {    
  131.        this.userDao = userDao;    
  132.     }}    
  133.     这里使用setter实现依赖注入了两个bean,接下来配置applicationContext.xml    
  134.     <beans xmlns="略……">    
  135.     <!—- 数据源 -->    
  136.     <bean id="dataSource"    
  137.        class="org.apache.commons.dbcp.BasicDataSource">    
  138.        <property name="driverClassName"    
  139.            value="com.mysql.jdbc.Driver">    
  140.        </property>    
  141.         <property name="url"    
  142. value="jdbc:mysql://localhost:3306/demo"></property>    
  143.        <property name="username" value="root"></property>    
  144.        <property name="password" value="root"></property>    
  145.     </bean>    
  146.     <!--  sessionFactory -->    
  147.     <bean id="sessionFactory" class=    
  148. "org.springframework.orm.hibernate3.LocalSessionFactoryBean">    
  149. <property name="dataSource">    
  150.            <ref bean="dataSource" />    
  151.        </property>    
  152.        <property name="hibernateProperties">    
  153.            <props>    
  154.               <prop key="hibernate.dialect">    
  155.                   org.hibernate.dialect.MySQLDialect    
  156.               </prop>    
  157.            </props>    
  158.        </property>    
  159.        <property name="mappingResources">    
  160.            <list>    
  161.               <value>org/chenwj/vo/Userinfo.hbm.xml</value>    
  162.            </list>    
  163.        </property>    
  164.     </bean>    
  165.     <!--  数据库操作类  -->    
  166.     <bean id="userDao" class="org.chenwj.dao.UserDAO">    
  167.        <property name="sessionFactory">    
  168.            <ref local="sessionFactory" />    
  169.        </property>    
  170.     </bean>    
  171.     <!--  action需要注意:这里是name属性不是ID,同时要和struts-config.xml    
  172.       对应的 action path属性值相同,斜线也是必需的,通过这个属性scope=    
  173.       "prototype" 每次获取bean实例时都会产生新的实例,默认是单例-->    
  174.     <bean name="/user" class="org.chenwj.struts.action.UserAction"    
  175.        abstract="false" lazy-init="default" autowire="default"    
  176.        scope="prototype" dependency-check="default">    
  177.        <property name="userDao" ref="userDao" />    
  178.        <property name="user" ref="user" />    
  179.     </bean>    
  180.     <bean id="user" class="org.chenwj.vo.Userinfo" abstract="false"    
  181.        lazy-init="default" autowire="default"    
  182.          dependency-check="default">    
  183.     </bean>    
  184. </beans>    
  185.     到此所有的配置已经完成,测试:    
  186.     HTTP Status 404 - Servlet action is not available    
  187. The requested resource (Servlet action is not available) is not available    
  188. 这个错误是大部初学者整合 SSH 时都会遇到的问题    
  189.   
  190.     首先建议你使用测试类进行测试,这样我们可以很快找到错误所在的地方    
  191. public static void main(String[] args) {    
  192.     ApplicationContext context = new FileSystemXmlApplicationContext(    
  193.               "/WebRoot/WEB-INF/applicationContext.xml");    
  194.         UserDAO dao = (UserDAO)context.getBean("userDao");    
  195.        Userinfo user = new Userinfo();    
  196.        user.setName("aaa");    
  197.        user.setPassword("bbb");    
  198.        boolean a = dao.regist(user);    
  199.        if(a){    
  200.            System.out.println("OK");    
  201.        }    
  202.    }    
  203. 如果这里没出错,那么请你好好检查你的配置文件,是否写错或少了些什么东东了    
  204.     这里出的错误也跟使用的版本有关系,这里报的错一般都是说找不到XX类所报的异常    
  205. 那么请检查lib下有没commons-pool-1.2.jar包,如没请导入,这个问题也有可能是包    
  206. 之间的****,删除这个包hibernate-annotations.jar    
  207.   
  208. 六、.sql文件、.jsp文件    
  209. create table userinfo(    
  210.        id int(10) not null auto_increment,    
  211. name varchar(20),    
  212. password varchar(20),    
  213. PRIMARY KEY  (id))    
  214.     <body>    
  215.        <html:form action="/user">    
  216.            name : <html:text property="name"/><br/>    
  217.            password : <html:password property="password"/><br/>    
  218.            <html:submit/><html:cancel/>    
  219.        </html:form>    
  220.     </body>    
  221. 七、作者心声    
  222.     上面省略了一些类的代码,当然也是不紧要的,请慢看、细看、多做,相信很容易就可以配置成功。如有必要也可以联系我,我这有Demo和视频教程。  

你可能感兴趣的:(spring,bean,Hibernate,xml,struts)