您的位置:首页 > 其它

理解MVC―从实例出发:基于MVC模式的简易算术计算器

2014-01-27 11:00 627 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: