理解MVC—从实例出发:基于MVC模式的简易算术计算器
MVC模式:MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
(控制器Controller)- 负责转发请求,对请求进行处理。
(视图View) - 界面设计人员进行图形界面设计。
(模型Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据 库设计(可以实现具体的功能)。
Java
Java 平台企业版 (J2EE)
和其他的各种框架不一样,J2EE为模型对象(Model Objects)定义了一个规范。
视图(View):在J2EE应用程序中,视图(View)可能由Java Server Page(JSP)承担。生成视图的代码则可能是一个servlet的一部分,特别是在客户端服务端交互的时候。
控制器(Controller):J2EE应用中,控制器可能是一个servlet,现在一般用Struts2/Spring Framework实现。
模型(Model):模型则是由一个实体Bean来实现。
(以上内容摘录自维基百科对MVC模式概念的部分解析)
MVC框架模式在java开发过程中也比较常用,下面通过一个简易计算器的实例去理解一下MVC这个方便而强大的东东。每个人的思路步骤可能会略有不同,我这里只分享我自己的思路“殊途同归”吧,呵呵。
这个简易计算器进行对两个数字的运算,选择(+、-、*、/)结算符,最后计算出结果。大概的界面设计如下所示:
大概可分为下面几个步骤:
1.Model由实体Bean来实现:编写一个bean,用来封装计算器的数字,结果及操作运算符
package com.lixiyu.bean; public class CalculatorBean { double numberOne,numberTwo,result;//数字1、数字2、结果 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"/>
运算结果:
本文出自 “好记性,不如烂笔头” 博客,请务必保留此出处http://lixiyu.blog.51cto.com/4136883/1355002
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。