goldrain

          金色雨點

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            37 隨筆 :: 2 文章 :: 239 評論 :: 0 Trackbacks
          自從ror熱潮席卷web開發(fā)界以來,慣例優(yōu)于配置的快速開發(fā)理念便深入人心。

          struts2中對action name支持通配符配置,所以使其方便的實現(xiàn)零配置成為可能。

          實現(xiàn)零配置后的開發(fā)會是怎樣,開發(fā)員不用配置struts.xml,也不用在action代碼中寫annotation,是真正干凈的零配置。以下的代碼是我們希望達到的效果。
          action示例
          package net.jacker.ww.sys;

          public class UserAction extends BaseAction {


            
              
          public String execute() throws Exception {
                   
                   
          return "default"
                   //
           default表示使用缺省頁面,路徑名和action所在包和類名相關,為 /sys/User.jsp
              }

              
          public String roles(){
                  
                  
          return view("/sys/UserRoles"); // 指定展示頁面為 /sys/UserRoles.jsp 
              }


              
          public String xxxx(){
                 
                 
          return redirect("/sys/User.do"); // 重定向,url為 /sys/User.do
              
              }




          }


          以上action的三個方法無需配置,將可以分別用以下鏈接進行訪問:
          http://localhost:8080/sys/User.do
          http://localhost:8080/sys/User!roles.do
          http://localhost:8080/sys/User!xxxx.do(將重定向到User.do)


          下面我們來看看以上零配置是如何做到的。
          首先,我們需要在struts.xml中做如下的配置。
          <struts>
              
          <constant name="struts.enable.SlashesInActionNames" value="true" /> <!-- action名可以有'/'字符 -->
              
          <constant name="struts.action.extension" value="do"/> <!-- .do為訪問擴展名 -->

            
          <package name="default" extends="struts-default">
            
            
          <!-- 通配符配置,匹配所有的URL對action的訪問 -->
              
          <action name="*/*!*" class="net.jacker.ww.{1}.{2}Action" method="{3}"> 
                
          <result name="default" type="dispatcher">/{1}/{2}.jsp</result>
                
          <result name="view" type="dispatcher">${viewpath}.jsp</result>
                
          <result name="redirect" type="redirect">${viewpath}</result>
              
          </action>
              
          <action name="*/*" class="net.jacker.ww.{1}.{2}Action">
                
          <result name="default" type="dispatcher">/{1}/{2}.jsp</result>
                
          <result name="view" type="dispatcher">${viewpath}.jsp</result>
                
          <result name="redirect" type="redirect">${viewpath}</result>
              
          </action>
            
          </package>

          </struts>


          然后是寫一個Action基類,BaseAction.java
          package net.jacker.ww;

          import com.opensymphony.xwork2.Action;


          public abstract class BaseAction implements Action{

              

              String viewpath; 
          //該屬性會在struts.xml中用到

              
          public String view(String vpath){
                  viewpath 
          = vpath;
                  
          return "view";
              }

              
          public String redirect(String vpath){
                  viewpath 
          = vpath;
                  
          return "redirect";
              }


              
          public String getViewpath() {
                  
          return viewpath;
              }

              

          }


          做好以上的基礎工作,你的action類只要繼承BaseAction,符合XxxAction的命名規(guī)則,放到對應的包下,頁面也放到對應的路徑,就可以無需配置而訪問了。

          如果要替換view層也很簡單,只要對struts.xml做簡單修改,比如:

          <result name="default" type="dispatcher">/{1}/{2}.jsp</result>

          改為

           <result name="default" type="velocity">/{1}/{2}.vtl</result>

          修改后的struts將統(tǒng)一使用velocity模板取代jsp作為頁面展示層。

          注意:
          實測后發(fā)現(xiàn),以上零配置的做法只在struts2.0.11版本中可以使用,在struts2.0.XX的更高版本中卻未能獲通過,這不能不說是個遺憾。

          posted on 2009-04-07 14:13 goldrain 閱讀(9647) 評論(15)  編輯  收藏

          評論

          # re: struts2之完全零配置[未登錄] 2009-04-07 14:35 abc
          老大,攔截器怎么辦,驗證怎么辦,能完全省略嗎!  回復  更多評論
            

          # re: struts2之完全零配置 2009-04-07 14:53 goldrain
          @abc
          對,實際項目中要根據(jù)情況有很多的取舍。
          但并不是說你提到的攔截器,驗證等就不能做了。

          比如你可以對通配符配置更多的支持;

          對特殊情況,你可以建其他命名空間package來做;

          或者對更特殊情況可以配置單獨的action;

          但在我實際項目開發(fā)中,多數(shù)情況都可以按文中描述的來做。
            回復  更多評論
            

          # re: struts2之完全零配置 2009-04-07 14:56 goldrain
          有時我們總是過度考慮靈活性,而忘記了效率和體驗才是我們最需要的。  回復  更多評論
            

          # re: struts2之完全零配置 2009-06-12 09:17 這是完全零配置嗎
          我靠,這是完全零配置嗎?struts.xml都還在,暈死.....................  回復  更多評論
            

          # re: struts2之完全零配置[未登錄] 2009-06-12 09:54 goldrain
          @這是完全零配置嗎
          那是初始配置而已,之后就不用配置了。
          咬文嚼字有意義么?  回復  更多評論
            

          # re: struts2之完全零配置 2009-06-16 17:39 暈 死了 這樣的零配置誰敢用
          郁悶。。。  回復  更多評論
            

          # re: struts2之完全零配置 2009-06-16 17:40 暈 死了 這樣的零配置誰敢用
          出發(fā)點是好的   回復  更多評論
            

          # re: struts2之完全零配置 2009-08-24 14:23 XLay
          這樣配置一個很大的缺陷就是如果要更改頁面指向,就要更改action的java代碼!!  回復  更多評論
            

          # re: struts2之完全零配置[未登錄] 2009-08-24 14:54 goldrain
          @XLay
          你說的很對,但這個基本不是問題,誰吃飽了撐著沒事去改頁面指向干嘛  回復  更多評論
            

          # re: struts2之完全零配置 2009-11-06 09:41 Allen Yang
          這不是Struts2的零配置,Struts2的零配置是基于Convention插件來實現(xiàn)的,它里面體現(xiàn)的是“約定大于配置”的思想,而不是用通配符來配置  回復  更多評論
            

          # re: struts2之完全零配置 2009-12-12 23:35 Mr Jiang
          零配置不是不用再配置struts.xml了么?
          這樣配置確實達到了動態(tài)的配置,但是struts提供的MVC模式好像是不是有點混了,假如我在維護或是在利用階段是不是不好對其代碼修改啊?期待您的回答?  回復  更多評論
            

          # re: struts2之完全零配置 2010-01-27 13:00 ddd
          不錯  回復  更多評論
            

          # re: struts2之完全零配置 2011-11-28 15:06 99134194
          零配置是不需要寫以下代碼的:
          <action name="*/*!*" class="net.jacker.ww.{1}.{2}Action" method="{3}">
          <result name="default" type="dispatcher">/{1}/{2}.jsp</result>
          <result name="view" type="dispatcher">${viewpath}.jsp</result>
          <result name="redirect" type="redirect">${viewpath}</result>
          </action>
            回復  更多評論
            

          # re: struts2之完全零配置 2012-06-14 21:47 O
          這也叫零配制???????fuck  回復  更多評論
            

          # re: struts2之完全零配置 2012-09-09 00:39 功夫風光好
          很好,類似于spring mvc 的思想,很強大,只是struts2更高版本的零配置是基于“約定優(yōu)于配置”的思想用Convention插件來實現(xiàn)的。  回復  更多評論
            


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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 彝良县| 邻水| 休宁县| 三河市| 蓝田县| 天水市| 周口市| 天津市| 于田县| 清镇市| 南溪县| 舞钢市| 丹东市| 根河市| 无为县| 运城市| 大兴区| 博白县| 广昌县| 东丽区| 砚山县| 安丘市| 澳门| 湘潭市| 汉寿县| 卓资县| 攀枝花市| 法库县| 怀化市| 仁寿县| 昆明市| 庄河市| 兴隆县| 高淳县| 新民市| 镇宁| 昭觉县| 老河口市| 南平市| 繁昌县| 富宁县|