理解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,用来封装计算器的数字,结果及操作运算符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
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()的关键代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
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及实现映射:
1
2
3
4
5
6
7
8
|
< 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(主要代码):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
< 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>:
1
2
3
4
5
6
|
<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" />
|
运算结果:
本文转自lixiyu 51CTO博客,原文链接:http://blog.51cto.com/lixiyu/1355002,如需转载请自行联系原作者
理解MVC—从实例出发:基于MVC模式的简易算术计算器相关推荐
- 基于51单片机的简易电子计算器——有温度显示和万年历等额外功能
基于51单片机的简易电子计算器--有温度显示和万年历等额外功能 设计实际所实现的功能 模式一可显示日期.时钟.温度,模式二可进行计算器的计算,且显示日期温度模式和计算器模式可随意切换,模式三可以滚动显 ...
- 【006】基于51单片机的简易电子计算器Proteus仿真设计
一.压缩包资料内容(私信获取) (1).基于51单片机的简易电子计算器proteus仿真设计一份: (2).基于51单片机的简易电子计算器proteus仿真设计keli源代码一份: (3).基于51单 ...
- 基于51单片机的简易数字计算器Proteus仿真(源码+仿真+全套资料)
资料编号:115 全套资料齐全,功能说明: 该计算器系统51 系列的单片机进行的数字计算器系统设计,可以完成计算器的键盘输入, 进行加. 减.乘.除的简单四则运算,并在 LCD屏幕上相应的显示结果. ...
- 从实例出发,让你一文实现Floyd算法
目录 看完必会的Folyd算法! 前言 Floyd实现原理 从实例出发理解 概念理解一:距离矩阵 概念理解二:路径矩阵 举个例子 代码实现 看完必会的Folyd算法! 前言 最近在学习算法的过程中,接 ...
- java三层 开源_java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源...
[实例简介] java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源 [实例截图] [核心代码] java山寨qq聊天工具(基于mvc三层架构,附mvc架构模式p ...
- servlet+javabean+jdbc+mysql基于MVC模式的课件管理系统,有三个表的增删改查和课件搜索、课件上传、课件下载功能, 具体功能请看界面上的导航条
源码支持在idea.eclipse.myeclipse运行,数据库采用MySQL数据库,项目采用mvc设计模式开发,页面采用jsp+html+css+js完成. servlet+javabean+jd ...
- 基于MVC模式下的二手车拍卖平台设计
课程名称:<软件体系结构与设计模式> 实验项目名称:基于MVC模式下的二手车拍卖平台设计 实验内容 按下列要求编写程序并上机调试运行: 拍卖系统要又三个显示界面,分别是车体图片,文字描述和 ...
- OAF框架的基本思想--基于MVC模式
OAF框架是一个基于MVC架构的应用框架,学习OAF必须理解MVC框架,因为实际上OAF开发也是对M-V-C这3层结构进行开发. OAF是一个应用Model-View-Controller(MVC)架 ...
- python编程(基于订阅模式的mvc实现)
[声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 基于mvc方式开发的客户端软件很多,但是用订阅方式实现mvc,我今天还是第一次看到.今天看到一篇英 ...
最新文章
- java int数列转字符串,鍥剧墖杞瓧绗︿覆
- XScuGic_Connect分析
- python交互式数据可视化_python数据可视化工具
- 设计模式--1(设计模式基础,设计模式基本原则,设计模式分类)
- 正则表达式与扩展正则表达式区别
- HDU 5985 Lucky Coins 数学
- python3 ftp服务器_python3实现ftp服务功能(服务端 For Linux)
- deepin终端启动自安装程序
- python之OrderedDict
- Python中的*self,*self._args, **kwargs
- 牛腩新闻发布系统—发布错误总结
- kali linux捉肉鸡教程,使用Kali中的Metasploit生成木马控制Windows系统
- linkedin领英账号限制被封了怎么办?
- 安卓手机卡顿基础优化教程
- C++战斗游戏-----------圣光战神の起源之战 V8.13.0
- 【NLP】非监督文本匹配算法——BM25
- 公路自行车入门级推荐java_想玩公路自行车,有没有入门推荐?
- python元组的定义方式_python基础之元组(Tuple)、字典(Dictionary)详解
- SLF4J--日志门面担当
- 计算机基本基础知识实训总结,计算机基本技能实训总结报告[].doc