Java Struts Web 初體驗~~~

近期因為負責的案子大多都是Java Web,所以也開始接觸了一些Java 的開源框架,也慢慢對Java有了更進一步的了解,而今天要介紹的就是Java Struts,Java Struts是一種走(MVC)架構的框架,跟之前學習過的Spring MVC在應用以及設定上其實有許多相似的地方,接下來就簡單的介紹一下Struts的Hello Worlds!!以及簡單的表單傳送~~~

  • 開發工具 : Eclipse Java Neon.3 Release (4.6.3)
  • Struts版本 : 1.3.10
  • Server : Tomcat 9.0

step 1. 先下載Structs1.3.10 ( https://struts.apache.org/download.cgi )

step 2. 接著我們先從Eclipse新增一個Dynamic Web Project

struts-1

step 3. 把剛才下載好的Struts 1.3.10( \struts-1.3.10-all\struts-1.3.10\lib ) 裡面的jar檔加入參考

  • 在專案folder上面點右,選擇Bulid Path >> Add Library

struts-2

  •  選擇User Libraries點選Next,將( \struts-1.3.10-all\struts-1.3.10\lib ) 裡面的jar檔加入

struts-3

struts-4

step 4. 到剛才下載好的Struts1.3.10,找到 struts-blank-1.3.10.war ( struts-1.3.10\apps ) 將副檔名改成*.zip 並且解壓縮 ,將裡面的檔案複製到專案的WebContent下面

struts-5

這個是一個空白的範例~可以直接使用~裡面包含了核心設定檔struts-config.xml及web.xml透過這個可以加速我們Web App的開發,這時候我們可以直接用Tomcat執行此專案如果出現下圖所示的畫面代表Struts基本設定已經成功了~

struts-6

step 5. 接下來我們打開web.xml

從web.xml中的<servlet>設定我們可以看到幾個重點

  • 負責Controller工作的是ActionServlet,理論上只要是Client Request都會經過ActionServlet來發送
  • ActionServlet會去讀取struts-config.xml這隻設定檔其中包含了Sturts的一些相關設定
  • servlet-mapping設定,ActionServlet 會去處理所有來自*.do的Request

這些就是web.xml的幾個較為重要的設定~~~

step 6. 打開struts-config.xml,顧名思義這個檔案就是Struts的核心所在了

在struts-config.xml中,透過 action-mappings 的設定,來達成Client Request與Server的溝通

  • action-mappings : 設定Request與Server Action的對應關係,path=”Hello” and  type=”com.appx.action.HelloAction”  時,當我們的Request是Hello發出時,就會使用HelloAction來處理這個Request,而forward的設定則是HelloAction執行結速後要導向的對象,一個action中可以有多個forward對象,在action中將會去對應forward上的name來尋找並返回對應ActionForward 物件,ActionServlet會根據action傳回的ActionForward來將請求轉發至指定的對象。
  • form-bean : 設定View(表單),與對應的Class,當表單被送到Server時會將表單的name,去對應form-bean是否有相同的name,如果有找到相同的name,就會將值注入該form-bean對應的Class

step 7. 由action-mappings 的設定我們可以知道,必須要有一個HelloAction來處理Hello發出的請求,而HelloAction是必須繼承org.apache.struts.action.Action且覆寫execute()

如此一來~只要是Hello發出的請求,就都會交由HelloAction來處理,當我們處理完這個Action要做的事之後,必須呼叫ActionMapping的物件,ActionMapping就會去struts-config.xml尋找是否有這個forward對象,如果有找到,Servlet就使用回傳的ActionForward將Request轉發至指定的對象。

因為我們設定的<forward name=”helloUser” path=”/pages/Hello.jsp” />因此我們在相對應得路徑中加入Hello.jsp的頁面

然後就可以啟動Server,http://localhost:8080/${web.xml的display-name}/Hello.do,就可以看到以下畫面

struts-7

這樣我們就完成了Struts 的HelloWorld!!!

另外Struts中還有一個ActionForm的應用,ActionForm可以把我們的表單以物件來表示,所以當我們在設計物件時必須繼承org.apache.struts.action.ActionForm,並且要提供getter及setter的方法,在ActionForm產生後會去與相對應的物件做比對,如果有相同的參數就會用setter將數值注入其中,以下提供簡單的ActionForm操作例子~~~

step 1. 我們先來建立表的物件 UserForm.java

ps.要記得繼承org.apache.struts.action.ActionForm才會有效果喔~~~

step 2. 在struts-config.xml加入<form-bean>設定表單名稱以及與剛剛建立的UserForm對應,並且在action中加入對應的表單名稱

step 3. 接著處理Login的Action  LoginAction.java

經過設定,我們的表單會透過ActionForm傳進來,在這裡我們還需要把ActionForm轉型成UserForm才可以使用UserForm的getter方法,經過簡單的帳號密碼驗證,我們透過forward的方式導向登入成功就導向[helloUser]的頁面,失敗就回到登入頁面並顯示登入敗的訊息~~

step 4. 最後我們要加上登入表單的頁面 LoginForm.jsp

最後我們就可以啟動Server來測是囉~~

struts-8

struts-9

到這邊ActionForm的基本應用也告段落了~~~

最後附上程式連結供大家參考喔~https://github.com/jimmingOu/StrutsWebDemo/