<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 60,comments - 71,trackbacks - 0
    form: http://m.tkk7.com/woweiwokuang/archive/2007/08/16/137171.html

    最近學(xué)習(xí)了easyjweb,發(fā)現(xiàn)easyjweb和struts較量了,雖然說都傳統(tǒng)的基于請求的MVC思想,但是它竭盡所能是java代碼和頁面分開了,結(jié)果的確做到了這一點(diǎn),在easyjweb項(xiàng)目的頁面上面你是找不到有java代碼的,你看看頁面的后綴都成了html了,不是jsp了。除此之外,easyjweb中還有獨(dú)特的一面,不僅實(shí)現(xiàn)了像struts一樣的MVC(MVC是easyjweb的核心),還有下面的具體實(shí)現(xiàn):

    1、容器及通用業(yè)務(wù)邏輯封裝。作為一個旨在讓基于Java的Web應(yīng)用程序開發(fā)變得直接、快速、簡易的框架,EasyJWeb提供了一個IoC容器,并對企業(yè)級應(yīng)用中的一些通用業(yè)務(wù)邏輯(如分頁、查詢、DAO等)進(jìn)行了抽象及封裝,提供了一套可以直接操作、應(yīng)用企業(yè)資源的組件及API。

    2、代碼生成引擎及工具。僅僅依靠一個靈活、簡易的MVC核心引擎還不能最大限度的提高開發(fā)速度,因此EasyJWeb還提供了一個靈活、易用的代碼生成引擎及工具,通過使用代碼生成引擎,可以快速完成基于JavaEE平臺的企業(yè)級應(yīng)用程序生成。如數(shù)據(jù)庫添刪改查(CRUD)代碼生成、自動頁面模版生成、自動配置文件管理等。

    3、EasyJWeb插件體系,項(xiàng)目中的各種實(shí)用功能的擴(kuò)展,可以靈活地通過基于插件的形式安裝到EasyJWeb中,提供各種針對性的功能。如ajax實(shí)用插件、代碼生成插件等

       別的我也是不太了解,就MVC這方面說吧!不過我對easyjweb和struts都不是特別精通,就我對他們的了解說說我的看法吧!
    第一:先來看看他們的配置文件吧!他們都有web.xml,下面的配置easyjweb和struts必須有的。
    easyjweb中的web.xml文件的配置

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app>
    <filter>
    <filter-name>CharsetFilter</filter-name>
    <filter-class>com.easyjf.web.CharsetFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value> 
    </init-param>
    <init-param>
    <param-name>ignore</param-name>
    <param-value>true</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>CharsetFilter</filter-name>
    <servlet-name>easyjf</servlet-name>
    </filter-mapping> 
      <servlet>
        <servlet-name>easyjf</servlet-name>
        <servlet-class>com.easyjf.web.ActionServlet</servlet-class>   
      </servlet>
      <servlet-mapping>
        <servlet-name>easyjf</servlet-name>
        <url-pattern>*.ejf</url-pattern>  
      </servlet-mapping> 
    </web-app>


    struts中的web.xml中的配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns=" <easyjf-web>


    <module path="/hello" form="" scope="request"
      action="com.easyjweb.action.MessageAction" defaultPage="hehe">
      <page name="hehe" url="/message.html" type="template" />

    </module>
    </easyjf-web>


    sturts-config.xml中的配置:


    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "

    <struts-config>
      <data-sources />
      <form-beans >
       <form-bean name="productForm" type="com.cclen.forms.ProductForm"/>
      </form-beans>
     <action path="/marketWeb"
         type="com.cclen.actions.MarketWebAction"
         name="marketWebForm"
         scope="request">
         <forward name="listmarkweb"           path="/administrator/proxy/proxy_Add.jsp"></forward>
         </action>
      </action-mappings>
    </struts-config>


    在以easyjweb中的配置文件中,我們需要有hello.ejf來請求com.easyjweb.action.MessageAction的處理。     
    不過module這里還有比struts更牛比的東西配置呢,就是Module中也包含了Page對象,控制器,攔截器,注入的bean.
    這里可以參考easyjweb的文檔來具體的了解。。


    在struts里面中的配置文件中,我們需要有marketWeb.do來請求com.cclen.actions.MarketWebAction的處理。
    哦,他們的后綴名都可以隨便的改變,在需要在web.xml中配置,你改一下試試就可以明白了。

    第三:終于到了Action了,這個里面的東西我們來看看了,就我知道的說啊!在網(wǎng)上千萬可別罵我。
    1、easyjweb中三種的Action分別是IWebAction  AbstractCmdAction  AbstractPageCmdAction

     struts中有兩種的Acton分別是Action,DispatchAction

    他們要作為父類,你要實(shí)現(xiàn)他們中間的方法啊!

    2、easyjweb中的IWebAction相當(dāng)于struts中的Action了啊!他們分別要實(shí)現(xiàn)的方法是:

    IWebAction中要實(shí)現(xiàn)的方法是:

    public Page execute(WebForm form, Module module) throws Exception;

    struts中的Action要實(shí)現(xiàn)的方法是:

    public ActionForward execute(ActionMapping mapping,ActionForm form,
       HttpServletRequest request,
       HttpServletResponse response) throws Exception ;

    從這里就可以看到easyjweb的簡易,他只有兩個參數(shù),而struts中的Action方法要有四個參數(shù),這給測試就帶來了麻煩啊!

    3、easyjweb中的AbstractCmdAction相當(dāng)于struts中的DispatchAction了啊!即在一個Action中提供多個處理方法,比如說:
    AbstractCmdAction中有這樣的處理方法:
    public Page doAdd(WebForm form, Module module) throws Exception;
    public Page doDel(WebForm form, Module module) throws Exception;
    public Page doUpdate(WebForm form, Module module) throws Exception;

    在請求中使用easyJWebCommand或者cmd傳遞的參數(shù)直,會作為請求執(zhí)行的方法名的構(gòu)成。構(gòu)成的規(guī)則為doXxxx()。
    如:

    xxx.ejf?easyJWebCommand=add,就會執(zhí)行doAdd()方法了。
    這個easyjwebCommand和cmd是不用配置的,不用問他們擔(dān)心了。


    那么struts中的DispatchAction中就應(yīng)該有這樣的方法了
    public ActionForward add(ActionMapping mapping,ActionForm form,
       HttpServletRequest request,
       HttpServletResponse response) throws Exception;

    public ActionForward del(ActionMapping mapping,ActionForm form,
       HttpServletRequest request,
       HttpServletResponse response) throws Exception;

    public ActionForward update(ActionMapping mapping,ActionForm form,
       HttpServletRequest request,
       HttpServletResponse response) throws Exception;
    在請求中要通過struts-config.xml中的Action配置的parameter參數(shù)來傳遞,
    如:
    <action path="/marketWeb"
         type="com.cclen.actions.MarketWebAction"
         name="marketWebForm"
         parameter="hahahaha"
         scope="request"/>
    marketWeb.do?hahahaha=del,就會執(zhí)行方法
    public ActionForward del(ActionMapping mapping,ActionForm form,
       HttpServletRequest request,
       HttpServletResponse response) throws Exception;

     


    不過easyjweb中的AbstractCmdAction有一個默認(rèn)的方法是:
    public Page doInit(WebForm form, Module module)
    這個方法是當(dāng)你沒有傳入具體參數(shù)時,要調(diào)用的方法了。
    就是說用 執(zhí)行xxx.ejf時,就是執(zhí)行上面的方法了


    4、easyjweb中的AbstractPageCmdAction是非常智能的啊!struts中真的沒有了啊!easyjweb中特有的方法了。
    在AbstractCmdAction的基礎(chǔ)上,EasyJWeb提供了另外一個對視圖具有自動識別能力的AbstractPageCmdAction。該類能通過應(yīng)用“慣例代替配置”來智能判斷程序中要使用的視圖模板,甚至不需要書寫方法簽名也可以調(diào)用視圖模板。如:
    public void doEdit(){}
    該方法中雖然沒有一句代碼,也沒有明確的視圖切換或轉(zhuǎn)向。但AbstractPageCmdAction會根據(jù)慣例原則,自動選擇edit.html文件作為視圖模板。
    這些牛牛人啊!還弄這么智能的東西出來啊。佩服佩服!

     

    第四:來看看easyjweb和struts對表單數(shù)據(jù)的獲取和返回吧! 分別用easyjweb中的IWebAction和struts中的Action來說明問題吧!
     1、用實(shí)現(xiàn)IwebAction就要實(shí)現(xiàn)方法
    public Page execute(WebForm form, Module module) throws Exception;
    看到了吧!其中只要兩個參數(shù),webForm就可以解決獲取表單數(shù)據(jù)和返回頁面數(shù)據(jù)(返回頁面數(shù)據(jù)就是指在action中處理過的數(shù)據(jù)將添加到頁面上)
     
    在WebForm中可以直接使用WebForm.get("poropertyName")來得到文本參數(shù),而對于二進(jìn)制的內(nèi)容,直接使用WebForm.getFileElement("poropertyName")來處理.
    一般不會用到form的,<form>元素用來定義前臺頁面表單的信息,一個WebForm就可以做到了。
    WebForm還提供了兩個方法:WebForm.toPo(Object obj):傳入一個對象,直接從WebForm中拷貝值到改對象中。

    WebForm.toPo(Class clazz):傳入一個類型,WebForm會初始化這個類型的實(shí)例再將WebForm中的值拷貝
    具體這兩個方法的有更多的用法,請參考easyjweb的文檔:
    www.easyjf.com

     

    而表示層返回?cái)?shù)據(jù)的話,就要用new WebForm().addResult()把數(shù)據(jù)添加到Velocity上下文中。WebForm也提供了一個簡便的WebForm.addPo(obj)來處理多屬性的對象的值的添加

    還要注意這點(diǎn)啊 !WebForm在將數(shù)據(jù)保存到Velocity上下文時,不光要保存使用addResult方法和addPo方法放入的值,還要向Velocity上下文中保存textElement中的數(shù)據(jù),意味著重復(fù)的數(shù)據(jù)可以不用在Action中重復(fù)的添加,這在應(yīng)用中需要特別注意。

     

    2、用實(shí)現(xiàn)Action就要實(shí)現(xiàn)方法
    public ActionForward execute(ActionMapping mapping,ActionForm form,
       HttpServletRequest request,
       HttpServletResponse response) throws Exception ;
    MessageForm messageForm = (MessageForm) form;

    你可以配置ActionForm來取得數(shù)據(jù),也可以通過request.getParameter(arg0)來去的數(shù)據(jù),但是這里存在了情況了,但我不知道struts里面沒有沒更好的解決方法。比如說,對于二進(jìn)制的內(nèi)容,如果用到了org.apache.struts.upload.FormFile的話,你就必須用到ActionForm來取的數(shù)據(jù)了。

    返回到表示層的數(shù)據(jù)就request.setAttribute("",object);


    第五:頁面數(shù)據(jù)的輸出:

    1、easyjweb中用的是Velocity作為頁面引擎的,Velocity的語法簡單,易學(xué),并且是美工最喜歡的html頁面,在這里你是找不到j(luò)ava的代碼的。
    2、struts有自己的標(biāo)簽,或者用sun公司支持的jstl標(biāo)簽,你不得不在頁面上引用對象的類型,因?yàn)槟銈魉偷巾撁嫔系膶ο笏麄兪菬o法識別的。
    你可以看看你的jsp頁面的頂部有沒有這樣的代碼 import="java.sql.*,java.lang.*"這就是java代碼啊!


    第六:頁面的轉(zhuǎn)向。
    1、easyjweb中的處理控制器就交給了Module,其實(shí)一個Module是包含著IWebAction,而在IWebAction中,卻是在調(diào)用Module的資源。
    如果要返回一個Page模版頁面,只需要調(diào)用module.findPage("pageName")就能得到了。因?yàn)樵贛odule中給我們配置了資源:
    如:
    <module path="/hello" form="" scope="request"
       action="com.easyjweb.action.MessageAction" defaultPage="hehe">
       <page name="hehe" url="/message.html" type="template" />
      </module>

    它<page name="hehe" url="/message.html" type="template" />就是給我們配置的模板資源,只要在com.easyjweb.action.MessageAction 中通過module.findPage("hehe")就可以調(diào)用message.html的模板了。也可以直接返回new Page(,,),如:return new Page("succ","/user/success.html","html")


    2、在struts中是把頁面控制交給了ActionMapping,ActionMapping通過調(diào)用findForward(),即ActionMapping.findForward("name")轉(zhuǎn)向。

    如:
     <action path="/product"
                type="com.cclen.actions.ProductAction"
                name="productForm"
                parameter="method"
                >
                <forward name="listproduct" path="/administrator/product/listproduct.jsp"></forward>
               </action>
      你需要在com.cclen.actions.ProductAction中這樣來指定頁面ActionMapping.findForward("listproduct");


    第六:我再重申一下在easyjweb中struts沒有的東西。

    easyjweb之所以能實(shí)現(xiàn)快速開發(fā),是因?yàn)槔锩娼o我們提供了更好的實(shí)現(xiàn),提供了工具類,強(qiáng)大的超級容器等等,由于俺是初學(xué)者,等俺精通了以后將慢慢補(bǔ)充easyjweb精彩方面!

     

     

     

    posted on 2008-07-14 17:29 henry1451 閱讀(252) 評論(2)  編輯  收藏

    FeedBack:
    # re: EasyJWeb vs Struts(轉(zhuǎn))[未登錄]
    2008-07-14 20:26 | javaread.com
    看了覺得應(yīng)該跟appfuse比或者springside  回復(fù)  更多評論
      
    # re: EasyJWeb vs Struts(轉(zhuǎn))
    2008-07-18 21:36 | henry1451
    @javaread.com
    呵呵,謝謝你的評論,確實(shí),可能EasyJWeb用的比較少,但這是次要的,主要是比較兩個優(yōu)秀的框架時能看出它們的長處與不足之處,這樣有利于我們明白一個優(yōu)秀框架的精華所在,以便吸取它們的良好設(shè)計(jì)思想.  回復(fù)  更多評論
      

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲最大免费视频网| 国产一区二区免费| 青青久在线视频免费观看| 99re在线精品视频免费| 亚洲AV日韩AV永久无码绿巨人 | 91麻豆精品国产自产在线观看亚洲 | 1a级毛片免费观看| 亚洲综合一区二区精品导航| 大地资源中文在线观看免费版| 久久久久国产精品免费看| 国产亚洲美女精品久久久2020| 亚洲国产人成在线观看69网站| 免费真实播放国产乱子伦| 亚洲第一街区偷拍街拍| 成人性生交大片免费看无遮挡 | a级毛片毛片免费观看久潮喷| 污视频网站在线观看免费| 日本高清免费中文字幕不卡| 亚洲精品无码av人在线观看| 国产成人无码精品久久久久免费 | 999久久久免费精品播放| 久久国产亚洲高清观看| 免费AA片少妇人AA片直播| 亚洲一区二区三区91| 免费无码一区二区三区蜜桃大| 色噜噜综合亚洲av中文无码| 免费成人福利视频| jlzzjlzz亚洲jzjzjz| 精品免费国产一区二区| 一级毛片大全免费播放下载| 亚洲国产精品国自产拍AV| 免费无遮挡无遮羞在线看| 亚洲中文字幕日产乱码高清app| 亚洲一线产品二线产品| 亚洲M码 欧洲S码SSS222| 免费人成黄页在线观看日本| 亚洲中文无码线在线观看| 女人张开腿等男人桶免费视频| 91午夜精品亚洲一区二区三区| GOGOGO高清免费看韩国| 亚洲精品人成电影网|