隨筆-42  評論-578  文章-1  trackbacks-0

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

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

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

                  好,來開發(fā)我們的控制層吧。寫個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 
          = "請輸入用戶名!")
              
          public void setUsername(String username) {
                  
          this.username = username;
              }


              
          public String getPassword() {
                  
          return password;
              }


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


          }


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


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

          posted on 2009-03-27 00:09 心夢帆影 閱讀(9405) 評論(37)  編輯  收藏 所屬分類: Struts2.x 、HibernateSpring

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

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



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

          謝謝了  回復  更多評論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-07-03 11:40 | ゞ沉默是金ゞ
          能運行,但是怎么沒有插入到數(shù)據(jù)庫中呢?是因為application-common.xml文件中沒有把那2個bean放開嗎?  回復  更多評論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-07-03 13:42 | ゞ沉默是金ゞ
          我改了,在userDaoBean中的save方法中加了個事務提交,Transaction tx = this.getSession().beginTransaction();
          tx.commit();  回復  更多評論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-07-14 15:33 | 雙色球
          很好,不錯  回復  更多評論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-07-31 00:52 | 慕寒
          如果這個action里有多個方法怎么去注解,,,,又如 我要對username這個字段進行判斷是否被注冊了,怎么去注解,@Validations怎么使用好.@RequiredStringValidator(message = "請輸入用戶名!")這樣的驗證是分開寫在set方法上好還是 集中寫在@Validations 里面好, 會不會寫很而使代碼看起來很亂.....請教了!
            回復  更多評論
            
          # 運行成功,數(shù)據(jù)庫沒值? 2009-08-12 20:17 | 未登陸用戶
          我跟"ゞ沉默是金ゞ"的情況一樣,請教博主:怎么解決此問題?  回復  更多評論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-08-18 11:32 | 心飛翔
          博主有沒有研究過在基于Annotation的SSH配置下如何把FreeMarker進行整合,或者說Stuts2.1.6實際上是可以直接使用FreeMarker的?謝謝  回復  更多評論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-10-28 17:43 |
          注冊的例子有問題吧, @Resource(name="userService")
          沒起到作用,userService還是為空 空指針  回復  更多評論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2009-10-28 19:01 |
          樓主 action注解service報錯 空指針 可以回復嗎  回復  更多評論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2010-01-06 16:04 | lion
          我運行也是nullpointerexception  回復  更多評論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2010-04-06 09:25 | yr
          老大,我想要源碼。yr512656630@163.com。謝謝。。。支持你  回復  更多評論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) [未登錄] 2010-04-26 08:57 | java愛好者
          不錯,好東西啊?。。?nbsp; 回復  更多評論
            
          # 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不會有沖突嗎?怎么處理
          ②如果不是,請問你用的是那個包的?  回復  更多評論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2010-08-03 10:03 | tt
          我的SQL語句在控制臺輸出了。但是數(shù)據(jù)庫里面沒有插入啊 這是為什么?
          87513277@qq.com 博主怎么聯(lián)系你?  回復  更多評論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2010-08-03 10:26 | tt
          增加 <property name="connection.autocommit">true </property> ,才能使事務執(zhí)行。  回復  更多評論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) [未登錄] 2010-09-01 17:50 | x
          怎么驗證對象?
          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?  回復  更多評論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2010-12-31 14:40 | 于楠
          您好,我按著您說的方式整合時出現(xiàn)以下錯誤:
          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")
          請問如何更正  回復  更多評論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2011-03-31 16:52 | ln1058
          struts.xml還是有必要保留的,不能什么都用注解!尤其是在修改代碼,查找代碼的位置時,全用注解是不方便的  回復  更多評論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2011-04-08 22:49 | fdsfas
          @何奇山
          dfasdf  回復  更多評論
            
          # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發(fā) (3) 2011-09-01 09:57 | 河蟹上街
          弄就弄完全了呀,或者發(fā)個源碼包上來,總是缺東西,很難配置成功的。  回復  更多評論
            
          主站蜘蛛池模板: 霍州市| 扎兰屯市| 宜宾市| 广昌县| 丽江市| 温州市| 伊金霍洛旗| 松滋市| 漳平市| 汾西县| 资阳市| 蒲江县| 乌鲁木齐县| 咸丰县| 武安市| 阳江市| 三明市| 莫力| 兴城市| 万盛区| 九龙县| 东源县| 新建县| 乌拉特后旗| 靖宇县| 沙河市| 南充市| 洪江市| 宜都市| 宣武区| 城固县| 沾化县| 广德县| 朝阳市| 莱芜市| 乐亭县| 江西省| 蕲春县| 桐城市| 从江县| 福海县|