自定义mvc(1)

一、什么是MVC?

1、MVC全名

MVC全名:Model View Controller,其中Model模型层、View视图层、Controller控制层.
它是一种软件设计典范,用于业务逻辑处理、数据、界面显示分离.

2、常用模式

model1:jsp+jdbc
model2:mvc
主要特点:高内聚 低耦合
核心思想:各司其职

3、三层架构和MVC的区别

三层架构是一个经典的分层思想,将开发模式分为三层,每个人专注自己擅长模块即可。
MVC就不一样了,它是一种设计模式,其目的是让html和业务逻辑分开。

二、MVC结构

V(视图层)——> JSP/HTML/freemarker
C(控制层)——> Servlet/Action/Controller
M(模型层)——> entity、dao
entity:实体域模型(名词)
dao:过程域模型(动词) 经常访问数据库,所以是动词。
注:
1)不能跨层调用。
2)只能由上往下进行调用;View -> Controller -> Model。

三、自定义MVC工作原理图了解

请求路径:.action 调度 截取(请求路径名) 处理具体业务逻辑
JSP -----------> Servlet(中央控制器)--------------------->Action(子控制器)—>Model(Dao、DB)
在这里插入图片描述

四、MVC实现

1、两数加减乘除

我们完成一个(两数加减乘除的一个操作)案例:

 1)创建抽象类Action,定义抽象方法execute(处理具体逻辑)。
 2)创建HelloAction并继承抽象类Action,重写execute方法。
 3)在ActionServlet中定义私有Map<String,Action>(根据不同请求路径名调用不同逻辑处理Action类)。
 4)在ActionServlet中的init方法初始化Map集合。
map.put('请求路径','逻辑处理Action类')
 5)在ActionServlet中的doPost方法中处理请求。
 6)创建AddAction继承抽象类Action,重写execute方式,处理逻辑后,返回结果。
7)在ActionServlet中的init方法中添加
map.put('/AddAction',new AddAction());
8)完成界面代码。

在这之前,我们来认识一下要用到的jar包:
在这里插入图片描述
我是比较提倡在熟悉代码流程的情况下,先把jar包弄好的。

我们从第一 步开始: 1)创建抽象类Action,定义抽象方法execute(处理具体逻辑)。
打开eclipse开始敲代码:

//zouyan
public abstract class Action {
	//创建抽象类Action,定义抽象方法execute(处理具体逻辑)
	protected abstract String execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
}

然后看到第二步: 2)创建HelloAction并继承抽象类Action重写execute方法

//zouyan
public class HelloAction extends Action{
	//创建HelloAction并继承抽象类Action,重写execute方法
	@Override
	protected String execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("123");
		return null;
	}
}

接下来看到第三、四、五步:
3)在ActionServlet中定义私有Map<String,Action>(根据不同请求路径名调用不同逻辑处理Action类)
4)在ActionServlet中的init方法初始化Map集合
map.put(‘请求路径’,‘逻辑处理Action类’)
5)在ActionServlet中的doPost方法中处理请求。

//zouyan
public class ActionServlet extends HttpServlet{
	//在ActionServlet中定义私有Map<String,Action>(根据不同请求路径名调用不同逻辑处理Action类)
	private Map<String, Action> map;
	
	@Override
	public void init() throws ServletException {
		System.out.println("123");
		//在ActionServlet中的init方法初始化Map集合
		//map.put('请求路径','逻辑处理Action类')
		map=new HashMap<String, Action>();
		map.put("/HelloAction", new HelloAction());
	}

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

	//在ActionServlet中的doPost方法中处理请求
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//获取请求路径
		String requestURI = req.getRequestURI();
		int start = requestURI.lastIndexOf("/");
		int end = requestURI.lastIndexOf(".action");
		//截取请求路径
		String actionName = requestURI.substring(start, end);
		//通过截取路径中的action找到对应的自控制器
		Action action = map.get(actionName);
		//执行execute方法
		action.execute(req, resp);
	}
}

然后看到AddAction这边的代码: 6)创建AddAction继承抽象类Action,重写execute方式,处理逻辑后,返回结果。

//zouyan
public class AddAction extends Action{

	@Override
	protected String execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		int num3=0;
		String num1 = req.getParameter("num1");
		String num2 = req.getParameter("num2");
		String calculate = req.getParameter("calculate");

		switch (calculate) {
		case "+":
			num3 = Integer.parseInt(num1) + Integer.parseInt(num2);
			break;
		case "*":
			num3 = Integer.parseInt(num1) * Integer.parseInt(num2);
			break;
		case "-":
			num3 = Integer.parseInt(num1) - Integer.parseInt(num2);
			break;
		case "/":
			num3 = Integer.parseInt(num1) / Integer.parseInt(num2);
			break;
		default:num3 = Integer.parseInt(num1) + Integer.parseInt(num2);
			break;
		}
		System.out.println("num"+num3);
		req.setAttribute("num3", num3);
		req.getRequestDispatcher("result.jsp").forward(req, resp);
		return null;
	}
}

下一步就是在ActionServlet添加一段代码:7)在ActionServlet中的init方法中添加
map.put(’/AddAction’,new AddAction());
在这里插入图片描述
同时也不要忘了xml的配置:

//zouyan 
//添加进去即可
<servlet>
  	<servlet-name>ActionServlet</servlet-name>
  	<servlet-class>com.framework.ActionServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ActionServlet</servlet-name>
  	<url-pattern>/AddAction.action</url-pattern>
  </servlet-mapping>

最后就是界面上的各个代码:
index.jsp——add.jsp——result.jsp
在这里插入图片描述
界面显示效果如下:
在这里插入图片描述
计算结果确认无误之后,案例就成功完成啦。

五、总结

所有目录如下:
在这里插入图片描述
然后自定义mvc的加减乘除就可以实现了,此后可以更深入去了解这方面的学习。继续加油吧。
我是南橙,一个逐渐秃头的橙子Orange。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值