Java Web程序設計 課件 第10章 MVC_第1頁
Java Web程序設計 課件 第10章 MVC_第2頁
Java Web程序設計 課件 第10章 MVC_第3頁
Java Web程序設計 課件 第10章 MVC_第4頁
Java Web程序設計 課件 第10章 MVC_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第10章MVC主講人:2025/2/61本章課程目標知識目標掌握MVC基本工作原理與開發(fā)過程;理解JSP、JavaBean、Servlet在MVC模式中的角色和工作;能力要求:能根據(jù)需求編寫JSP+JavaBean+Servlet的模塊MVC實現(xiàn)能根據(jù)需要設計MVC各個模塊間恰當?shù)臄?shù)據(jù)傳遞方式2025/2/6《Web程序設計》2主要內(nèi)容2025/2/6《Web程序設計》31JSP開發(fā)模式2MVC模式3JSP+JavaBean+Servlet實現(xiàn)MVC4綜合實例JSP作為一種動態(tài)網(wǎng)頁編程技術(shù),既可以有效地融合HTML、CSS等前端編程技術(shù),還可以通過嵌入Java代碼實現(xiàn)所需的業(yè)務邏輯。因此,就JSP本身而言,可以獨立完整地實現(xiàn)任何實際業(yè)務模塊。然而,在進行實際業(yè)務系統(tǒng)模塊開發(fā)時,JSP本身的缺點也是顯而易見的。2025/2/6《Web程序設計》4JSP缺點可讀性差既包含HTML、CSS、Javascript前端技術(shù)代碼,也包含了Java代碼、JSP標簽等服務器端代碼,容易造成頁面上代碼冗長,代碼可讀性差。可維護性差由于各種代碼混雜在一起,各種前后端語言的注釋方式不一致,造成后期維護時,代碼不易理解,代碼之間的關聯(lián)性大,頁面上前后代碼間的耦合不易察覺,容易造成維護時帶來很多新BUG,降低系統(tǒng)可用性和用戶體驗。可重用性差特別是JSP中的Java代碼與JSP標簽庫,在業(yè)務邏輯近似或相同的情況下,代碼重用只能通過復制粘貼等簡單方式,在維護時極為不便??蓴U展性差JSP頁面的功能具體由Java、HTML、JSP標簽等元素共同完成,因此,在系統(tǒng)擴展功能時,需要先找到相應位置,可能會有多個,再分別插入擴展功能的代碼,不僅容易造成遺漏,還可能帶來潛在的BUG。2025/2/6《Web程序設計》5較為典型的是JSP開發(fā)模式有兩種,一是Model1模式,使用JSP+JavaBean技術(shù);另一種是Model2模式,也即MVC模式,使用Jsp+JavaBean+Servlet技術(shù)。Model1模式,使用JSP與JavaBean技術(shù),將頁面顯示和業(yè)務邏輯處理分開,用JSP實現(xiàn)頁面顯示,JavaBean對象用來保存數(shù)據(jù)和實現(xiàn)業(yè)務邏輯,在JSP中使用JavaBean來實現(xiàn)相應業(yè)務邏輯。2025/2/6《Web程序設計》6Model12025/2/6《Web程序設計》7Model1模式的特點如下:1)優(yōu)點:架構(gòu)較為簡單,容易上手,比較適合小型項目開發(fā)。2)缺點:JSP的職責過多,承擔工作復雜,不利于維護與擴展。2025/2/6《Web程序設計》8主要內(nèi)容2025/2/6《Web程序設計》91JSP開發(fā)模式2MVC模式3JSP+JavaBean+Servlet實現(xiàn)MVC4綜合實例MVC是一種經(jīng)典的設計模式,把交互系統(tǒng)分解成模型(Model)、視圖(View)、控制器(Controller)三種組件。三種組件分別完成相應的職責,通過三者之間的交互,實現(xiàn)業(yè)務系統(tǒng)。這種模式強制性地使應用程序的輸入、處理和輸出分開,實現(xiàn)了系統(tǒng)間組件解耦、模塊代碼復用、可擴展易維護等特性。2025/2/6《Web程序設計》10模型(Model)是軟件所處理問題邏輯在獨立于外在顯示內(nèi)容和形式情況下的內(nèi)在抽象,封裝了問題的核心數(shù)據(jù)、邏輯和功能的計算關系,它獨立于具體的界面表達和I/O操作。視圖(View)是表示模型數(shù)據(jù)及邏輯關系和狀態(tài)的信息,以特定的形式展示給用戶。它從模型獲得需要顯示的信息,允許多個視圖存在,即對相同的信息可以有多個不同的顯示形式??刂破鳎–ontroller)是用來處理用戶與軟件的交互操作,主要職責是控制提供模型中任何變化的傳播,確保用戶界面及時展示模型的結(jié)果信息;它接受用戶的輸入,將輸入反饋給模型,進而實現(xiàn)對模型的計算控制,是使模型和視圖協(xié)調(diào)工作的組件。通常一個視圖對應一個控制器。2025/2/6《Web程序設計》11工作過程Controller接受用戶在View上發(fā)送的請求,解析請求的路徑、參數(shù)以及表達的意圖,找到處理該請求的具體Controller;Controller根據(jù)請求的意圖和參數(shù),向Model層調(diào)用相關的業(yè)務邏輯模塊,并將參數(shù)傳遞給這個模塊;Model層接受Controller層的調(diào)用,以及傳遞的參數(shù),訪問數(shù)據(jù)庫或計算數(shù)據(jù)計算,返回結(jié)果給Controller層。Controller層接收到Model層返回的相關數(shù)據(jù)結(jié)果,組裝數(shù)據(jù)和表示形成View.View層根據(jù)Controller返回的數(shù)據(jù)視圖,解析數(shù)據(jù)和內(nèi)容,將這些結(jié)果以特定的格式展現(xiàn)給用戶。2025/2/6《Web程序設計》12MVC模式的優(yōu)點在于:Model、View、Controller每層負責各自的事情,符合單一職責原則,使得代碼更加易于維護和優(yōu)化。

通過Controller層,將視圖和業(yè)務邏輯進行了解耦,將數(shù)據(jù)展示和數(shù)據(jù)生成放到了不同的模塊中,易于維護與擴展。需要注意的,在實際工程中,如果采用MVC模式但沒有統(tǒng)一的開發(fā)框架,可能導致項目的開發(fā)周期變長,建議采用SpringMVC、SSM或類似的典型開發(fā)框架,提高開發(fā)效率、加速項目進度。2025/2/6《Web程序設計》13主要內(nèi)容2025/2/6《Web程序設計》141JSP開發(fā)模式2MVC模式3JSP+JavaBean+Servlet實現(xiàn)MVC4綜合實例Model2在JSP開發(fā)模式中,MVC模式也稱為Model2模式,主要由JSP+JavaBean+Servlet實現(xiàn)。Servlet主要實現(xiàn)了Controller的職責,負責接受用戶在瀏覽器上的請求;JavaBean主要實現(xiàn)了Model的職責,根據(jù)Controller傳遞的參數(shù)進行數(shù)據(jù)操作,與數(shù)據(jù)庫連接;JSP主要實現(xiàn)了View的職責,將Controller返回的數(shù)據(jù)結(jié)果,形成最終展示在瀏覽器上的頁面。2025/2/6《Web程序設計》152025/2/6《Web程序設計》16主要內(nèi)容2025/2/6《Web程序設計》171JSP開發(fā)模式2MVC模式3JSP+JavaBean+Servlet實現(xiàn)MVC4綜合實例項目背景及需求假設MySql數(shù)據(jù)庫book_db中有一個圖書表(t_book),和一個圖書類型表(t_book_type),主要存儲網(wǎng)上商城中的圖書基本信息,主要的字段及類型說明如下2025/2/6《Web程序設計》18業(yè)務流程2025/2/6《Web程序設計》19(1)查詢展示圖書(1)功能需求該模塊的主要功能為根據(jù)輸入的字段查詢圖書資料信息,將結(jié)果以表格的形式展現(xiàn)在頁面上。查詢展示數(shù)據(jù)的操作流程如下:1)點擊“圖書查詢”頁面,進入到該頁面,顯示所有圖書列表信息;2)輸入某個查詢字符,如圖書名稱,圖書編號,點擊查詢;3)從數(shù)據(jù)表中查詢與該查詢字段匹配的圖書記錄,顯示在頁面上的表格中。2025/2/6《Web程序設計》20BookVO2025/2/6《Web程序設計》21publicclassBookVO{privateintid;/*自增長ID*/privateStringbookName=null;/*圖書名稱*/privateStringbarCode=null;/*圖書條形碼*/privateStringpublish=null;/*圖書出版社*/privateDatepublishDate=null;/*圖書出版日期*/privatefloatprice;/*圖書價格*/privateintcount;/*圖書庫存量*/privateStringcoverPic=null;/*圖書封面*/privateintbookType;/*圖書類型ID*/privateStringbookTypeName=null;/*圖書類型名稱*//*構(gòu)造方法*/publicBookVO(){}.......BookDAO.java2025/2/6《Web程序設計》22publicclassBookDAO{/***根據(jù)條件查詢圖書信息*@paramparams參數(shù)列表,Map的key為參數(shù)名稱(pName|pBarCode|pPublish)*,value為參數(shù)的值*@return返回符合條件的圖書信息列表*/publicList<BookVO>listBook(Map<String,String>params){Connectionconn=DbUtil.getConnection();Stringsql="select*fromt_bookbleftjoint_book_typetonb.bookType=t.typeIdwhere1=1";PreparedStatementpstmt=null;ResultSetrs=null;List<BookVO>list=newVector<BookVO>();......book_list.jsp2025/2/6《Web程序設計》23<%StringpCode=(String)request.getAttribute("pBarCode");StringpName=(String)request.getAttribute("pName");StringpPublish=(String)request.getAttribute("pPublish");%><divid="container"><divid="location">當前位置:圖書模塊》查詢圖書信息</div><divid="buttons"><inputtype="button"value="新增圖書"onclick="location.href='/book/edit?optype=add'"></div><divid="queryArea"><formname="frmMain"action="/book/list"method="post"><span>圖書名稱:<inputtype="text"name="pName"value="<%=pName%>"></span><span>圖書編號:<inputtype="text"name="pCode"value="<%=pCode%>"></span><span>出版社:<inputtype="text"name="pPublish"value="<%=pPublish%>"></span><span><inputtype="submit"value="查詢"><inputtype="reset"value="清空"></span></form></div>BookListServlet.java2025/2/6《Web程序設計》24@WebServlet("/book/list")publicclassBookListServletextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doPost(request,response);}protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//獲取查詢參數(shù)StringbookName=StringUtil.ToCN(request.getParameter("pName"));StringbarCode=StringUtil.ToCN(request.getParameter("pBarCode"));Stringpublish=StringUtil.ToCN(request.getParameter("pPublish"));......(2)編輯圖書編輯圖書主要分為:添加圖書,修改圖書,刪除圖書。其功能主要是提供一個共用的圖書信息編輯頁面(book_edit.jsp),該頁上以表單和字段的形式提供用戶編輯,填寫完成后,將此操作提交到BookEditServlet.java,由該控制器向數(shù)據(jù)庫提交這些圖書信息。主要功能需求為:點擊添加圖書按鈕,將用戶輸入的圖書信息提交至數(shù)據(jù)庫t_book表中。點擊修改按鈕,將用戶修改的圖書信息提交至數(shù)據(jù)庫t_book表中。點擊刪除按鈕,將數(shù)據(jù)庫t_book表中的圖書信息刪除。2025/2/6《Web程序設計》25BookTypeDAO.java2025/2/6《Web程序設計》26Stringsql="select*fromt_book_typewhere1=1";PreparedStatementpstmt=null;ResultSetrs=null;List<BookTypeVO>list=newVector<BookTypeVO>();try{//如果parentId為空,則表示查詢一級分類,否則查詢二級分類if(StringUtil.isNullOrEmpty(parentId))parentId="0";sql+="andparentId=?";pstmt=conn.prepareStatement(sql);pstmt.setString(1,parentId);rs=pstmt.executeQuery();while(rs.next()){BookTypeVOobj=newBookTypeVO();obj.setTypeId(rs.getInt("typeId"));obj.setTypeName(rs.getString("typeName"));obj.setParentId(rs.getInt("parentId"));list.add(obj);}}BookTypeListServlet.java2025/2/6《Web程序設計》27@WebServlet("/booktype/listtype")publicclassBookTypeListServletextendsHttpServlet{protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Stringpid=request.getParameter("pid");BookTypeDAOdao=newBookTypeDAO();List<BookTypeVO>typeList=dao.listBookType(pid);StringBuilderstr=newStringBuilder("[");for(BookTypeVOt:typeList){if(str.length()>1)str.append(",");str.append("{\"id\":\"").append(t.getTypeId()).append("\",");str.append("\"name\":\"").append(t.getTypeName()).append("\"}");}str.append("]");response.setContentType("text/html;charset=utf-8");PrintWriterout=response.getWriter();out.println(str.toString());......Book_edit.jsp2025/2/6《Web程序設計》28<formname="frmMain"action="/book/save"method="post"><tablewidth="600"border="0"><caption><h2>填寫圖書信息</h2></caption><tr><td>圖書名稱:</td><td><inputtype="text"name="book_name“value="<%=book.getBookName()==null?"":book.getBookName()%>"></td></tr><tr><td>圖書條形碼:</td><td><inputtype="text"name="bar_code“value=“<%=book.g

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論