176142998

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            116 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks
          Struts+Spring+Hibernate
            本次配置環(huán)境:Myeclipse5.5、MySQL5.0、Struts1.2、Spring2.0、Hibernate3.1
            一、建工程
            略。。。。。。
            二、要使用Struts、Spring、Hibernate必須導入必需的包
            1、Struts(和之前沒區(qū)別)
            2、Spring
               分別導入Spring 2.0 Core Libraries、Spring 2.0 Web Libraries
               選擇把*.jar Copy到工程/WebRoot/WEB-INF/lib下; 點擊NEXT
               選擇applicationContext.xml的目錄,/WebRoot/WEB-INF;點擊finish
            3、Hibernate
               在導入Hibernate時,當然先要配置DataSource咯,這里就不再說了
               選擇導入Hibernate全選上
               選上復選框:Hibernate 3.1 Core......、Hibernate 3.1 Advanced......、Spring 2.0 ORM/DAO.......
               同樣選擇把*.jar Copy到工程/WebRoot/WEB-INF/lib下; 點擊NEXT
               這里我們選擇把hibernate交給spring去管理
            選中單選按鈕 Spring configuration file...... 點擊NEXT
               選擇已存在的applicationContext.xml文件,
               填寫SessionFactory ID :sessionFactory 點擊NEXT
               這里我們需要填寫B(tài)ean Id :dataSource
               選擇 DB Driver :選擇剛才配置的DataSource 點擊NEXT
               這里不需要創(chuàng)建 SessionFactory Class 點擊Finish
               注意:查看applicationContext.xml的變化
            三、映射VO、數(shù)據(jù)操作
            首先工程的結(jié)構(gòu)建好,比較簡單的結(jié)構(gòu):
            org.chenwj.dao
            org.chenwj.struts
            org.chenwj.struts.action
            org.chenwj.struts.form
            org.chenwj.vo
            映射表userinfo創(chuàng)建持久類到org.chenwj.vo目錄
            在dao下創(chuàng)建數(shù)據(jù)庫操作類 UserDAO 這里只是對數(shù)據(jù)庫進去插入,代碼如下:
            private SessionFactory sessionFactory;

                public SessionFactory getSessionFactory() ...{
                   return sessionFactory;
                }
                public void setSessionFactory(SessionFactory sessionFactory) ...{
                   this.sessionFactory = sessionFactory;
                }
                /**//* 用戶注冊 */
                public boolean regist(Userinfo user) ...{
                   try ...{
                       Session session = sessionFactory.openSession();
                       Transaction tx = session.beginTransaction();
                       session.save(user);
                       tx.commit();
                       session.close();
                       return true;
                   } catch (Exception ex) ...{
                       ex.printStackTrace();
                       return false;
                          }
                   }
                使用依賴注入,setter設值 sessionFactory
                到此數(shù)據(jù)層已經(jīng)完成

            四、配置struts-config.xml
                添加action、form、jsp 略……
                首先在struts-config.xml添加一個插件
                <plug-in
                className="org.springframework.web.struts.ContextLoaderPlugIn">
                   <set-property property="contextConfigLocation"
                       value="/WEB-INF/applicationContext.xml" />
                </plug-in>
                為什么要添回這個插件呢?
                因為在后面會在applicationContext.xml下配置action,讓action交給spring
                去管理,實現(xiàn)了struts的依賴注入機制
                接下來添加cuntroller,這里你可以使用DelegatingActionProxy代理
                <controller processorClass=
                "org.springframework.web.struts.DelegatingRequestProcessor"/>
                Controller取代了struts的RequestProcessor,在定義action里,我們可以省略
            type屬性。(我個人比較喜歡用這個)下面讓我們看配置好的struts-config.xml:
            <struts-config>
                    <data-sources />
                    <form-beans>
                       <form-bean name="userForm"
                       type="org.chenwj.struts.form.UserForm" />
                    </form-beans>
                <global-exceptions />
                <global-forwards />
                <action-mappings>
                   <action attribute="userForm" input="/index.jsp" name="userForm"
                       path="/user" scope="request">
                       <forward name="success" path="/success.jsp" />
                       <forward name="error" path="/index.jsp" />
                   </action><!--type屬性可不寫-->
                </action-mappings>

                <controller processorClass=
            "org.springframework.web.struts.DelegatingRequestProcessor"/>

                 <message-resources
                   parameter="org.chenwj.struts.ApplicationResources" />
                 <plug-in
                className="org.springframework.web.struts.ContextLoaderPlugIn">
                   <set-property property="contextConfigLocation"
                       value="/WEB-INF/applicationContext.xml" />
                 </plug-in>
            </struts-config>

          五、在applicationContext.xml配置action
                這里我們先在 action類里添加一些業(yè)務邏輯,代碼如下:
                public class UserAction extends Action ...{

           

                private UserDAO userDao;
                private Userinfo user;

                public ActionForward execute(ActionMapping mapping, ActionForm form,
                   HttpServletRequest request, HttpServletResponse response) ...{
               UserForm userForm = (UserForm) form;
               //封裝數(shù)據(jù)
               user.setName(userForm.getName());
                   user.setPassword(userForm.getPassword());
                   if(userDao.regist(user))...{
                       return mapping.findForward("success");
                   }
                   return mapping.findForward("error");
                }

                public Userinfo getUser() ...{
                   return user;
                }
                public void setUser(Userinfo user) ...{
                   this.user = user;
                }
                public UserDAO getUserDao() ...{
                   return userDao;
                }
                public void setUserDao(UserDAO userDao) ...{
                   this.userDao = userDao;
                }}
                這里使用setter實現(xiàn)依賴注入了兩個bean,接下來配置applicationContext.xml
                <beans xmlns="略……">
                <!—- 數(shù)據(jù)源 -->
                <bean id="dataSource"
                   class="org.apache.commons.dbcp.BasicDataSource">
                   <property name="driverClassName"
                       value="com.mysql.jdbc.Driver">
                   </property>
                    <property name="url"
            value="jdbc:mysql://localhost:3306/demo"></property>
                   <property name="username" value="root"></property>
                   <property name="password" value="root"></property>
                </bean>
                <!--  sessionFactory -->
                <bean id="sessionFactory" class=
            "org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="dataSource">
                       <ref bean="dataSource" />
                   </property>
                   <property name="hibernateProperties">
                       <props>
                          <prop key="hibernate.dialect">
                              org.hibernate.dialect.MySQLDialect
                          </prop>
                       </props>
                   </property>
                   <property name="mappingResources">
                       <list>
                          <value>org/chenwj/vo/Userinfo.hbm.xml</value>
                       </list>
                   </property>
                </bean>
                <!--  數(shù)據(jù)庫操作類  -->
                <bean id="userDao" class="org.chenwj.dao.UserDAO">
                   <property name="sessionFactory">
                       <ref local="sessionFactory" />
                   </property>
                </bean>
                <!--  action需要注意:這里是name屬性不是ID,同時要和struts-config.xml
                  對應的 action path屬性值相同,斜線也是必需的,通過這個屬性scope=
                  "prototype" 每次獲取bean實例時都會產(chǎn)生新的實例,默認是單例-->
                <bean name="/user" class="org.chenwj.struts.action.UserAction"
                   abstract="false" lazy-init="default" autowire="default"
                   scope="prototype" dependency-check="default">
                   <property name="userDao" ref="userDao" />
                   <property name="user" ref="user" />
                </bean>
                <bean id="user" class="org.chenwj.vo.Userinfo" abstract="false"
                   lazy-init="default" autowire="default"
                     dependency-check="default">
                </bean>
            </beans>
                到此所有的配置已經(jīng)完成,測試:
                HTTP Status 404 - Servlet action is not available
            The requested resource (Servlet action is not available) is not available
            這個錯誤是大部初學者整合 SSH 時都會遇到的問題

                首先建議你使用測試類進行測試,這樣我們可以很快找到錯誤所在的地方
            public static void main(String[] args) ...{
                ApplicationContext context = new FileSystemXmlApplicationContext(
                          "/WebRoot/WEB-INF/applicationContext.xml");
                    UserDAO dao = (UserDAO)context.getBean("userDao");
                   Userinfo user = new Userinfo();
                   user.setName("aaa");
                   user.setPassword("bbb");
                   boolean a = dao.regist(user);
                   if(a)...{
                       System.out.println("OK");
                   }
               }
            如果這里沒出錯,那么請你好好檢查你的配置文件,是否寫錯或少了些什么東東了
                這里出的錯誤也跟使用的版本有關系,這里報的錯一般都是說找不到XX類所報的異常
            那么請檢查lib下有沒commons-pool-1.2.jar包,如沒請導入,這個問題也有可能是包
            之間的****,刪除這個包hibernate-annotations.jar

            六、.sql文件、.jsp文件
            create table userinfo(
                   id int(10) not null auto_increment,
           name varchar(20),
           password varchar(20),
           PRIMARY KEY  (id))
               <body>
                  <html:form action="/user">
                      name : <html:text property="name"/><br/>
                      password : <html:password property="password"/><br/>
                      <html:submit/><html:cancel/>
                  </html:form>
               </body>

          posted on 2008-06-12 15:56 飛飛 閱讀(560) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 涪陵区| 兰考县| 新安县| 洛宁县| 务川| 英山县| 共和县| 宁波市| 武宁县| 融水| 怀来县| 柏乡县| 弥渡县| 天等县| 镶黄旗| 甘泉县| 建阳市| 甘肃省| 天长市| 琼结县| 庆安县| 壤塘县| 高邑县| 重庆市| 黄浦区| 永城市| 班玛县| 神池县| 济南市| 巴中市| 连山| 东宁县| 湘阴县| 安龙县| 石楼县| 吴桥县| 武清区| 峨边| 九寨沟县| 正安县| 平和县|