隨筆-42  評(píng)論-578  文章-1  trackbacks-0

                  進(jìn)入我們基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā)的最后一個(gè)階段了,這階段主要為我們的項(xiàng)目引進(jìn)Struts2的Annotation。相對(duì)于帶Annotation的Hibernate與帶Annotation的Spring整合來(lái)說(shuō),帶Annotation的Struts與帶Annotation的Spring整合還是比較容易實(shí)現(xiàn)的。
                  我們先來(lái)引進(jìn)Struts2.0的相關(guān)jar包:xwork-2.0.5.jar,struts2-core-2.0.11.2.jar,ognl-2.6.11.jar,commons-logging.jar(這個(gè)前面已引進(jìn)),freemarker-2.3.8.jar,還有Struts2.0與Spring整合所需的struts2-spring-plugin-2.0.11.2.jar。好,馬上來(lái)開發(fā)我們的用戶注冊(cè)小例子。
                  register.jsp注冊(cè)頁(yè)的部分代碼如下:

              <s:form action="register">
                  
          <s:textfield name="username"/>
                  
          <s:password name="password"/>
                  
          <s:submit value="注冊(cè)"/>
              
          </s:form>
              
          <s:fielderror></s:fielderror>

                  success.jsp注冊(cè)成功頁(yè)部分代碼如下:  
          注冊(cè)成功!你好,<s:property value="username"/>!

                  好,來(lái)開發(fā)我們的控制層吧。寫個(gè)RegisterAction.java的類:
          package com.rong.action;

          import javax.annotation.Resource;
          import org.apache.struts2.config.ParentPackage;
          import org.apache.struts2.config.Result;
          import org.apache.struts2.config.Results;
          import org.springframework.context.annotation.Scope;
          import org.springframework.stereotype.Controller;
          import com.opensymphony.xwork2.ActionSupport;
          import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
          import com.rong.entity.User;
          import com.rong.service.UserService;

          @Controller    @Scope(
          "prototype")        //聲明此類為控制層的類,且為prototype模式調(diào)用
          @ParentPackage(value="struts-default")
          @Results(
          {
              @Result(name
          ="success",value="success.jsp"),
              @Result(name
          ="input",value="register.jsp")
          }
          )
          public class RegisterAction extends ActionSupport {
              
              @Resource(name
          ="userService")
              
          private UserService userService;
              
              
          private String username;
              
          private String password;

              @Override
              
          public String execute() throws Exception {
                  User user 
          = new User();
                  user.setUsername(
          "rongxinhua");
                  user.setPassword(
          "blogjava");
                  userService.save(user);
                  
          return SUCCESS;
              }


              
          public String getUsername() {
                  
          return username;
              }


              @RequiredStringValidator(message 
          = "請(qǐng)輸入用戶名!")
              
          public void setUsername(String username) {
                  
          this.username = username;
              }


              
          public String getPassword() {
                  
          return password;
              }


              @RequiredStringValidator(message 
          = "請(qǐng)輸入密碼!")
              
          public void setPassword(String password) {
                  
          this.password = password;
              }


          }


                  Spring2.5通過(guò)@Controller @Scope("prototype") 這樣的注解,將Struts的Action納為自己的控制范圍之內(nèi)。Struts2.0自帶的@ParentPackage和@Results等注解,注明了要繼承的父包和響應(yīng)結(jié)果。還有@RequiredStringValidator,@RequiredFieldValidator等注解,大大方便了我們處理表單信息的校驗(yàn)。大家有沒(méi)有發(fā)覺(jué)少了什么?我們不需要Struts.xml的配置文件了,也不需要xxx-validation.xml,也不需要寫煩雜的驗(yàn)證代碼了。豈不是很方便嗎?
                  不過(guò),不要忘記了,我們還得在web.xml中配置Struts2:
              <!-- 配置Struts 2.0 -->
              
          <filter>
                  
          <filter-name>struts2</filter-name>
                  
          <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
                  
          <init-param>
                      
          <param-name>actionPackages</param-name>
                      
          <param-value>com.rong.action</param-value>
                  
          </init-param>
              
          </filter>
              
          <filter-mapping>
                  
          <filter-name>struts2</filter-name>
                  
          <url-pattern>/*</url-pattern>
              
          </filter-mapping>
                  我們init了一個(gè)參數(shù)actionPackages,表示我們的請(qǐng)求到哪里尋找我們的action。舉例說(shuō),我們的用戶注冊(cè)action="register",它默認(rèn)會(huì)在com.rong.action包下尋找RegisterAction類。經(jīng)過(guò)action的處理后,若返回success,則會(huì)跳到success.jsp,若校驗(yàn)不通過(guò),則返回input,則請(qǐng)求轉(zhuǎn)發(fā)回register.jsp。
                  好了,看看運(yùn)行效果吧!
                          
                  成功啦!我們基于Annotation的SSH整合開發(fā)終于完成了。我所介紹的Annotation注解其實(shí)并不多,還得靠大家找資料去學(xué)習(xí)。而我們側(cè)重點(diǎn)是在用Annotation時(shí)三大框架是如何整合起來(lái)的。
                  說(shuō)點(diǎn)題外話吧,我們?cè)陂_發(fā)過(guò)程中,究竟用Annotation還是XML,許多人曾問(wèn)這樣的問(wèn)題。有培訓(xùn)機(jī)構(gòu)的老師說(shuō)過(guò)一句話,Annotation可以用,但XML配置一定要懂,因?yàn)閄ML配置現(xiàn)在還是主流。他說(shuō)得也挺有道理的。有些人可能還不能接受Annotation這東西,就像我當(dāng)初不大喜歡它一樣。我的一位教我們Java中間件的老教師說(shuō):“Struts,Spring,Hibernate算什么技術(shù)?學(xué)EJB才是有用的。”他教我們的好像是EJB2版本的,他年輕時(shí)用Jbuilder開發(fā)過(guò)EJB的項(xiàng)目。如果我問(wèn)他“為什么不選EJB3.0”,他會(huì)不會(huì)說(shuō):“EJB3被改得一塌糊涂,什么注解啊,改得狗屁不通,還是EJB2的最好……”。當(dāng)然,我沒(méi)有再問(wèn)他。有時(shí)候,新事物要被人們所接受,是要經(jīng)歷一段時(shí)間的,世界在變,知識(shí)在變,我們何不用更寬廣的心態(tài),去接受那些新生的事物?
                  (*^-^*) 本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處, http://www.aygfsteel.com/rongxh7謝謝! (*^-^*)


          本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處,謝謝!http://www.aygfsteel.com/rongxh7(心夢(mèng)帆影JavaEE技術(shù)博客)
              

          posted on 2009-03-27 00:09 心夢(mèng)帆影 閱讀(9407) 評(píng)論(37)  編輯  收藏 所屬分類: Struts2.x 、Hibernate 、Spring

          評(píng)論:
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-03-27 00:16 | 劉岳
          哥們?。∥沂堑谝粋€(gè)看到這個(gè)的吧??!哈哈
            回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-03-27 00:18 | 心夢(mèng)帆影
          @劉岳
          呵呵,謝謝支持!  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-03-27 00:27 | 劉岳
          加個(gè)好友吧 呵呵 我的qq:117626034 以后請(qǐng)多指教 msn:liuyuecn@126.com  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-03-27 00:39 | 何奇山
          呵呵,頂!?。。。?!  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-03-27 05:24 | 雙色球
          進(jìn)來(lái)給你支持一下  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) [未登錄](méi) 2009-03-27 12:25 | 陳亮
          好文,正在找怎么讓注解配置的action使用spring的依賴注入,謝謝了!
            回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) [未登錄](méi) 2009-03-27 13:25 | 屹礫
          講得蠻好??!事務(wù)也可以用Annotation的。  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-03-30 08:38 | zhoulejian
          能否發(fā)我一份原代碼給我,zhoulejian@126.com謝謝!   回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-03-30 09:56 | 杯中水
          下載不到 struts2-spring-plugin-2.0.11.2.jar,能不能發(fā)給我:qxpidt@163.com  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-03-30 23:21 | 心夢(mèng)帆影
          @杯中水
          struts2-spring-plugin-2.0.11.2.jar在Struts2的解壓包中可以找到,你試試找找看.  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-04-01 17:35 | 中國(guó)福利彩票
          好,謝謝,呵呵,不錯(cuò)  回復(fù)  更多評(píng)論
            
          # 最好是發(fā)布一下源碼包 2009-04-07 17:36 | 余軍
          哥們寫的是還好,有個(gè)源碼包就更好了,
          register.jsp注冊(cè)頁(yè)的部分代碼如下:

          <s:form action="register">
          <s:textfield name="username"/>
          <s:password name="password"/>
          <s:submit value="注冊(cè)"/>
          </s:form>
          <s:fielderror></s:fielderror>
          success.jsp注冊(cè)成功頁(yè)部分代碼如下: 注冊(cè)成功!你好,<s:property value="username"/>!



          就看不懂在寫什么了 ????  回復(fù)  更多評(píng)論
            
          # 最好是發(fā)布一下源碼包 2009-04-07 17:38 | 余軍
          能否發(fā)我一份原代碼給我,hzmotorola521@gmail.com謝謝!   回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-04-08 08:51 | catvoid
          可不可以分享源碼 拜讀下~~~ catvoid@gmail.com  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-04-24 08:29 | 大法官
          感謝分享  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-04-27 16:04 | ksh033
          能不能發(fā)份源碼給我
          我按你的步驟試了會(huì)出錯(cuò)..
          謝謝
          94456671@qq.com  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-04-27 23:19 | 王大力
          此實(shí)例在struts2.1.6的環(huán)境下,需要修改某些參數(shù)才能運(yùn)行起來(lái),請(qǐng)樓主update此篇blog,為后來(lái)的同仁造福!為謝!  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-05-04 16:19 | zhangsan
          請(qǐng)博主把能運(yùn)行的代碼發(fā)上來(lái)下。我們參考做出來(lái)有問(wèn)題

          謝謝了  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-07-03 11:40 | ゞ沉默是金ゞ
          能運(yùn)行,但是怎么沒(méi)有插入到數(shù)據(jù)庫(kù)中呢?是因?yàn)閍pplication-common.xml文件中沒(méi)有把那2個(gè)bean放開嗎?  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-07-03 13:42 | ゞ沉默是金ゞ
          我改了,在userDaoBean中的save方法中加了個(gè)事務(wù)提交,Transaction tx = this.getSession().beginTransaction();
          tx.commit();  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-07-14 15:33 | 雙色球
          很好,不錯(cuò)  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-07-31 00:52 | 慕寒
          如果這個(gè)action里有多個(gè)方法怎么去注解,,,,又如 我要對(duì)username這個(gè)字段進(jìn)行判斷是否被注冊(cè)了,怎么去注解,@Validations怎么使用好.@RequiredStringValidator(message = "請(qǐng)輸入用戶名!")這樣的驗(yàn)證是分開寫在set方法上好還是 集中寫在@Validations 里面好, 會(huì)不會(huì)寫很而使代碼看起來(lái)很亂.....請(qǐng)教了!
            回復(fù)  更多評(píng)論
            
          # 運(yùn)行成功,數(shù)據(jù)庫(kù)沒(méi)值? 2009-08-12 20:17 | 未登陸用戶
          我跟"ゞ沉默是金ゞ"的情況一樣,請(qǐng)教博主:怎么解決此問(wèn)題?  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-08-18 11:32 | 心飛翔
          博主有沒(méi)有研究過(guò)在基于Annotation的SSH配置下如何把FreeMarker進(jìn)行整合,或者說(shuō)Stuts2.1.6實(shí)際上是可以直接使用FreeMarker的?謝謝  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-10-28 17:43 |
          注冊(cè)的例子有問(wèn)題吧, @Resource(name="userService")
          沒(méi)起到作用,userService還是為空 空指針  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-10-28 19:01 |
          樓主 action注解service報(bào)錯(cuò) 空指針 可以回復(fù)嗎  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2010-01-06 16:04 | lion
          我運(yùn)行也是nullpointerexception  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2010-04-06 09:25 | yr
          老大,我想要源碼。yr512656630@163.com。謝謝。。。支持你  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) [未登錄](méi) 2010-04-26 08:57 | java愛(ài)好者
          不錯(cuò),好東西?。。?!  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2010-06-05 15:56 | Mac Hotesion
          javax.annotation.Resource 用的是javaee.jar包里面的嗎?
          ①如果是的話,你的javaee.jar和ejb3-persistence.jar中的javax.persistence.Entity不會(huì)有沖突嗎?怎么處理
          ②如果不是,請(qǐng)問(wèn)你用的是那個(gè)包的?  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2010-08-03 10:03 | tt
          我的SQL語(yǔ)句在控制臺(tái)輸出了。但是數(shù)據(jù)庫(kù)里面沒(méi)有插入啊 這是為什么?
          87513277@qq.com 博主怎么聯(lián)系你?  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2010-08-03 10:26 | tt
          增加 <property name="connection.autocommit">true </property> ,才能使事務(wù)執(zhí)行。  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) [未登錄](méi) 2010-09-01 17:50 | x
          怎么驗(yàn)證對(duì)象?
          public class TradeAction extends ActionSupport {
          private Trade trade = null;
          @RequiredStringValidator(message = "input ref No", fieldName = "trade.refNo")
          @StringLengthFieldValidator(minLength = "2", maxLength = "12", message = "refNo minLength is ${minLength}, maxLength is ${maxLength}")
          public void setTrade(Trade trade) {
          this.trade = trade;
          }//這樣不行呀,why?  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2010-12-31 14:40 | 于楠
          您好,我按著您說(shuō)的方式整合時(shí)出現(xiàn)以下錯(cuò)誤:
          There is no Action mapped for namespace /upload and action name uploadify. - [unknown location]
          <s:form action="uploadify" namespace="/upload" enctype="multipart/form-data" method="post" >
          <input type='file' name='upload' id="upload" >
          <input type="submit" value="上傳"/>
          </s:form>

          @Controller
          @Scope("prototype") //聲明此類為控制層的類,且為prototype模式調(diào)用
          @ParentPackage(value="struts-default")
          @Namespace("/upload")
          請(qǐng)問(wèn)如何更正  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2011-03-31 16:52 | ln1058
          struts.xml還是有必要保留的,不能什么都用注解!尤其是在修改代碼,查找代碼的位置時(shí),全用注解是不方便的  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2011-04-08 22:49 | fdsfas
          @何奇山
          dfasdf  回復(fù)  更多評(píng)論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2011-09-01 09:57 | 河蟹上街
          弄就弄完全了呀,或者發(fā)個(gè)源碼包上來(lái),總是缺東西,很難配置成功的。  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 怀化市| 额济纳旗| 肃宁县| 九龙县| 沾益县| 迭部县| 衢州市| 肇东市| 武胜县| 历史| 永安市| 筠连县| 卓尼县| 宜兰市| 绥化市| 宁武县| 金湖县| 新昌县| 广丰县| 肇东市| 栾城县| 定西市| 富平县| 高青县| 双城市| 漾濞| 阿坝县| 宝应县| 新巴尔虎左旗| 方正县| 札达县| 汉川市| 新河县| 宁阳县| 靖州| 六安市| 凭祥市| 买车| 讷河市| 云霄县| 孟州市|