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

          日歷

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

          搜索

          •  

          積分與排名

          • 積分 - 108716
          • 排名 - 540

          最新評論

          2010-02-20 傳智播客—Struts2

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

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

           

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

           

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

           

          一、Struts2簡介

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

           

                 如果你以前有學(xué)習(xí)過Struts1可以到網(wǎng)上搜索一下Struts1Struts2的對比,真是改頭換面哈!~~

                

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

           

          二、HelloWorld

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

           

                 1.創(chuàng)建DynamicWebProject

           

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

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

           

                 3.添加struts.xml

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

          <?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頁面內(nèi)容(body部分):

          <body>

          <h1>Hello World!</h1>

          </body>

           

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

           

                 OK,我們的HelloWorld跑起來了!

          三、struts.xml詳解

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

           

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

           

                 struts2的文檔中不建議使用“!”,因?yàn)?span lang="EN-US">“!”會泄漏我們類的具休方法名稱,可能會帶個安全隱患。所以Struts2又為我們提供了通配符”*”,統(tǒng)配符十分方便,推薦使用!在action元素的其他屬性class和method以及result元素中可以引用*通配符在訪問期間實(shí)際匹配的內(nèi)容。

           

          四、StrutsPrepareAndExecuteFilter

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

          clip_image002

                 FilterDispatcher是Struts2.0.X的過濾器,OtherFilter是其他過濾器必須放在FilterDispathcer之前,因?yàn)镕ilterDispatcher過濾到的內(nèi)容不會向下傳遞。

           

                 FilterDispatcher接收到過濾內(nèi)容后,傳給ActionProxy。ActionProxy會根據(jù)struts.xml配置文件調(diào)用相應(yīng)的攔截器,然后再調(diào)用Action。Action返回結(jié)果,指定向應(yīng)的頁面,然后再交由過濾器處理。最后返回給瀏覽器。

           

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

           

                 StrutsPrepareAndExecuteFilter有三種過濾:

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

                   2).是我的Action

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

           

          五、攔截器

                 通過四我們知道,在進(jìn)行Action調(diào)用的前后都可以添加過濾器。為我們HelloWorld的程序添加一個過濾器,實(shí)現(xiàn)在顯示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,運(yùn)行程序!訪問頁面,控制臺輸入了你好!

           

          六、contextMapvalueStack

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

           

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

           

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

           

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

           


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 中山市| 牡丹江市| 玉树县| 岚皋县| 泰和县| 西乡县| 义马市| 富裕县| 襄樊市| 沙坪坝区| 普兰店市| 德格县| 合肥市| 黄梅县| 永年县| 大同市| 余江县| 泗水县| 临沭县| 宁远县| 胶州市| 大城县| 都兰县| 自治县| 射阳县| 道孚县| 平原县| 大理市| 调兵山市| 乡城县| 海城市| 贵阳市| 赤城县| 随州市| 西畴县| 腾冲县| 荔波县| 红河县| 贵州省| 曲水县| 宜良县|