posts - 78, comments - 34, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          日歷

          <2010年2月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28123456
          78910111213

          搜索

          •  

          積分與排名

          • 積分 - 108852
          • 排名 - 540

          最新評論

          2010-02-20 傳智播客—Struts2

          Posted on 2010-02-20 23:56 長城 閱讀(579) 評論(0)  編輯  收藏

                   春節假期終于結束了,假期內在北京只出去轉了兩天,感覺很好!剩余時間呆在屋子里寫了個練習程序收獲頗豐。

           

                 依然迫不及待,迫不及待的學完課程趕緊回大連。我想除了我,很多同學和網友也都期待著今天由張考祥老師主講的Struts2。張老師也說了,如果只講Struts2的應用一天足夠了。但我們都知道傳智的特色,就是往深里控,講應用+原理。

           

                 Struts2共為期四天的課程,且內容較多。我在做總結時不可能面面具到,也就把一些重點總結一下吧!張老師的精神依然另人敬佩,講了一天,休息的時間并不多。時而讓我想起在來傳智之前看他的視頻,他提到了個人的理想,讓我十分敬佩。

           

          一、Struts2簡介

                 雖然Struts2號稱是一個全新的框架,但這僅僅是相對Struts 1而言。Struts 2 與Struts 1相比,確實有很多革命性的改進,但它并不是新發布的新框架,而是在另一個赫赫有名的框架:WebWork基礎上發展起來的。從某種程度上來講,Struts2沒有繼承Struts 1的血統,而是繼承WebWork的血統。或者說,WebWork衍生出了Struts2,而不是Struts 1衍生了Struts2。因為Struts2是WebWork的升級,而不是一個全新的框架,因此穩定性、性能等各方面都有很好的保證:而且吸收了Struts 1和WebWork兩者的優勢,因此,是一個非常優秀的框架。

           

                 如果你以前有學習過Struts1可以到網上搜索一下Struts1Struts2的對比,真是改頭換面哈!~~

                

                 Struts2的官方:http://struts.apache.org/2.x/

           

          二、HelloWorld

                 我們依然使用eclipse做為開發工具,這款工具雖然開發效率沒有MyEclipse高。但在以后的企業開發中,Eclipse是比較常用的。

           

                 1.創建DynamicWebProject

           

                 2.導入Jar(我們使用的是struts-2.1.8.1)

                 沒必要一個一個手動的往里加了,對于新人來說更沒必要(你知道都需要哪幾個包嗎?難道要重復的跑程序,導Jar包?)。在struts-2.1.8.1目錄下有一個apps目錄,這里邊的war文件全是例子文件,我們使用解壓縮工具,解壓其中任何一個。將WEB-INF目錄下的lib目錄中的jar文件全部添加到工程中。

           

                 3.添加struts.xml

                 將WEB-INF\classes目錄下的struts.xml文件復制到工程的源碼目錄(src)下。修改其內容為:

          <?xml version="1.0" encoding="UTF-8" ?>

          <!DOCTYPE struts PUBLIC

              "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

              "http://struts.apache.org/dtds/struts-2.0.dtd">

           

          <struts>

                 <package name="default" namespace="/" extends="struts-default">

                        <action name="helloWorld"

                               class="cn.itcast.cc.web.struts2.actions.HelloWorld"

                                      method="helloWorld">

                               <result name="say" type="dispatcher">

                                      <param name="location">/WEB-INF/pages/helloworld.jsp</param>

                               </result>

                        </action>

                 </package>

          </struts>

           

                 4.添加類HelloWorld

          package cn.itcast.cc.web.struts2.actions;

           

          public class HelloWorld {

                 public String helloWorld(){

                        return "say";

                 }

          }

           

                 5.web.xml添加一個過濾器:

          <filter>

                 <filter-name>struts2</filter-name>

                 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

          </filter>

           

          <filter-mapping>

                 <filter-name>struts2</filter-name>

                 <url-pattern>/*</url-pattern>

          </filter-mapping>

           

                 6.我們的helloworld.jsp頁面內容(body部分):

          <body>

          <h1>Hello World!</h1>

          </body>

           

                 7.運行程序,在地址欄中輸入:http://localhost:8080/Struts2HelloWorld/helloWorld

           

                 OK,我們的HelloWorld跑起來了!

          三、struts.xml詳解

                 張老師講課比較細致,這也是他對技術的研究和對學生負責的體現。網上的struts.xml配置文件詳解較多,在此就不列出了。(我們都知道他們的文檔做的十分好)

           

                 我們在配置文件中使用一個action配置一個請求路徑,那在應用開發中這是一件十分恐怖的事。Struts2為我們提供了一個特殊符號“!”,這是做什么用的呢?使用“!”相當于Struts1的DispatchAction。我們在請求路徑的最后(action)后邊添加“!”符號并在“!”符號后添加指定的類的方法名,我們的請求就會調用那個方法。

           

                 struts2的文檔中不建議使用“!”,因為“!”會泄漏我們類的具休方法名稱,可能會帶個安全隱患。所以Struts2又為我們提供了通配符”*”,統配符十分方便,推薦使用!在action元素的其他屬性class和method以及result元素中可以引用*通配符在訪問期間實際匹配的內容。

           

          四、StrutsPrepareAndExecuteFilter

                 我們先來看一下Struts2框架的工作原理:

          clip_image002

                 FilterDispatcher是Struts2.0.X的過濾器,OtherFilter是其他過濾器必須放在FilterDispathcer之前,因為FilterDispatcher過濾到的內容不會向下傳遞。

           

                 FilterDispatcher接收到過濾內容后,傳給ActionProxy。ActionProxy會根據struts.xml配置文件調用相應的攔截器,然后再調用Action。Action返回結果,指定向應的頁面,然后再交由過濾器處理。最后返回給瀏覽器。

           

                 在我們使用的struts-2.1.8.1,Struts使用StrutsPrepareAndExecuteFilter替換了之前使用的StrutsPrepareFilter與StrutsExecuteFilter的功能。

           

                 StrutsPrepareAndExecuteFilter有三種過濾:

                   1).什么也不是,直接交給Tomat

                   2).是我的Action

                 3).是我的靜態資源,這一點很特別。直接查看幫助手冊吧,不過它不并不常用。

           

          五、攔截器

                 通過四我們知道,在進行Action調用的前后都可以添加過濾器。為我們HelloWorld的程序添加一個過濾器,實現在顯示HelloWorld頁面之前在控制臺輸出你好!,添加Class文件:

          package cn.itcast.cc.web.struts2.interceptors;

           

          import com.opensymphony.xwork2.ActionInvocation;

          import com.opensymphony.xwork2.interceptor.Interceptor;

           

          public class HelloWorldInterceptor implements Interceptor {

           

                   private static final long serialVersionUID = 1L;

           

                   @Override

                   public void destroy() {}

           

                   @Override

                   public void init() {}

           

                   @Override

                   public String intercept(ActionInvocation invocation) throws Exception {

                             System.out.println("你好!");

                             return invocation.invoke();

                   }

          }

           

                 修改struts.xml配置文件:

          <?xml version="1.0" encoding="UTF-8" ?>

          <!DOCTYPE struts PUBLIC

              "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

              "http://struts.apache.org/dtds/struts-2.0.dtd">

           

          <struts>

                   <package name="default" namespace="/" extends="struts-default">

                             <interceptors>

                                      <interceptor name="nihao"

                                               class="cn.itcast.cc.web.struts2.interceptors.HelloWorldInterceptor" />

                             </interceptors>

                             <action name="helloWorld" class="cn.itcast.cc.web.struts2.actions.HelloWorld"

                                      method="helloWorld">

                                      <interceptor-ref name="nihao" />

                                      <result name="say" type="dispatcher">

                                               <param name="location">/WEB-INF/pages/helloworld.jsp</param>

                                      </result>

                             </action>

                   </package>

          </struts>

           

                 OK,運行程序!訪問頁面,控制臺輸入了你好!

           

          六、contextMapvalueStack

                 我們在使用Struts1時,Struts1Action為我們提供requestresponse...請求與回復信息。但在我們的Struts2HelloWorld程序并未實現任何接口(也沒有超類)。那我們應該如何獲取這些數據?在Struts2的環境中ServletActionContext為我們提供了許多重要的靜態方法,包括獲取請求與回復信息對象。

           

                 ServletActionContext是從哪里獲取這些對象的呢?就當contextMap看,當初始化一個新的請求時,一些重要的數據會被添加到contextMap中。需要時,去拿就可以了!

           

                 Struts 2框架使用OGNL作為默認的表達式語言,今天我們使用<s:debug>查看了contextMapvalueStack在內存中的內容,使用十分方便!

           

                 今天的總結就到此結束吧!這只是一個框架,很多細節都沒有列出。但有視頻還好,即使沒有視頻,我想也難不住我。

           


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


          網站導航:
           
          主站蜘蛛池模板: 白银市| 廉江市| 武山县| 河西区| 潮安县| 新源县| 阜阳市| 清水县| 武山县| 宁蒗| 波密县| 新绛县| 阳泉市| 河池市| 文登市| 黑龙江省| 赤水市| 成都市| 界首市| 汽车| 凌云县| 敖汉旗| 镇雄县| 将乐县| 澜沧| 宁德市| 红河县| 乌兰浩特市| 萝北县| 远安县| 合阳县| 固安县| 新余市| 梅州市| 吐鲁番市| 静乐县| 宣化县| 金华市| 西林县| 肇庆市| 武隆县|