MVC模式:MVC模式(Model-View-Controller)是軟件工程中的一種軟件架構模式,把軟件系統分爲三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。html
(控制器Controller)- 負責轉發請求,對請求進行處理。java
(視圖View) - 界面設計人員進行圖形界面設計。程序員
(模型Model) - 程序員編寫程序應有的功能(實現算法等等)、數據庫專家進行數據管理和數據 庫設計(能夠實現具體的功能)。web
Java
Java 平臺企業版 (J2EE)算法
和其餘的各類框架不同,J2EE爲模型對象(Model Objects)定義了一個規範。數據庫
視圖(View):在J2EE應用程序中,視圖(View)可能由Java Server Page(JSP)承擔。生成視圖的代碼則多是一個servlet的一部分,特別是在客戶端服務端交互的時候。session
控制器(Controller):J2EE應用中,控制器多是一個servlet,如今通常用Struts2/Spring Framework實現。架構
模型(Model):模型則是由一個實體Bean來實現。app
(以上內容摘錄自維基百科對MVC模式概念的部分解析)框架
MVC框架模式在java開發過程當中也比較經常使用,下面經過一個簡易計算器的實例去理解一下MVC這個方便而強大的東東。每一個人的思路步驟可能會略有不一樣,我這裏只分享我本身的思路「異曲同工」吧,呵呵。
這個簡易計算器進行對兩個數字的運算,選擇(+、-、*、/)結算符,最後計算出結果。大概的界面設計以下所示:
大概可分爲下面幾個步驟:
1.Model由實體Bean來實現:編寫一個bean,用來封裝計算器的數字,結果及操做運算符
package com.lixiyu.bean; public class CalculatorBean { double numberOne,numberTwo,result;//數字一、數字二、結果 String operator="+";//操做 //setxxx和getxxx public void setNumberOne(double n) { numberOne=n; } public double getNumberOne() { return numberOne; } public void setNumberTwo(double n) { numberTwo=n; } public double getNumberTwo() { return numberTwo; } public void setOperator(String s) { operator=s.trim();; } public String getOperator() { return operator; } public void setResult(double r) { result=r; } public double getResult() { return result; } }
2.編寫控制器CalculatorServlet,用於轉發請求,對請求進行處理。下面給出Servlet中doPost()的關鍵代碼:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { CalculatorBean dataBean = null; HttpSession session = request.getSession(true); try { dataBean = (CalculatorBean) session.getAttribute("ok"); if (dataBean == null) { dataBean = new CalculatorBean(); // 建立Javabean對象 session.setAttribute("ok", dataBean);// 將dataBean存儲到session對象中 } } catch (Exception exp) { dataBean = new CalculatorBean(); // 建立Javabean對象 session.setAttribute("ok", dataBean);// 將dataBean存儲到session對象中 } double numberOne = Double .parseDouble(request.getParameter("numberOne")); double numberTwo = Double .parseDouble(request.getParameter("numberTwo")); String operator = request.getParameter("operator"); double result = 0; if (operator.equals("+")) { result = numberOne + numberTwo; } else if (operator.equals("-")) { result = numberOne - numberTwo; } else if (operator.equals("*")) { result = numberOne * numberTwo; } else if (operator.equals("/")) { result = numberOne / numberTwo; } dataBean.setNumberOne(numberOne); // 將數據存儲在dataBean中 dataBean.setNumberTwo(numberTwo); dataBean.setOperator(operator); dataBean.setResult(result); RequestDispatcher dispatcher = request .getRequestDispatcher("showResult.jsp"); dispatcher.forward(request, response);// 請求showResult.jsp顯示dataBean中的數據 }
在web.xml中註冊servlet及實現映射:
<servlet> <servlet-name>CalculatorServlet</servlet-name> <servlet-class>com.lixiyu.servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CalculatorServlet</servlet-name> <url-pattern>/calculator</url-pattern> </servlet-mapping>
3.編寫視圖(view),主要經過輸入操做和顯示結果的兩個JSP來實現
inputNumber.jsp(主要代碼):
<form id="form1" action="calculator" method="post" name="form1"> <table> <tr><td> <b>輸入任意兩個數:</b></td> <td> <Input type=text name="numberOne" value=0 size=6></td> <td> <Input type=text name="numberTwo" value=0 size=6></td> </tr> <tr><td><b>選擇算術運算符號:</b></td> <td> <Select name="operator"> <Option value="+">+(加) <Option value="-">-(減) <Option value="*">*(乘) <Option value="/">/(除) </Select> </td> <td> <INPUT TYPE="submit" value="提交選擇" name="submit"></td> </tr> </table> </form>
showResult.jsp的關鍵代碼,用到<jsp:usebean>:
<jsp:useBean id="ok" type="com.lixiyu.bean.CalculatorBean" scope="session"/> 運算結果: <jsp:getProperty name="ok" property="numberOne"/> <jsp:getProperty name="ok" property="operator"/> <jsp:getProperty name="ok" property="numberTwo"/> = <jsp:getProperty name="ok" property="result"/>
運算結果: