自定义MVC框架简单入门、开发

自定义MVC框架简单入门、开发

MVC简介

什么是MVC ?

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,它是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码.

Model1 jsp+jdbc

Model2 ->MVC

MVC核心思想:各司其职

MVC结构

M
实体域模型(名词)
过程域模型(动词)

V
jsp/ios/android

C
servlet/action

web做浏览器请求分发
service调用dao处理项目业务的
dao操作数据库

注意:

  • 不能跨层调用
  • 只能出现由上而下的调用

MVC开发

现今开发
实体类、dao、web
	AddBookServlet
	DelBookServlet
	。。。。。。
	
web.xml
	AddBookServlet
	DelBookServlet
	。。。。。。
	
	
....>
BookServlet
web.xml
	BookServlet
	String methodName = req.getParamater("methodName");
	String methodName = req.getParamater("bname");
	String methodName = req.getParamater("pice");
	String methodName = req.getParamater("type");
	........
	Book b = new Book();
	b.set()
	......
	
	if("add".equals(methodName)){
		add(req,resp);
	}
	
	重定向、转发
	req.getResquestDispather("xxx.jsp").forward(req,resp);
	resp.sendRedirect();
	
jsp--->methodName=add/del/....

-->

前一种方式有一种方式有什么不好呢?

  • 1、BookServlet中的if语句判断非常多

  • 2、省去jsp传递到后台封装成对象的过程

  • 3、省去结果集的处理

    控制器:

中央控制器 子控制器


自定义MVC工作原理

自定义MVC工作原理图:

注意:图中的ActionServlet也可是DispatcherServlet
在这里插入图片描述
控制器:

主控制动态调用子控制器,完成具体的业务逻辑

主控制器:查看是否有对应的子控制器来处理用户请求,如果就调用子控制器来处理请求,没有就报错,就处理不了请求

子控制器:就是处理用户请求用的


简单计算器案例

首先定义主控制器,代码如下:

package com.dj.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.dj.web.AddCalAction;
import com.dj.web.DelCalAction;
import com.dj.web.DivideCalAction;
import com.dj.web.MultiplyCalAction;

/**
 * 主控制器
 * @author 86182
 */
public class DispatcherServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	private Map<String, Action> actionMap = new HashMap<>();//键值对

	public void init() {
		actionMap.put("/addCal", new AddCalAction());//加
		actionMap.put("/delCal", new DelCalAction());//减
		actionMap.put("/multiplyCal", new MultiplyCalAction());//乘
		actionMap.put("/divideCal", new DivideCalAction());//除
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		init();
		String url = req.getRequestURI();//路径
		url = url.substring(url.lastIndexOf("/"),url.lastIndexOf("."));
		
		Action action = actionMap.get(url);
		action.execut(req, resp);	
	}
}

其次定义子控制器,

package com.dj.framework;

import java.io.IOException;

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

/**
 * 子控制器
 * 专门用来处理业务逻辑
 * @author 86182
 */
public interface Action {
	
	void execut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
	
}

然后,完成业务逻辑处理界面


加:

public class AddCalAction implements Action{
	@Override
	public void execut(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);
	}
}


减:

public class DelCalAction implements Action{
	@Override
	public void execut(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);
	}
}


乘:

public class MultiplyCalAction implements Action{
	@Override
	public void execut(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);
	}
}


除:

public class DivideCalAction implements Action{
	@Override
	public void execut(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);
	}
}

当然,少不了要配置web.xml
在这里插入图片描述
除此之外,在jsp界面中还有一个很重要的函数。
在这里插入图片描述
页面展示效果如下:
在这里插入图片描述
依次点击 “+”、“-”、“*”、“/”,依次得到以下结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
诸位可以自己尝试做简单的计算器,还是挺有意思的呢 (●’◡’●) (/≧▽≦)/

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值