posts - 0,  comments - 17,  trackbacks - 0

          說明:此教程是oksonic視頻教程的修改,我移植到eclipse3.2+myEclipse5.0環(huán)境下。原來(lái)放在我在和訊的博客上,寫的比較早,完成于去年下半學(xué)期,當(dāng)時(shí)還在學(xué)校,現(xiàn)在出來(lái)打工了,今年7月畢業(yè)。感覺在CSDN的高手多,所以轉(zhuǎn)移至此。

          功能:集合了SSH框架,完成簡(jiǎn)單的登陸功能

          工具:
              eclipse-SDK-3.2.1
          、MyEclipse_5.0.1GA_E3.2、Tomcat_5.5.15、mysql-5.0.18

          相關(guān)資料下載
          原來(lái)的資料都是放在gbaopan下,現(xiàn)在gbaopan關(guān)了,沒有地方放了,只能放在郵箱里,在發(fā)件箱里的附件中


          視頻教程下載郵件主題: struts+hibernate+spring視頻.part1
                struts+hibernate+spring
          視頻.part2

          工程下載郵件主題:  struts+hibernate+spring_src.part1     
                struts+hibernate+spring_src.part1
          說明文件郵件主題:  struts+hibernate+spring_說明
          properties2GBK.bat  struts+hibernate+spring_
          說明 
           
          開始。。新建工程:名稱為 login
           
          創(chuàng)建Struts框架
           
          創(chuàng)建 index.jsp,增加一鏈接指向 login.jsp
          <html>
            <head>
              <title>Struts+Spring+Hibernate</title>
            </head>
           
            <body>
              <a href="login.jsp">Login</a>
            </body>
          </html>
           
          按下Ctrl + N,創(chuàng)建 login.jsp、LoginAction,使用MyEclipse的向?qū)Ь涂梢粤耍浀眠x對(duì)正確的版本
           
          在ActionForm配置頁(yè)中選擇類型為動(dòng)態(tài)Form,并繼承于DynaValidatorForm,新增兩個(gè)屬性:username、password,
          在創(chuàng)建jsp文件打上鉤,將路徑改為/login.jsp,然后下一步,改LoginAction的Input source改為/login.jsp,點(diǎn)擊完成
           
          按下Ctrl + N 創(chuàng)建一個(gè)forwards,記得選對(duì)正確的版本
          name
          輸入 indexGo
          路徑選擇 /index.jsp
           
          配置validator
          先添加Struts插件,使用向?qū)?span>
          Plugin class : org.apache.struts.validator.ValidatorPlugIn
          Property : pathnames
          Value : /WEB-INF/validator-rules.xml,/WEB-INF/validation.xml
          這里需要兩個(gè)xml文件
          現(xiàn)在創(chuàng)建“validation.xml” 文件

           
          文件內(nèi)容如下:
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN" "validator_1_1_3.dtd" >
          <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”
          增加以下內(nèi)容
           
          prompt.username=User Name
          prompt.password=User Password
          errors.required={0} is required.
           
          再創(chuàng)建中文件資源文件“ApplicationResources_zh_CN.properties”
          增加以下內(nèi)容

          prompt.username=用戶名稱
          prompt.password=
          登錄密碼
          errors.required={0}
          必需填寫!

          我這沒有用Properties Editor插件,所以在tomcat發(fā)布后會(huì)顯示亂碼,我們可以用native2ascii來(lái)解決
          我建了個(gè)批處理文件properties2GBK.bat
          native2ascii -encoding gbk ApplicationResources_zh_CN.properties temp.properties
          del ApplicationResources_zh_CN.properties
          rename temp.properties ApplicationResources_zh_CN.properties
          放在你的classpath下,或者拷到你要轉(zhuǎn)GBK的地方,雙擊一下就可以了
          我剛開始在eclipse編輯中文properties文件,保存后再打開,也會(huì)出現(xiàn)亂碼,只要在eclipse上設(shè)置一下就可以了
          具體設(shè)置:Eclipse-->Preferences...-->在“type filter text“欄中輸入”Content Types“查找,
          然后在選擇右邊的Text下邊相應(yīng)的文件后綴名,即properties.修改其編碼就可。可以修改成GBK
          我這已經(jīng)改好了,直接打開就是漢語(yǔ)了。。。
          建議下載 properties Editor插件,我這上不了外國(guó)網(wǎng)站,沒有辦法。。。。有空再下吧。。
           
          修改struts-config.xml文件
          在以下位置增加validate="true"
          <action-mappings >
              <action
                attribute="loginForm"
                input="/login.jsp"
                name="loginForm"
                path="/login"
                scope="request"
                validate="true"
                type="com.test.struts.action.LoginAction" />
            </action-mappings>
           
          這里說明提交的數(shù)據(jù)必需經(jīng)過驗(yàn)證,而驗(yàn)證則是通過validator框架進(jìn)行的。

          修改web.xml文件
          增加
           <welcome-file-list>
             <welcome-file>index.jsp</welcome-file>
            </welcome-file-list>
          顯示主頁(yè)
           
          修改LoginAction.java文件的execute方法,內(nèi)容如下
          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();
            }
           }
           
          現(xiàn)在再修改一下login.jsp
          增加以下部份
          <%@ page language="java" contentType="text/html; charset=UTF-8" %>
           
          其中charset=UTF-8 是使用UTF-8的字符編碼,這也是為了支持國(guó)際化而使用的。要不然中文還是會(huì)顯示亂碼
          關(guān)于亂碼解決,網(wǎng)上查資料,一查就有一堆
          我們現(xiàn)在還沒有傳遞中文參數(shù),要不然還得加個(gè)過濾器。。

           
          好了,現(xiàn)在可以啟動(dòng)Tomcat進(jìn)行測(cè)試了
          http://localhost:8080/login/

           
          如果不輸入任何數(shù)據(jù)而直接提交表單的話就可以看到效果了。
           
          好了,如果沒有什么問題的話就繼續(xù)往下看吧,如果有問題的話就得往上看了^_^
          出現(xiàn)了亂碼,我們用native2ascii來(lái)解決,非得我重啟一下!> ok了
           
          現(xiàn)在創(chuàng)建Spring框架了,在這里我將Spring所有的包全部加載進(jìn)去,因?yàn)槲疫€不知道具體用到哪些類,全部加進(jìn)去方便點(diǎn)
           
          單選框選第二個(gè),這樣的話所有的類庫(kù)和標(biāo)簽等都將拷貝到項(xiàng)目中去,這樣方便以后的布署
          下一步后是創(chuàng)建配置文件,將文件放到“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的代理器來(lái)對(duì)Action進(jìn)行控制
           
          當(dāng)提交到/login.do是將控制權(quán)交給了spring,然后由spring來(lái)決定是否轉(zhuǎn)回到struts的Action
           
          現(xiàn)在來(lái)配置spring
           
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "  
          <beans>
           <bean name="/login" class="com.test.struts.action.LoginAction" singleton="false"></bean>
          </beans>

           
          屬性singleton="false",指明了Action 的實(shí)例獲取方式為每次重新創(chuàng)建。解決了Struts中令人詬病的線程安全問題(Struts中,由一個(gè)Action實(shí)例處理所有的請(qǐng)求,這就導(dǎo)致了類公用資源在并發(fā)請(qǐng)求中的線程同步問題。)(摘自spring開發(fā)指南)
          測(cè)試一下,如果沒有什么問題的話就繼續(xù)往下看吧,如果有問題的話就得往上看了^_^
          好的,struts spring倆人成為朋友了,友好的集成到了一起。。。
           
          建立數(shù)據(jù)庫(kù)在 這里我使用的是mysql-5.0.18
          配置好mySql連接......
          不好意思,這里我忘記驅(qū)動(dòng)怎么寫了。。。
          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=latin1;
           
          添加記錄 insert into user (USERNAME,PASSWORD) values ('test','test')

          創(chuàng)建Hibernate框架
          新建包com.test.hibernate
          com.test.beans
          選hibernate3.1 libraries全選,我也不知道那個(gè)具體有什么用^_^,可能只選第一個(gè)也行,但考慮還要用DAO,第三個(gè)也選上了,
          看第二是高級(jí)支持,也加上了,沒試?yán)锩娴淖饔茫蠹矣锌湛梢栽囈幌隆!?span>
          第二步選 spring configuration file 我們直接在Spring配置hibernate的連接。。就不用創(chuàng)建hibernate.cfg.xml了
          第三步選existing Spring configuration file我們剛才已經(jīng)創(chuàng)建了一個(gè)。。
           SessionFactory ID
          就直接填sessionFactory
          第四步 Bean Id填 dataSource 我們用JDBC Driver,DB Profile選剛才配置好的

          使用MyEclipse的數(shù)據(jù)Database Explorer工具創(chuàng)建User.hmb.xml、AbstractUser.java、User.java,UserDAO文件
          這里選項(xiàng)比較多,大家看視頻。。我就不一一說明了。。。不懂的看書^_^

          打開User.hbm.xml配置文件,把 catalog="meilvin" 這一項(xiàng)刪除了,要不后果很嚴(yán)重。因?yàn)閙ySql在連接的時(shí)候要寫上數(shù)據(jù)庫(kù)
          如果我們?cè)谶@里也寫上數(shù)據(jù)庫(kù)的名字的話就會(huì)重復(fù)了,就變成了meilvin.meilvin.user,顯然是錯(cuò)的。后面就會(huì)報(bào)錯(cuò),我深有體會(huì)。


          修改UserDAO,增加如下方法
          public boolean isValidUser(String username, String password) {
            String hql = "from User u where u.username=? and u.password=?";
            String []userInfo=new String[2];
            userInfo[0]=username;
            userInfo[1]=password;
            List userList = this.getHibernateTemplate().find(hql, userInfo);
            if (userList.size() > 0) {
             return true;
            }
            return false;
           }

           
          修改LoginAction.java文件,使用userDao的方法來(lái)進(jìn)行用戶驗(yàn)證
          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();
            }
           }
          }
           
          現(xiàn)在剩下最后的spring配置了
          把原來(lái)的
          <bean name="/login" class="com.test.struts.action.LoginAction" singleton="false"></bean>
          刪除了
          在最底下增加
           <bean name="/login" class="com.test.struts.action.LoginAction" singleton="false">
            <property name="userDAO">
             <ref bean="UserDAO" />
            </property>
           </bean>
          利用反轉(zhuǎn)控制產(chǎn)生action
          現(xiàn)在可以進(jìn)行測(cè)試了,可以登陸了^-^
          老是說log4j沒有配置,下次視頻配置一下。。。成功了。。


          注冊(cè)新用戶,用戶瀏覽、刪除用戶

          打開 UserDAO.java 文件,增加以下方法:
           public boolean addUser(User user) {
            try {
             //
          調(diào)用前面save方法
             save(user);
            } catch (Exception e) {
             System.out.println(e.getMessage());
             return false;
            }
            return true;
           }


          按下 Ctrl + N ,使用向?qū)?chuàng)建 adduser.jsp 、AdduserForm(DynaValidatorForm)、AdduserAction.java文件,這是注冊(cè)新用戶的Action
          我用的是maxthon瀏覽器,如果是add.jsp,它會(huì)當(dāng)做廣告攔下來(lái),,,,多加個(gè)user...

          修改配置內(nèi)容如下:
          <action
                attribute="adduserForm"
                input="/adduser.jsp"
                name="adduserForm"
                path="/adduser"
                validate="true"
                type="org.springframework.web.struts.DelegatingActionProxy" />

          第一句實(shí)現(xiàn)了必須對(duì)提交的數(shù)據(jù)進(jìn)行驗(yàn)證
          第二句實(shí)現(xiàn)了和spring集成

          修改 AdduserAction.java 文件,內(nèi)容如下:

           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 adduserForm = (DynaValidatorForm) form;
            User user = new User();
            user.setUsername(adduserForm.getString("username"));
            user.setPassword(adduserForm.getString("password"));
            adduserForm.set("password", null);
            if (userDAO.addUser(user)) {
             return mapping.findForward("indexGo");
            } else {
             return mapping.getInputForward();
            }
           }

          關(guān)于在Action中使用 User 對(duì)像,我在這里沒有使用 IoC 方式進(jìn)行管理,這不好,希望大家在正式應(yīng)用中使用。

          在spring配置文件(applicationContext.xml)中加入以下內(nèi)容:
           <bean name="/adduser" class="com.test.struts.action.AdduserAction"
            singleton="false">
            <property name="userDAO">
             <ref bean="UserDAO" />
            </property>
           </bean>

          修改 index.jsp 文件
          <html>
            <head>
              <title>Struts+Spring+Hibernate</title>
            </head>
           
            <body>
              <a href="login.jsp">Login</a>
              <br>
              <a href="add.jsp">Add User</a>
            </body>
          </html>

          修改 adduser.jsp 文件的首行,替換為以下內(nèi)容,目的是為了使用UTF-8的編碼格式顯示頁(yè)面
          <%@ page language="java" contentType="text/html; charset=UTF-8" %>

          修改 validation.xml 文件,加入以下內(nèi)容:
            <form name="adduserForm">
             <field property="username" depends="required">
              <arg0 key="prompt.username" />
             </field>
             <field property="password" depends="required">
              <arg0 key="prompt.password" />
             </field>
            </form>


          現(xiàn)在整個(gè) AddUser 已經(jīng)完成,如果你覺得不放心的話可以在這里停一停先進(jìn)行這一段的測(cè)試!

          創(chuàng)建一個(gè)Action用于查詢數(shù)據(jù),名稱為 find

          創(chuàng)建 display.jsp 文件,用于顯示所有用戶

          創(chuàng)建一個(gè) forward displayGO 指向 display.jsp 選中 redirect

          修改 UserDAO.java 文件,增加 findAllUser() 方法,代碼如下:
           public List findAllUser() {
            List users=this.getHibernateTemplate().find("from User u");
            if(users.size()>0)
             return users;
            return null;
           }

          修改 struts-config.xml 文件
          <action path="/find" type="org.springframework.web.struts.DelegatingActionProxy" />

          修改 FindAction.java 文件,內(nèi)容如下:
           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) {
            List users=userDAO.findAllUser();
            if(users!=null){
             HttpSession session=request.getSession();
             session.setAttribute("users",users);
             return mapping.findForward("displayGo");
            }
            return mapping.getInputForward();
           }

          在spring配置文件(applicationContext.xml)中加入以下內(nèi)容:
           <bean name="/find" class="com.test.struts.action.FindAction" singleton="false">
            <property name="userDAO">
             <ref bean="UserDAO" />
            </property>
           </bean>

          修改 display.jsp 文件,內(nèi)容如下:
          <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
          <%@ taglib uri="
          <%@ taglib uri=" <%@ taglib uri=" <html>
            <head>
              <title>DISPLAY</title>
            </head>
            <body>
              <logic:present name="users">
              <form action="del.do">
              <table border="1">
              <logic:iterate id="element" name="users">
           <tr><td width="100">
            <input type="radio" name="select" value="<bean:write name="element" property="id"/>">
               <bean:write name="element" property="username"/>
              </td></tr>
              </logic:iterate>
              </table>
              <INPUT type="submit" name="Submit" value="submit">
              </form>
              </logic:present>
            </body>
          </html>

          現(xiàn)在整個(gè) Display 已經(jīng)完成,如果你覺得不放心的話可以在這里停一停先進(jìn)行這一段的測(cè)試!

          新建一個(gè) Action 用于刪除選中的用戶,name:del

          修改 struts-config.xml 文件中的以下內(nèi)容為:
          <action path="/del" type="org.springframework.web.struts.DelegatingActionProxy" />

          修改 UserDAO.java 文件,增加以下方法
           public boolean delUser(Integer lid) {
            try {
             User user=(User)findById(lid);
             this.getHibernateTemplate().delete(user);
            } catch (Exception e) {
             System.out.println(e.getMessage());
             return false;
            }
            return true;
           }

          修改 DelAction.java 文件,內(nèi)容如下:
          public class DelAction 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) {
            Integer selid=Integer.valueOf(request.getParameter("select"));
            if(userDAO.delUser(selid))
             return mapping.findForward("indexGo");
            return mapping.getInputForward();
           }
          }
          Ctrl+Shift+o
          導(dǎo)入包
          在spring配置文件(applicationContext.xml)中加入以下內(nèi)容:
           <bean name="/del" class="com.test.struts.action.DelAction" singleton="false">
            <property name="userDAO">
             <ref bean="UserDAO" />
            </property>
           </bean>

          修改 index.jsp 文件
          <html>
            <head>
              <title>Struts+Spring+Hibernate</title>
            </head>
           
            <body>
              <a href="login.jsp">Login</a>
              <br>
              <a href="add.jsp">Add User</a>
              <br>
              <a href="find.do">Display</a>
            </body>
          </html>


          代碼已經(jīng)全部完成,可以進(jìn)行測(cè)試了!!!

          如果測(cè)試不成功,請(qǐng)往回查看。。。。完了!!!
          失誤失誤,大小寫不注意,就是這種后果,大家以后要注意點(diǎn)哦
          好了,成功了,祝大家都成功!
          拜拜!


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


          網(wǎng)站導(dǎo)航:
           

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          留言簿

          隨筆檔案(1)

          文章分類(44)

          文章檔案(46)

          收藏夾(1)

          Adobe

          AOP

          API

          appServer

          BI

          c

          • c-free
          • codeblocks
          • codelite
          • CodeLite IDE 是一個(gè)強(qiáng)大的開源,跨平臺(tái)的 C/C++整合開發(fā)環(huán)境. 支持包括 Windows、Linux 和 Mac 系統(tǒng)下運(yùn)行
          • codelite官網(wǎng)
          • dev-c++
          • Dev-C++是一個(gè)C&C++開發(fā)工具,它是一款自由軟件,遵守GPL協(xié)議。
          • GCC
          • GCC 原名為 GNU C 語(yǔ)言編譯器(GNU C Compiler),因?yàn)樗局荒芴幚?C語(yǔ)言。GCC 很快地?cái)U(kuò)展,變得可處理 C++。之后也變得可處理 Fortran、Pascal、Objective-C、Java, 以及 Ada 與其他語(yǔ)言。

          Cache

          CMS

          DB

          eclipse

          FreeMarker

          hibernate

          html5

          ibatis

          java

          jquery

          js

          json

          Linux

          Log

          mail server

          mobile

          mysql

          oauth

          openID

          other

          PHP

          portal

          report

          Scheduler

          schema

          Security

          SOA

          spring

          struts

          UI原型設(shè)計(jì)

          w3c

          Wap

          webservice

          xml

          供應(yīng)鏈管理

          博客鏈接

          好網(wǎng)站

          工作流

          開源網(wǎng)

          招聘

          插件下載

          操作系統(tǒng)

          構(gòu)建可伸縮的系統(tǒng)

          構(gòu)建工具

          測(cè)試

          • IETest
          • IE官網(wǎng)
          • OpenSTA
          • Siege
          • Siege是一個(gè)壓力測(cè)試和評(píng)測(cè)工具,設(shè)計(jì)用于WEB開發(fā)這評(píng)估應(yīng)用在壓力下的承受能力

          游戲

          源碼托管

          經(jīng)營(yíng)

          資源

          金融/財(cái)務(wù)

          搜索

          •  

          最新評(píng)論

          主站蜘蛛池模板: 莲花县| 米林县| 尚义县| 时尚| 保德县| 历史| 开封县| 吉木萨尔县| 高安市| 涟源市| 尉犁县| 江阴市| 崇阳县| 民勤县| 酉阳| 湟中县| 宜城市| 武鸣县| 新乡市| 嘉鱼县| 乌审旗| 沧州市| 高陵县| 兰考县| 石家庄市| 博野县| 海晏县| 汤原县| 左贡县| 枞阳县| 饶平县| 蛟河市| 马关县| 彩票| 东乌珠穆沁旗| 兴安县| 镇远县| 永善县| 潞西市| 安龙县| 河池市|