1. 程式人生 > >?為什麼要學這個技術(有什麼優秀的地方,可以解決哪些問題?

?為什麼要學這個技術(有什麼優秀的地方,可以解決哪些問題?

今天來總結一下Struts2的知識點,學習程式設計我的思路一般是這樣的:

    ① why ?為什麼要學這個技術(有什麼優秀的地方,可以解決哪些問題?)。

    ②what ? 這個技術是什麼玩意?有什麼牛逼的地方值得我們學習,這個技術的核心是什麼。

    ③How ?  怎麼學?基本技術都是自己自學的,我的學習思路就是,看視訊,拿例子來學習知識,在敲程式碼的過程中理解問題。在此期間如果遇到不懂得或者是感覺很模糊的地方,及時的上網找相應的部落格進行理解。基本上就是在敲程式碼中學習技術。並且對技術要及時的進行總結,但是我不推薦一個知識點總結一次,這樣根本沒有那麼多的時間,最好的是看完之後,從全域性出發,對整個知識進行積累和總結,在總結的過程中,多看一下其他人的部落格,集思廣益,收穫會很大。

    ④Do !  做!做是什麼?是理論到實踐的必經之路,是你成為大牛的必經之路,找個專案,認真的做完,對一些常用的技巧和方法進行歸納整理,釋出到自己的部落格上,在做專案的時候,有很多的途徑,我最喜歡 的是看視訊了,只要你前面沒偷懶,認真的學習了,在這個時候你就會發現都是so easy的事情。在做專案的時候,要注意的是,遇到不會的,或者是有新的理解一定要去探索,這樣會知道的越來越多,同時為了防止遺忘,及時的對部落格進行更新,或許你遇到的問題也可能是別人遇到的,這樣你的人氣值就上來了!

  比如對Struts2 的學習。其實大約一週前就學完了,但是懶癌犯了,懶得動,一直拖著沒整理。因此提醒大家:當日事,當日畢!當日事,當日畢!當日事,當日畢!因為明天還有很多事情要做......

  在沒有進行Struts2 的學習之前,我用jsp+Servlet+javaBean+mysql+Jdbc+(bootStrap/EasyUi/Layui)開發了5個說大不大說小不小的狗屁專案,那tm寫的叫一個累啊......但是很爽啊,哈哈哈,因為要實現一個方法比如說分頁,那基本上就可以從底幹到頂,熟悉整個流程。印象很深的一個功能是檔案上傳和下載,如果使用Struts那簡直簡單的.....超級爽啊。但是沒學這個之前,我tm累的和狗一樣,還是學習了別人的部落格,自己加以改造,成功實現了資料庫mysql存檔名,伺服器儲存檔案,對檔案能夠進行上傳和下載。雖然累但是對這部分功能還是瞭解的比較好了。框架確實好,用起來很爽。但是我還是喜歡研究基礎的東西,這樣在學別的框架那就是輕車熟路了。話不多說我們開始對Struts2進行剝皮抽筋的解剖整理。我接下來將主要從以下幾個方面進行總結:

Struts2是什麼玩意?核心?主要的功能?
Struts2的核心知識;
Struts2牛逼的攔截器,臥槽這才是最牛的核心!
Struts2的值棧和OGNL牛逼啊!
Struts2的標籤三大類是什麼?
Struts2的國際化有哪些東西啊?
Struts2的驗證框架簡單嗎?
Struts2檔案上傳和下載為什麼如此簡單?
Struts2防止重複提交做的努力?
Struts2的小技巧(持久跟新......
          一  Struts2是什麼玩意?核心?主要的功能?                 

Struts2在使用者請求、模組化處理方面、頁面展示表現的很牛逼。

 

  應用基本處理流程:Web容器在接收到HttpServletRequest請求傳遞給一個過濾器ActionContextCleanUp,之後經過Otherfiters。接下來呼叫FilterDispatcher核心控制器,其通過呼叫ActionMapper確認請求的是哪一個Action.ActionMapper返回一個收集Action詳細資訊的ActionMaping物件。

之後ActionProxy獲得FliterDispatcher傳遞來的控制權,ActionProxy呼叫配置管理器(Configuration Manager)從配置檔案struts.xml讀取到配置資訊。之後建立ActionInvocation物件,ActionInvocation在呼叫Action之前依次的呼叫所用的配置攔截器(Interceptor N),一旦執行結果返回結果字串ActionInvocation負責查詢結果字串對應的(Result)然後執行Result,同時Result可以呼叫一些模板(Jsp,FreeMarker,Velocity或者是其他的)來呈現頁面。

  在呼叫攔截器之後,我們進入攔截器(Interceptor N)會被執行(順序與Action執行之前相反)。之後響應(HttpServletResponse)被返回在web.xml中的配置的那些過濾器和核心控制器(FilterDispatcher)。

 

 

 

 

 

  下面我們以一個實際的例子進行講解。首先我們進行Struts2版本的HelloWorld的實現過程。

一 新建一個Dynamic web Project專案
第一步:File->New->Other->在搜尋框裡面搜尋Dynamic Web Project.

 

 

 

 

 

 

 

 

 

 

 

第二步:之後新建一個Web的專案(選擇Dynamic web module Version為2.5) 完成之後finish。

 

二  引入必須的jar包

對於使用Struts2需要引入一些核心的jar包,其中的所需的jar包如圖1-1所示:

  

圖1-1 核心jar包(放在lib資料夾中)

三 配置過濾器(web.xml檔案中)
  對web.xml進行配置,主要是配置過濾器,將所有的請求全部交給org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter核心控制器處理。配置內容如下;

 

複製程式碼
 1 <filter>
 2     <filter-name>Struts2</filter-name>
 3     <filter-class>
 4 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 
 5 </filter-class>
 6 </filter>
 7 <filter-mapping>
 8     <filter-name>Struts2</filter-name>
 9     <url-pattern>/*</url-pattern>
10 </filter-mapping>
複製程式碼
 

  通過配置攔截器地址(<filter-mapping></filter-mapping),<url-pattern>/*</url-pattern>將所有的HttpServletReqeust請求全部交給了名字叫做Struts2的攔截器(<filter-name>Struts2</filter-name>)進行處理,在前面的<filter></filter>攔截器,定義的名為Struts2攔截器(<filter-name>Struts2</filter-name>)被捕獲,進而呼叫了定義的攔截器類<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>進行處理。

四  配置Struts.xml檔案
   struts.xml檔案中必須的內容:

1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
將struts.xml檔案放在預設的src下。如圖1-2所示:

圖1-2 struts檔案存放

 

五、建立HelloWorldAction類,並在struts中進行配置。
建立一個HelloWorldAction類,放在yxs.Action包下。在HelloWorldAction類中生成預設的 execute()方法。具體程式碼如下:

複製程式碼
 1  public class HelloWorldAction implements Action{
 2           /* (non-Javadoc)
 3            * @see com.opensymphony.xwork2.Action#execute()
 4 */
 5           @Override
 6           public String execute() throws Exception {
 7               // TODO Auto-generated method stub
 8               System.out.println("執行了Action的預設構造方法!");
 9               return SUCCESS;
10          }
11  }
複製程式碼
該類實現了Action介面,execute方法返回SUCCESS。在struts.xml中進行配置:

複製程式碼
 1 <struts>
 2 <!-- 預設繼承自struts-default包 -->
 3     <package name="helloWorld" extends="struts-default">
 4 <!-- 如果前端訪問hello方法,就會呼叫yxs.Action.HelloWorldAction類 -->
 5         <action name="hello" class="yxs.Action.HelloWorldAction">
 6         <!-- HelloWorldAction類如果返回success引數(SUCCESS就是success),就會呼叫helloWorld.jsp模板進行顯示 -->
 7             <result name="success">helloWorld.jsp</result>
 8         </action>
 9     </package>
10 </struts>
複製程式碼
六 建立helloWorld.jsp,部署tomcat實現HelloWorld
helloWorld.jsp檔案程式碼如下:
複製程式碼