MVC模式之mvc的简单使用(一)

1.什么是MVC ?

MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间。

MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器。

2.MVC使用的目的

在于将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如Windows系统资源管理器文件夹内容的显示方式,下面两张图中左边为详细信息显示方式,右边为中等图标显示方式,文件的内容并没有改变,改变的是显示的方式。不管用户使用何种类型的显示方式,文件的内容并没有改变,达到M和V分离的目的。

3.如何正确使用MVC

3.1首先我们要知道MVC的工作原理,下面是图解
在这里插入图片描述
这要注意的是:不能跨层调用,只能由上一层调用下一层。

3.2:接下来我们就开始来试一下这个MVC模式。就拿加减乘除来作为我们今天的学习目标吧!
我们就从展示界面开始。
在这里我要提一下,我们的action本来是有值的,后面的值会覆盖前面的值。所以不用担心
在这里插入图片描述表单提交到我们的中央控制层,web的配置我就没有展示了。

package com.zking.framework;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.zking.web.AddCalAction;
import com.zking.web.DelCalAction;
import com.zking.web.chenCalAction;
import com.zking.web.chuCalAction;

/**
 * 主控制器
 * 
 * @author huguiyun
 *
 */
public class DispatcherSelelet extends HttpServlet {

	private static final long serialVersionUID = 4610137993952463128L;
	private Map<String, Action> actionMap = new HashMap<>();//定义一个集合,用来存取我们的模型

	@Override
	public void init() throws ServletException {//我们定义的init()方法,给Map集合赋值
		actionMap.put("/addcla", new AddCalAction());// 加    这里的键不能随便定义,需要与我们表单提交的地址保持一致
		actionMap.put("/delCla", new DelCalAction());// 减
		actionMap.put("/chenCla", new chenCalAction());// 乘
		actionMap.put("/chuCla", new chuCalAction());// 除
	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		String url = req.getRequestURI();//找到文件的名字
		url = url.substring(url.lastIndexOf("/"), url.lastIndexOf("."));//分割
		System.out.println(url);//这里是我的测试
		Action action = actionMap.get(url);//取值
		System.out.println(action);//这里是我的测试
		action.execute(req, resp);//调用我们写的子控制器的方法,同时吧我们的数据传过去
	}
}

这里需要 注意 的是:
这里的键不能随便定义,需要与我们表单提交的地址保持一致。不然我们就会报空指针异常。

在这里要提到的是,我们的子控制器是一个接口

public interface Action {
	
	//这个是我们刚刚调用的方法
	void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;

}

在我们的模型层里需要实现上面我们写的接口

/**
 * 增法
 * 
 * @author huguiyun
 *
 */
public class AddCalAction implements Action {

	@Override
	public void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		String num1 = req.getParameter("num1");//接收表单提交过来的值
		String num2 = req.getParameter("num2");
		req.setAttribute("res", Integer.valueOf(num1) + Integer.valueOf(num2));//算法
		req.getRequestDispatcher("calRes.jsp").forward(req, resp);
	}

}

加减乘除,这里只需要改变+,-,*,/ 就能实现
下面我们就来展示我们的结果:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

除,这里的除是直接取整

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值