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

          2010-02-20 傳智播客—Struts2

          Posted on 2010-02-20 23:56 長城 閱讀(577) 評論(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在內存中的內容,使用十分方便!

           

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

           


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


          網站導航:
           
          主站蜘蛛池模板: 巩留县| 眉山市| 嘉兴市| 丰镇市| 遂川县| 甘德县| 夹江县| 莆田市| 景宁| 文成县| 平阳县| 班戈县| 壶关县| 金溪县| 桃源县| 平乐县| 深圳市| 海门市| 乾安县| 乌兰察布市| 千阳县| 类乌齐县| 江油市| 鹤壁市| 丽水市| 大名县| 道孚县| 吉水县| 广河县| 舟山市| 湘乡市| 榆中县| 五河县| 西平县| 白沙| 垦利县| 麻城市| 赤壁市| 神农架林区| 陵水| 星座|