自定义MVC

一、什么是MVC

二、自定义MVC工作原理

三、自定义mvc实现
1.创建web工程
2.中央处理器
3.Action接口定义
4.实现子控制器
一、什么是MVC
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。 它是一种软件设计典范。

用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

提高了程序的可维护性、可移植性、可扩展性与可重用性,降低了程序的开发难度。它主要分模型、视图、控制器三层。

模型(model): 它是应用程序的主体部分,主要包括业务逻辑模块(web项目中的dao类)和数据模块(pojo类)。pojo一般可以叫做实体域模型,dao和service称为过程域模型。
视图(view): 用户与之交互的界面、在web中视图一般由jsp,html组成,其他的还包括android,ios等等。
控制器(controller): 接收来自界面的请求 并交给模型进行处理 在这个过程中控制器不做任何处理只是起到了一个连接的做用。
不足的地方:

增加系统结构和实现的复杂性。对于简单的界面,严格遵守MVC,需要使模型、视图与控制器分离,增加系统复杂性
视图和控制器之间的关系太过紧密了
二、自定义MVC工作原理图
  

核心组件说明:

中央控制器(ActionServlet): 复杂接收所有的请求,并分别给控制器具体处理。
自控制器(Action):负责处理中央处理器分配的请求
视图(view): jsp页面,负责显示
模型(Model): 负责业务处理逻辑
四、自定义mvc实现
1 创建web工程
创建一个web工程,需要加入必要的依赖。

2 中央处理器
通过servlet来实现一个中央控制器,负责所有请求的接收。(后续中央控制器在再将请求转发给各个子控制器,此处可以先把请求接进来,转发功能后面再加)

代码如下(示例):
 

 
import java.util.HashMap;
import java.util.Map;
 
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.zking.mymvc.action.BookAction;
import com.zking.mymvc.action.StudentAction;
/**
 * 中央控制器,负责接收所有的请求并分别给控制器具体处理
 * @author Administrator
 */
@WebServlet("*.action")
public class ActionDispatchServlet extends HttpServlet{
    //用于保存path与action子控制器的映射
        public static Map<String, Action> actionMap = new HashMap<>();
        static {
            actionMap.put("/bookAction", new BookAction());
            actionMap.put("/studentAction", new StudentAction());
            
        }    
        
        
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        doPost(request, response);
    }
    
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
System.out.println("dopost ..... ");
        
        //请求分发给指定的action
        String path = getPath(request);
        
        Action action = actionMap.get(path);
        
        action.exeute(request, response);
    }
    
    private String getPath(HttpServletRequest request) {
        return "/bookAction";
    }
    
 
}
3 Action接口定义
Action接口定义了每个子控制器需要遵循的行为,使得所有的子控制器都有一个同一的抽象类型,所以我们可以在中央控制器中使用Action接口类型来引用所有的子控制器。这样就为用户扩展自定义的子控制器提供了条件。

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 * 每个子控制器必须实现该接口,负责处理中央处理器分配的请求
 * @author Administrator
 */
public interface Action {
    /**
     * 处理请求
     * @param request  请求
     * @param response 响应
     * @return String 返回转发或重定向的jsp页面名称
     */
    String exeute(HttpServletRequest request, HttpServletResponse response);
}
4 实现子控制器
为方便调试,实现两个子控制器,

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.zking.mymvc.framework.Action;
 
public class BookAction implements Action{
    @Override
    public String exeute(HttpServletRequest request, HttpServletResponse response) {
        
        return null;
    }
}
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.zking.mymvc.framework.Action;
 
public class StudentAction implements Action{
    @Override
    public String exeute(HttpServletRequest request, HttpServletResponse response) {
        
        return null;
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值