栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

自定义MVC原理与框架

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

自定义MVC原理与框架

目录

一、自定义MVC

二、如何优化增删改查

三、自定义MVC框架


一、自定义MVC

1.自定义MVC的概念:

MVC全称名是Model(模型层) View(视图层) control(控制层),这三个层级分工明确,各司其职,使MVC具有高内聚、低耦合的特点

2.自定义MVC的作用:

我们采用MVC模式可以将这些重复的代码变为一个通用的代码,可以被多个实体使用。在一定程度上MVC的三层架构模式节省了很多开发的时间,以及减少了许多重复的代码

二、如何优化增删改查

1、我们先来看看最初版的增删改查

写四个Servlet分别对应增删改查,再从JSP界面调用这四个方法

Servlet

 

JSP

 

从这我们可以发现了问题1:对于单个实体类BOOK我们就要建立四个Servlet了,同时面对不同的需求我们的操作也就越多需要建的类也就越多,造成了一个类膨胀的问题

2、优化类膨胀问题

这里做一个假设,我们在一个Servlet里写增删改查再进行判断前台传过来的请求,从而调用相应的方法。

如图所示: Servlet

 JSP:

 

问题2:这个方法解决了类过多的问题但是如果我们新增方法,又要不断在红圈的地方增加判断方法,这些判断方法也是一个重复的代码,所以我们还要进一步优化

3、反射版增删改查

我们使用之前所分享过的反射方法,解决判断方法的重复代码
//为了区分当前请求的目的 ,增删改查的目的 就从前台将调用的方法传达到后台
		String methodNmae = request.getParameter("methodName");
		//methodName可以是add也可以是del或者其他
		//前台传递什么方法 就调用当前类的对应方法
		try {
			Method m = this.getClass()//BookServlet.class
			.getDeclaredMethod(methodNmae, HttpServletRequest.class,HttpServletResponse.class);
		m.setAccessible(true);
		//调用当前类实例的methodName方法
		m.invoke(this, request,response);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

问题3:但是如果我们需要再建一个实体或多个实体时,同样会发现反射方法以及doget和dopost方法也是重复的

三、自定义MVC框架

为了更好地解决第三个问题来给大家看看MVC工作原理图

 如上图所示:自定义MVC工作原理图,图中actionservlet是中央控制器,action是子控制器,excute为子控制器中的方法。

1、我们先来定义一个中央控制器

我们将浏览器比喻为点单的顾客,那么中央控制器就是服务员,帮助浏览器找到对应的处理人
package com.zjy.framework;

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

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

import com.zjy.web.BookAction;


@WebServlet("
public interface Action {

	 void execute(HttpServletRequest request, HttpServletResponse response);
}

ActionSupport类:是Action类的实现类,里面只要反射出要用的哪一个对象,同时反射出要用到什么方法(methodname)
package com.zjy.framework;

import java.lang.reflect.Method;

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

public class ActionSupport implements Action{

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) {
		//为了区分当前请求的目的 ,增删改查的目的 就从前台将调用的方法传达到后台
		String methodNmae = request.getParameter("methodName");
		//methodName可以是add也可以是del或者其他
		//前台传递什么方法 就调用当前类的对应方法
		try {
			Method m = this.getClass()//BookServlet.class
			.getDeclaredMethod(methodNmae, HttpServletRequest.class,HttpServletResponse.class);
		m.setAccessible(true);
		//调用当前类实例的methodName方法
		m.invoke(this, request,response);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
	}

}

  3、BookAction类:是子控制器下的最底层,这个类只专注做一件事,就是处理浏览器发送过来的请求,可以节约大量的时间。
package com.zjy.web;

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

import com.zjy.framework.Action;
import com.zjy.framework.ActionSupport;

public class BookAction extends ActionSupport{


	private void load(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("在同一个Servlet中调用load方法");
	}


	private void list(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("在同一个Servlet中调用list方法");
	}


	private void edit(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("在同一个Servlet中调用edit方法");
		
	}


	private void del(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("在同一个Servlet中调用del方法");
		
	}


	private void add(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("在同一个Servlet中调用add方法");
		
	}
}

好啦今天就先分享到这里啦,明天再完善哦

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991933.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号