自定义MVC(一)

1、什么是MVC?

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

Model1 jsp+jdbc

Model2 ->MVC

核心思想:各司其职

2.自定义MVC框架工作原理图

在这里插入图片描述
主控制动态调用子控制器调用完成具体的业务逻辑
(火车、控制台、车轨)
请求、主控制器、子控制器(两两相对应)

3.MVC结构

V

jsp/ios/android

C

servlet/action

M

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

jsp

<%

%>

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

注1:不能跨层调用
注2:只能出现由上而下的调用

4.利用MVC模式实现加减法功能(案例)

前面我们介绍了一下MVC框架,现在我们用一个加减法的例子来更了解MVC模式的概念

在这里插入图片描述

第一步:建实体类(如效果图中,所以实体类为两个字段)

package com.xiaoqing.entity;

public class Cal {
	private int num1;
	private int num2;
	public int getNum1() {
		return num1;
	}
	public void setNum1(int num1) {
		this.num1 = num1;
	}
	public int getNum2() {
		return num2;
	}
	public void setNum2(int num2) {
		this.num2 = num2;
	}
	
	public Cal() {}
	public Cal(int num1, int num2) {
		this.num1 = num1;
		this.num2 = num2;
	}
	
	
}

在这里插入图片描述
第二步:建中央控制器(DispatcherServlet)

package com.xiaoqing.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.xiaoqing.web.AddCalAction;
import com.xiaoqing.web.DelCalAction;
/**
 * 中央控制器
 * 	作用:接受请求,通过请求寻找处理请求的对应的子控制器
 * @author Administrator
 *
 */
public class DispatcherServlet extends HttpServlet {

	private static final long serialVersionUID = 5164557074466792333L;
	private Map<String, Action> actionMap=new HashMap<>();
	
	public void init() {
		actionMap.put("/addCal", new AddCalAction());
		actionMap.put("/delCal", new DelCalAction());
	}
	@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 {
		init();
		String url=req.getRequestURI();
		//   /T243_mvc/addCal.action
	//		/addCal
		url=url.substring(url.lastIndexOf("/"),url.lastIndexOf("."));
		Action action=actionMap.get(url);
		action.execute(req, resp);
	}
	
}

在这里插入图片描述
在这里插入图片描述

第三步:配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>T243_mvc</display-name>
  <servlet>
  	<servlet-name>dispatcherServlet</servlet-name>
  	<servlet-class>com.xiaoqing.framework.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>dispatcherServlet</servlet-name>
  	<url-pattern>*.action</url-pattern>
  </servlet-mapping>
</web-app>

在这里插入图片描述
第四步:建立子控制器接口(Action,真正能够处理java计算的子控制器)

package com.xiaoqing.framework;


import java.io.IOException;

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

/**
 * 子控制器(相当于火车轨)
 * 	作用:用来处理浏览器发送过来的请求
 * @author Administrator
 *
 */
public interface Action {

	 String execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
	 
	 
}

在这里插入图片描述

第五步:建立相当于servlet处理业务逻辑类(实现action接口)

package com.xiaoqing.web;

import java.io.IOException;

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

import com.xiaoqing.entity.Cal;
import com.xiaoqing.framework.Action;

public class AddCalAction implements Action {

	@Override
	public String execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String num1=req.getParameter("num1");
		String num2=req.getParameter("num2");
		Cal cal=new Cal(Integer.valueOf(num1), Integer.valueOf(num2));
		req.setAttribute("res", cal.getNum1()+cal.getNum2());
		req.getRequestDispatcher("res.jsp").forward(req, resp);
		return null;
	}

}

在这里插入图片描述
这是加法的逻辑代码,减法的逻辑代码如下

package com.xiaoqing.web;

import java.io.IOException;

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

import com.xiaoqing.entity.Cal;
import com.xiaoqing.framework.Action;

public class DelCalAction implements Action {

	@Override
	public String execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String num1=req.getParameter("num1");
		String num2=req.getParameter("num2");
		Cal cal=new Cal(Integer.valueOf(num1), Integer.valueOf(num2));
		req.setAttribute("res", cal.getNum1()-cal.getNum2());
		req.getRequestDispatcher("res.jsp").forward(req, resp);
		return null;
	}

}

在这里插入图片描述
第六步:编写界面(cal.jsp)

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script type="text/javascript">
	function doSub(num){
		if(num==1){
			calForm.action="${pageContext.request.contextPath }/addCal.action";
		}else if(num==2){
			calForm.action="${pageContext.request.contextPath }/delCal.action";
		}
		calForm.submit();
	}
</script>
</head>
<body>
	<form name="calForm" action=""  method="post">
		num1:<input type="text" name="num1"><br>
		num2:<input type="text" name="num2"><br>
		<button onclick="doSub(1)">+</button>
		<button onclick="doSub(2)">-</button>
	</form>
</body>
</html>

在这里插入图片描述

第七步:建立查看结果页面(res.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
结果:${res }
</body>
</html>

在这里插入图片描述

下面我们来操作一下看结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

今天的内容就先写在这
后面会发布自定义MVC完整版
链接: 自定义MVC完整版.
感谢各位朋友们的支持
感谢各位观看!
希望能够帮助你能够理解MVC的原理!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值