




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第三章第三章自定義MVC框架回顧與作業(yè)點評回顧與作業(yè)點評n Model I的缺點有哪些?的缺點有哪些?n 為什么要使用為什么要使用MVC設(shè)計模式開發(fā)應(yīng)用程序?設(shè)計模式開發(fā)應(yīng)用程序?n MVC模式的缺點有哪些?模式的缺點有哪些?本章任務(wù)本章任務(wù)n 實現(xiàn)實現(xiàn)MVC自定義框架并使用自定義框架并使用n基于Servlet技術(shù)n是MVC思想的一個實現(xiàn)n類似Struts框架本章目標(biāo)本章目標(biāo)n 掌握掌握MVC設(shè)計模式設(shè)計模式n 使用使用MVC設(shè)計模式開發(fā)自定義設(shè)計模式開發(fā)自定義MVC框架框架為什么需要框架技術(shù)為什么需要框架技術(shù)2-1n 如何更快更好地寫簡歷?如何更快更好地寫簡歷?n使用Word簡歷模板n 思考
2、:思考:n使用模板有什么好處呢?結(jié)構(gòu)統(tǒng)一,便于人事閱讀結(jié)構(gòu)統(tǒng)一,便于人事閱讀不用考慮布局、排版等,提高效率不用考慮布局、排版等,提高效率可專心在簡歷內(nèi)容上可專心在簡歷內(nèi)容上新手也可以作出專業(yè)的簡歷新手也可以作出專業(yè)的簡歷什么是框架技術(shù)什么是框架技術(shù)n “框架技術(shù)框架技術(shù)”幫我們更幫我們更快快更更好好地構(gòu)建程序:地構(gòu)建程序:n提供可重用的公共結(jié)構(gòu)n按一定規(guī)則來組織組件n應(yīng)用程序的半成品n 優(yōu)勢:優(yōu)勢:n不用再考慮公共問題n專心在業(yè)務(wù)實現(xiàn)上n結(jié)構(gòu)統(tǒng)一,易于學(xué)習(xí)、維護(hù)n新手也可寫出好程序 直接組裝汽車,不用自己造輪子直接組裝汽車,不用自己造輪子站在巨人的肩膀上,享用前人經(jīng)驗和智慧站在巨人的肩膀上,享
3、用前人經(jīng)驗和智慧 顧客點菜顧客點菜顧客點菜顧客點菜中餐中餐廚師廚師服務(wù)員服務(wù)員加工菜肴加工菜肴把菜單給廚師把菜單給廚師把把服服務(wù)務(wù)/菜菜給給顧顧客客以各自的功以各自的功能進(jìn)行分工能進(jìn)行分工生活中的生活中的MVC西餐西餐廚師廚師把菜單給廚師把菜單給廚師某些服務(wù)VCM 行為抽象行為抽象自定義自定義MVC客戶請求中心控制sevrlet登錄操作ACTION房屋信息ACTIONACTION計算服務(wù)轉(zhuǎn)換等(非數(shù)據(jù)庫類)DB存儲/持久化存儲返回結(jié)果ACTION黃色部分為設(shè)計核心自定義自定義MVC步驟步驟1/2n 前端控制器前端控制器n新建一個Servletn配置到web.xml中,讓這個Servlet能處理
4、*.action請求n 核心功能核心功能n接受請求n根據(jù)請求URL,找到合適的Actionn最簡單的控制器,只需用if/else去找Actionn調(diào)用Actionn轉(zhuǎn)向輸出頁面演示示例:演示示例:Controller的設(shè)計過程的設(shè)計過程自定義自定義MVC步驟步驟2/2n 設(shè)計設(shè)計Action接口接口nAction是具體處理業(yè)務(wù)邏輯的地方import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public interface Action public String ex
5、ecute(HttpServletRequest request, HttpServletResponse response) throws Exception;自定義自定義MVC簡單使用簡單使用n 以登錄為例以登錄為例n實現(xiàn)Action接口n在前端控制器添加一個if/else判斷演示示例:演示示例:Action實現(xiàn)實現(xiàn)指導(dǎo)指導(dǎo)完成用戶注冊功能完成用戶注冊功能2-1n 訓(xùn)練要點:訓(xùn)練要點:n掌握自定義MVC框架n使用Servlet作為控制器n 需求說明:需求說明:n開發(fā)自定義MVC框架n通過自定義Action實現(xiàn)邏輯控制n完成用戶注冊功能指導(dǎo)指導(dǎo)完成用戶注冊功能完成用戶注冊功能2-2n 實現(xiàn)思
6、路:實現(xiàn)思路:n開發(fā)模型M:實現(xiàn)業(yè)務(wù)邏輯的接口和類n開發(fā)控制器C:自定義Action,由RegisterAction類實現(xiàn)n開發(fā)視圖V:register.jspn調(diào)試運行完成時間:完成時間:20分鐘分鐘共性問題集中講解共性問題集中講解n常見調(diào)試問題及解決辦法常見調(diào)試問題及解決辦法n代碼規(guī)范問題代碼規(guī)范問題共性問題集中講解共性問題集中講解Controller的完善的完善7-1n 在基礎(chǔ)版本的自定義在基礎(chǔ)版本的自定義MVC框架中,每新增一個框架中,每新增一個Action就要去改前端控制器的代碼,框架代碼不就要去改前端控制器的代碼,框架代碼不通用,有沒有好的解決辦法呢?通用,有沒有好的解決辦法呢?將
7、將url與與Action的映射信息保存在配置文件中,的映射信息保存在配置文件中,增加增加Action只需要修改配置文件只需要修改配置文件Controller的完善的完善7-2n 使用配置文件保存使用配置文件保存Action信息信息!DOCTYPE mystruts. page/register_success.jsp page/register.jsp page/register.jsp page/manager.jsp page/result.jsp Action名稱名稱Action應(yīng)用路徑應(yīng)用路徑設(shè)置頁面轉(zhuǎn)向設(shè)置頁面轉(zhuǎn)向Controller的完善的完善7-3n 保存保存Action信息信息
8、public class ActionMapping /* Action 元素中的元素中的name 屬性屬性*/ private String name; /* Action 元素中的元素中的className 屬性屬性*/ private String className; /* 保存配置的保存配置的Result 屬性信息屬性信息*/ private Map resultMap=new HashMap(); /省略省略setter/getter 方法方法 public String getResult(String name) return resultMap.get(name); publ
9、ic void addResult(String name,String result) this.resultMap.put(name, result); 保存保存Action信息的信息的集合集合獲取獲取Action添加添加ActionController的完善的完善7-4n 讀取讀取Action信息信息public void init(String configureFileName) . InputStream is = this.getClass().getResourceAsStream(/ + configureFileName); /使用使用dom4j 讀取讀取XML 文件文件
10、Document doc = new SAXReader().read(is); Element root = doc.getRootElement(); / 遍歷所有遍歷所有Action 元素元素 Iterator actionsIt = root.elements(actions).iterator(); .配置文件名稱配置文件名稱獲取文件信息獲取文件信息讀取配置文件讀取配置文件獲取信息內(nèi)容獲取信息內(nèi)容Controller的完善的完善7-5n 使用反射生成使用反射生成Actionpublic class ActionManager /* * createAction方法用來獲取方法用來獲取
11、Action實例實例 * param className Action的全限定類名的全限定類名 */ public static Action createAction(String className) try return (Action)loadClass(className).newInstance(); catch (InstantiationException e) e.printStackTrace(); catch (IllegalAccessException e) e.printStackTrace(); return null; .根據(jù)名稱創(chuàng)建根據(jù)名稱創(chuàng)建Action實例
12、實例Action的類名稱的類名稱Controller的完善的完善7-6 /* * loadClass方法動態(tài)加載類。方法動態(tài)加載類。 * param className Action的完全限定名的完全限定名 */ public static Class loadClass(String className) Class clazz = null; try clazz = Thread.currentThread() .getContextClassLoader().loadClass(className); catch (ClassNotFoundException e) e.printSta
13、ckTrace(); if(clazz = null) try clazz = Class.forName(className); catch (Exception e) e.printStackTrace(); return clazz; 根據(jù)名稱創(chuàng)建根據(jù)名稱創(chuàng)建Class對象對象根據(jù)類名稱得到當(dāng)根據(jù)類名稱得到當(dāng)前運行前運行Class對象對象Controller的完善的完善7-7n 修改修改ActionServlet配置信息配置信息 ActionServlet cn.jbit.mystruts.framework.servlet.ActionServlet config mystruts.x
14、ml 0設(shè)置設(shè)置ActionServlet初始化初始化參數(shù)參數(shù)ActionServlet的引的引用地址用地址Web應(yīng)用啟動時就加載該應(yīng)用啟動時就加載該Servlet指導(dǎo)指導(dǎo)使用使用MVC完成用戶登錄完成用戶登錄2-1n 訓(xùn)練要點:訓(xùn)練要點:n掌握MVC模式n讀取配置文件n動態(tài)加載類的實例n 需求說明:需求說明:n完善自定義MVC框架,讀取配置文件,動態(tài)加載Action實例n使用完善后的自定義MVC 框架,實現(xiàn)用戶登錄功能講解需求說明講解需求說明指導(dǎo)指導(dǎo)使用使用MVC完成用戶登錄完成用戶登錄2-2n 實現(xiàn)思路:實現(xiàn)思路:n編寫配置文件n編寫ActionMapping類,保存Action信息n讀取
15、配置文件n反射生成Actionn完善Controllern修改LoginActionn開發(fā)視圖n調(diào)試運行完成時間:完成時間:30分鐘分鐘共性問題集中講解共性問題集中講解n常見調(diào)試問題及解決辦法常見調(diào)試問題及解決辦法n代碼規(guī)范問題代碼規(guī)范問題共性問題集中講解共性問題集中講解完善視圖完善視圖4-1n 保存視圖保存視圖public class Result private String name; private String value; private boolean isRedirect; public boolean isRedirect() return isRedirect; publi
16、c void setRedirect(boolean isRedirect) this.isRedirect = isRedirect; /省略省略setter/getter 方法方法使用使用Result類保存類保存視圖信息視圖信息完善視圖完善視圖4-2n 修改修改ActionMappingpublic class ActionMapping private Map resultMap=newHashMap(); /* 根據(jù)根據(jù) result-name,返回返回Result 實例實例*/ public Result getResult(String name) return resultMap
17、.get(name); /* * 向向Map 中添加一個中添加一個Result 實例。實例。 */ public void addResult(String name,Result result) this.resultMap.put(name, result); 使用使用Result類保存類保存視圖信息視圖信息完善視圖完善視圖4-3n 修改修改ActionMappingManager類類 /遍歷遍歷Action 元素的子元素元素的子元素-result for (Iterator resultIt =action.elementIterator(result);resultIt.hasNext
18、();) /redirect表示是否重定向表示是否重定向 String isRedirect =resultElement.attributeValue(redirect); result.setRedirect(Boolean.valueOf(isRedirect); result.setValue(resultElement.getText(); /把每個封裝好的把每個封裝好的Result 添加到添加到ActionMapping 中中 mapping.addResult(name, result); 讀取重定向標(biāo)識讀取重定向標(biāo)識將讀取結(jié)果保存到將讀取結(jié)果保存到Result中中完善視圖完善視
19、圖4-4n 修改修改ActionServlet ActionMapping mapping = this.getActionMapping(request); Action action =ActionManager.createAction(mapping.getClassName(); String resultName = action.execute(request, response); Result result = mapping.getResult(resultName); if(result = null)response.sendError(404, 未配置未配置Action 的的result 元素元素); return ; if(result.isRedirect()response.sendRedire
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《從安史之亂到五代十國》開放與革新的隋唐時代課件-1
- 大學(xué)生創(chuàng)業(yè)案例課件
- 房地產(chǎn)經(jīng)紀(jì)房地產(chǎn)顧問銷售技巧培訓(xùn)-69
- 《在蕭紅墓前的五分鐘講演》課件-1
- 2025年2月生態(tài)園區(qū)智慧辦公空間租賃附加條款
- 2025一月份版航空航天銷售協(xié)議技術(shù)參數(shù)分級保密制度
- 建設(shè)工程施工合同索賠管理
- 父母的房屋遺產(chǎn)分配協(xié)議書范例
- 房子出租安全協(xié)議責(zé)任書二零二五年
- 二零二五版第三方代收款協(xié)議范例
- 增材制造產(chǎn)業(yè)調(diào)研報告
- 以刀代筆——手工橡皮章課件
- 醫(yī)院環(huán)境衛(wèi)生整治排查表
- 質(zhì)量和食品安全管理手冊
- 勞動課程校本教材(共43頁)
- 中職語文 大國工匠——彭祥華
- 喜達(dá)屋明星服務(wù)
- 煙草企業(yè)安全生產(chǎn)標(biāo)準(zhǔn)化規(guī)范-第3部分-考核評價準(zhǔn)則和方法
- 風(fēng)機(jī)配套件知識
- 硼氫化鈉還原全文
- 武漢市控制性詳細(xì)規(guī)劃編制技術(shù)規(guī)程610
評論
0/150
提交評論