第九章MVC設(shè)計(jì)模式編輯課件目標(biāo)掌握ModelI體系結(jié)構(gòu)掌握ModelII體系結(jié)構(gòu)掌握MVC應(yīng)用程序
2編輯課件ModelI體系結(jié)構(gòu)6-1ModelI體系結(jié)構(gòu)結(jié)合使用JSP頁(yè)面和JavaBean來(lái)開(kāi)發(fā)Web應(yīng)用程序請(qǐng)求應(yīng)用效勞器響應(yīng)JSP頁(yè)面JavaBean數(shù)據(jù)庫(kù)服務(wù)器3編輯課件ModelI體系結(jié)構(gòu)6-2ModelI體系結(jié)構(gòu)用于開(kāi)發(fā)簡(jiǎn)單的應(yīng)用程序ModelI體系結(jié)構(gòu)包括多個(gè)用戶可與之交互的頁(yè)面客戶端能夠直接訪問(wèn)加載到效勞器上的頁(yè)面ModelIWeb應(yīng)用程序由復(fù)雜的Web邏輯組成,并鏈接至Web應(yīng)用程序的其他頁(yè)面4編輯課件ModelI體系結(jié)構(gòu)6-3本例如演示ModelI體系結(jié)構(gòu)??蛻糨斎氘a(chǎn)品ID時(shí),顯示相關(guān)產(chǎn)品信息publicvoidsetProductname(Stringprodname){ductname=prodname;}publicStringgetProductname(){returnproductname;}publicvoidsetProducttype(Stringprodtype){ducttype=prodtype;}publicStringgetProducttype(){returnproducttype;}這是一個(gè)JavaBean,它為產(chǎn)品名稱(chēng)和類(lèi)型定義了各種方法5編輯課件ModelI體系結(jié)構(gòu)6-4publicclassColProduct{...privateConnBeancBean=ConnBean.newInstance();publicCollectiongetProduct(Stringsql){Collectioncol=newArrayList();try{con=cBean.getConnDB();stmt=con.createStatement();rs=stmt.executeQuery(sql);while(rs.next()){ProductBeanproduct=newProductBean();product.setProductname(rs.getString(2));product.setProducttype(rs.getString(3));product.setProductprice(rs.getInt(4));product.setBrand(rs.getString(5));product.setDescription(rs.getString(6));col.add(product);}...這個(gè)
JavaBean將數(shù)據(jù)通過(guò)ProductBean放入集合ArrayList6編輯課件ModelI體系結(jié)構(gòu)6-5publicclassConnBean{Connectioncon=null;privatestaticConnBeanme=newConnBean();...publicstaticConnBeannewInstance(){returnme;}publicConnectiongetConnDB(){try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();con=DriverManager.getConnection("jdbc:odbc:accp","","");}...returncon;}}這個(gè)JavaBean實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接7編輯課件ModelI體系結(jié)構(gòu)6-6<jsp:useBeanid="product"scope="session"class="example_sg_1.ColProduct"/><%...Collectioncol=product.getProduct(sql);Iteratorit=col.iterator();ProductBeantemp=newProductBean();if(it.hasNext()){temp=(ProductBean)it.next();p_productname=temp.getProductname();...}%>這個(gè)
JSP頁(yè)面包含各JSP操作,可以用來(lái)訪問(wèn)JavaBean組件對(duì)象8編輯課件ModelII體系結(jié)構(gòu)5-1ModelI體系結(jié)構(gòu)結(jié)合使用JSP頁(yè)面和JavaBean來(lái)開(kāi)發(fā)Web應(yīng)用程序請(qǐng)求應(yīng)用服務(wù)器響應(yīng)JSP頁(yè)面JavaBeanServlet數(shù)據(jù)庫(kù)服務(wù)器9編輯課件ModelII體系結(jié)構(gòu)
5-2
設(shè)計(jì)模式為軟件設(shè)計(jì)問(wèn)題提供標(biāo)準(zhǔn)的解決方案ModelII是一種設(shè)計(jì)模式MVC將交互式應(yīng)用程序組織成三個(gè)獨(dú)立的模塊:
應(yīng)用程序模塊,用于表示數(shù)據(jù)和業(yè)務(wù)邏輯
數(shù)據(jù)表示
控制器,用于發(fā)送請(qǐng)求和控制應(yīng)用程序的流程10編輯課件ModelII體系結(jié)構(gòu)
5-3ModelII體系結(jié)構(gòu)的優(yōu)點(diǎn):可以很靈活地設(shè)計(jì)和實(shí)現(xiàn)模型對(duì)象使用同一模型處理多個(gè)請(qǐng)求增加新客戶端更容易MVC的優(yōu)點(diǎn)11編輯課件ModelII體系結(jié)構(gòu)
5-4MVC體系結(jié)構(gòu)的各種對(duì)象包括:MVC對(duì)象控制器模型視圖12編輯課件ModelII體系結(jié)構(gòu)
5-5
模型對(duì)象表示W(wǎng)eb應(yīng)用程序的數(shù)據(jù)元素,用戶可與這些數(shù)據(jù)元素進(jìn)行交互
控制器對(duì)象充當(dāng)應(yīng)用程序視圖對(duì)象和模型對(duì)象之間的中間對(duì)象
視圖對(duì)象提供模型組件以開(kāi)發(fā)用戶界面ModelII體系結(jié)構(gòu)的各種對(duì)象包括:13編輯課件基于MVC體系結(jié)構(gòu)的應(yīng)用程序6-1MVC體系結(jié)構(gòu)遵循分層方式,用戶使用該方式可將代碼分別寫(xiě)入不同的類(lèi)和方法中。以一個(gè)簡(jiǎn)單論壇系統(tǒng)的局部功能為例,加以理解...<formname="form1"action="newtopicservlet"method="POST"><tablealign="center"bgcolor="#008800"border="0"width=80%><trbgcolor="#cccccc"><td>標(biāo)題</td><td><inputtype=textname="title"></td></tr>...<inputtype=submitvalue=提交></td></tr></table>...這個(gè)JSP提供圖形界面用于客戶發(fā)新貼14編輯課件基于MVC體系結(jié)構(gòu)的應(yīng)用程序6-2...publicclassnewtopicservletextendsHttpServlet{...publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{...request.setCharacterEncoding("GBK");Stringtitle=request.getParameter("title");...DataBaseConndbBean=DataBaseConn.newInstance();Connectioncon=dbBean.getConnDB();Statementstmt=con.createStatement();.../***把視圖派發(fā)到viewForum.jsp*/javax.servlet.RequestDispatcherdis=request.getRequestDispatcher("viewforum.jsp");dis.forward(request,response);...這個(gè)Servlet轉(zhuǎn)發(fā)視圖15編輯課件基于MVC體系結(jié)構(gòu)的應(yīng)用程序6-3...<jsp:useBeanid="page2"class="example_sg_3.PageBean"scope="request"/>...<%if(page2.getMaxPage()!=1){%><formname="PageForm"action="forumservlet"method="post">...<%if(page2.getCurPage()==1){out.print("首頁(yè)上一頁(yè)");}else{...%><aHREF="javascript:gotoPage(1)">首頁(yè)</A><aHREF="javascript:gotoPage(<%=page2.getCurPage()-1%>)">上一頁(yè)</A><%}%>...例如3查看論壇的內(nèi)容,并且進(jìn)行分頁(yè)顯示視圖對(duì)象16編輯課件基于MVC體系結(jié)構(gòu)的應(yīng)用程序
6-4publicclassForumServletextendsHttpServlet{...PageBeanpage1=newPageBean();PageBeanpage2=page1.getResult((String)request.getParameter("jumpPage"));//把PageBean保存到request對(duì)象中。
request.setAttribute("page2",page2);.../***把視圖派發(fā)到view.jsp*/javax.servlet.RequestDispatcherdis=request.getRequestDispatcher("view.jsp");dis.forward(request,response);...控制器對(duì)象17基于MVC體系結(jié)構(gòu)的應(yīng)用程序6-5...publicintgetMaxPage(){returnthis.maxPage;}publicvoidsetCurPage(intcurPage){this.curPage=curPage;...while(rset.next()){if(i>(pageNum-1)*pageBean.rowsPer1){Object[]obj=newObject[3];obj[0]=rset.getString(2);...publicvoidsetPageBean()throwsException{//得到總行數(shù)
this.setMaxRowCount(this.getAvailableCount());if(this.maxRowCount%this.rowsPerPage==0){//根據(jù)總行數(shù)計(jì)算總頁(yè)數(shù)
this.maxPage=this.maxRowCount/this.rowsPerPage;}else{this.maxPage=this.maxRowCount/this.rowsPerPage+1;...模型對(duì)象18編輯課件基于MVC體系結(jié)構(gòu)的應(yīng)用程序6-6...publicclassDataBaseConn{Connectioncon=null;privatestaticDataBaseConnme=newDataBaseConn();publicstaticDataBaseConnnewInstance(){returnme;
評(píng)論
0/150
提交評(píng)論