850 likes | 967 Views
Observations on JCOE Project. Chun-Feng Liao Nov 13,2003 NCCU Computer Center. JCOE 對中心來說有什麼意義 1. 帶來許多正規而嚴謹的開發方法論 (RUP) 、工具 (Eclipse , Ant) 與應用程式框架 (Struts 、 OJB) JCOE provides us a chance to evalute these skills .
E N D
Observations on JCOE Project Chun-Feng Liao Nov 13,2003 NCCU Computer Center
JCOE對中心來說有什麼意義 1 • 帶來許多正規而嚴謹的開發方法論(RUP)、工具(Eclipse , Ant)與應用程式框架(Struts、OJB) • JCOE provides us a chance to evalute these skills . • Average loading of 6F will become higher in the future .Somehow we have to find a good way to imporve efficiency. • We need not to apply all these skills , but JCOE did point out a good direction for us.
JCOE對中心來說有什麼意義 2 • 參與JCOE專案所習得的知識,可能會對幾位應用系統組幾位技術師未來做架構與組織決策時提供寶貴的經驗。 • 在參與過程中也許有很多衝突、挫折與不愉快,但我個人感覺它們應該都是一個組織成長的過程,最後總會找到一個最好的方向。
Frameworks and JCOE Project Chun-Feng Liao Nov 13,2003 NCCU Computer Center
Frameworks in JCOE • Front-end : Apache Struts • Business Logic : Frameworks extracted from Domain model / Use cases . • Persistence : Apache OJB
Why Framework ? • Encapsulate an expert’s experiences or knowledges . • Encourages the reuse of software components . • Makes development easier and software more scalable .
Applying SAWA Frameworks • Framework Develop time • 2002.11 ~ 2003.06 (7個月/ 1人 ) • Applications Develop time • 改寫時間2003.7 ~ 2003.8 (2個月/ 2人 )
Experiences of Applying Frameworks • Developers should have strong OO backgrounds. • 在Programmer沒有足夠OO Background的情況下套用Framework可能造成反效果. • Learning curve should be taken into account. • Once framework is on-line , it will be very hard to modified.
Struts Framework in Practice Chun-Feng Liao Nov 13,2003 NCCU Computer Center
Introduction • Struts Framework will be the first Framework to adopt in JCOE. • Struts is a Open-source project hosted in Apache. • Struts involves significant learning curve , especially its config files.
Struts文件 • 官方版User Guide • 包含所有詳細設定、自訂標籤的細節。 • http://jakarta.apache.org/struts/userGuide/index.html • 文件結構簡介
使用者認証:早期的做法 before 2001.04 servlet 資料庫 jsp 資料庫 jsp JavaBean (2001.04 ~ 2002.03(some) ~ 2003.06(most)) 資料庫
用Servlet將business logic封裝 html Servlet 資料庫 set data jsp Java Bean read data Request or Session Scope
範例:使用者認証 index.htm LoginProcessor 資料庫 set data mainMenu.jsp UserDataBean read data Request or Session Scope
將Servlet功能細分 index.htm Controller LoginAction 資料庫 mainMenu.jsp Java Bean Request or Session Scope
MVC index.htm Controller View LoginAction 資料庫 mainMenu.jsp Java Bean Model Request or Session Scope (Used by Java Team of 6F from 2003.06 )
Struts主要元件 • Struts JSP自訂標籤庫 • ActionForms • Action classes • ActionServlet • struts-config.xml
使用Struts控制項取代傳統Html控制項 • 目的:使用Struts的html控制項才能利用ActionForm的好處。 • 有時會和JSTL一起合併使用。
傳統的Html Form <html> <body> <form action=“sayHello.do”> <input type=“text” name=“userName”/> <input type=“submit” /> </form> </body> </html>
使用Struts控制項取代html控制項 • 修改web.xml • 副檔名改成.jsp • 修改tag
使用Struts控制項取代傳統html控制項 • 修改web.xml <taglib> <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri> <taglib-location> /WEB-INF/tld/struts-html.tld </taglib-location> </taglib> TLD真正的位置 隨便取個名字,識別用.
使用Struts控制項取代傳統html控制項 <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <html:html> <html:form action=“sayHello.do”> <html:text property=“userName” /> <html:submit /> </html:form> </html:html> 相同! 要先宣告 前面加上html的prefix
ActionForm • 在ASP.NET中每一個aspx後面有所謂WebForm,處理顯示邏輯。 • 在Struts中,每一個Form後面也會有一個ActionForm。
HTML的Form如何與ActionForm對映? • 基本上每一個<html:form>……</html:form>背後都會有一個ActionForm。 • 表單的每一個輸入欄位原則上對映到JavaBean的一個property。
所對映到的屬性 範例 <html:html> <html:form action=“sayHello.do”> <html:text name=“userNameForm”property=“userName” /> <html:text name=“userNameForm”property=“password”/> <html:submit /> </html:form> </html:html> ActionForm名稱
UserNameForm Package demo; Public class UserNameForm extends ActionForm { // 屬性和html form的要一一對應,名字也要相同 private String userName; private String password; // 每一個屬性都要有getter及setter public void setUserName(String userName) {…} public String getUserName() {…..} public void setPassword(){…..} public String getPassword() {….} } 如果有十個屬性怎麼辦? 使用DynaBean!
登記Form Bean <form-bean name=“userNameForm” type=“demo.UserNameForm” /> 通常出現在struts-config.xml的第二段
使用DynaBean <form-bean name=“userNameForm” type=“org.apache.struts.action.DynaActionForm” > <form-property name=“userName” type=“java.lang.String”/> <form-property name=“password” type=“java.lang.String”/> </form-bean> 使用單一Map物件儲存所有JavaBean的屬性
讀取ActionForm • JSTL • <c:out value=“${sessionScope.userNameForm.name}” /> • Struts-bean • <bean:write name=“userNameForm” property=“name” />
JSTL與Struts Tag,何者優先? Should you use JSTL tags instead of Struts tags whenever you can? Sure, if your container supports Servlets 2.3 and JSP 1.2, and that’s what you want to do.(儘可能使用JSTL取代Struts標籤) If JSTL already existed, most of the Struts tags would neverhave been written. -Ted Husted ,Jakarta Struts technical lead. JSTL優先!
JSTL與Struts tag取捨準則 • (摘自Struts in Action by Ted Husted) • 使用JSTL取代<bean:…>與<logic:…> • 繼續使用<html:……> • 目前Struts正在開發Struts-EL,未來在<html:…>中將可使用Expression Language.
Action做些什麼? • 從ActionForm中取得資料 • 從request/response中取得資料 • 處理商業邏輯(含資料庫存取) • 將控制權forward到合適的View中
SayHelloAction public class SayHelloAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { UserNameForm myForm = (UserNameForm) form; …..(do something)… return (mapping.findForward("success")); } }
使用struts-config.xml控制ActionServlet行為! ActionServlet
Struts-config.xml • Struts的核心,用來描述各元件的關係。 • 市面上有很多GUI工具可支援自動產生。
struuts-config.xml主要區段 • 依先後次序為: • DataSource設定 (JDBC) • ActionForm設定 重要! • Global相關設定 • ActionMapping設定 重要! • Controller設定 • 其它設定(i18n,plug-in,…) • 我們只講ActionForm及ActionMapping,其它config的細節請自行參考struts線上文件。
ActionForm區段 • 目的:在此宣告你寫的ActionForm及其代名(你要怎麼稱呼他?),以便在ActionMapping中做相對設定。 • 以<form-beans>…</form-beans>為界。 • <form-beans>中包含數個<form-bean>。
ActionForm區段 <form-beans> <form-bean name="userNameForm" type="simple.form.SimpleForm“ /> <form-bean name=“anotherForm" type="simple.form.AnotherForm“ /> </form-beans> ActionMapping區段將使用這個名字來指稱你的FormBeans
ActionMappings區段 • 目的:將jsp背後的ActionForm、發出的url 、Action class及其處理完後要forward的對象,四者間的關係連結起來。
ActionMappings區段 • 如何將以下這幾個component的關係化成文字? /sayHello.do index.jsp ActionServlet Request Scope UserNameForm hello.jsp SayHelloAction success
ActionMappings區段 <action-mappings> <action path="/sayHello" type="simple.action.SayHelloAction" name="userNameForm" scope="request" input=“index.jsp” > <forward name="success" path="/hello.jsp"/> </action> <action>…..</action> <action>…..</action> </action-mappings>
DEMO • 觀察struts-config.xml • demo
web.xml要做的設定 • 登記ActionServlet • 副檔名 • Tag library註冊 DEMO (觀察web.xml)
Tools Inconsistency • Rose vs Together • Eclipse + Ant vs JBuilder • CVS vs Star Team Note : Even newest version of JBuilder only support Struts 1.0 (We use 1.1 in JCOE)
如何建置Struts應用程式 • 使用Eclipse