[J2EE-10]自定义MVC-01

一.什么是MVC?

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

常用模式:
model1:jsp+jdbc
model2:mvc

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

二.MVC结构?

V(视图层)

    C(控制层) 
 
    M(模型层)

注:1)不能跨层调用;
    2)只能由上往下进行调用;View -> Controller -> Model

三.自定义MVC工作原理图

              *.action           调度                   截取*(请求路径名) 处理具体业务逻辑
   JSP -----------> Servlet(中央控制器)--------------------->Action(子控制器)--->Model(Dao、DB)


     

 4.MVC实现

        案例:

   1)创建抽象类Action,定义抽象方法execute(处理具体逻辑)

package com.zking.framework;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 子控制器:做具体的核心业务逻辑
 * @author 李婷
 *
 */
public  abstract class Action{
	
	public abstract void execute(HttpServletRequest req,HttpServletResponse res) 
			throws ServletException,IOException ;
	
	
	
	
}


     2)创建HelloAction并继承抽象类Action,重写execute方法

package com.zking.action;

import java.io.IOException;

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

import com.zking.framework.Action;
/**
 * 自定义子控制器 :执行业务逻辑的核心。
 * @author 李婷
 *
 */
public class HelloAction extends Action {

	@Override
	public void execute(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("Hello");
	}

	
}


     3)在ActionServlet中定义私有Map<String,Action>(根据不同请求路径名调用不同逻辑处理Action类)

 4)在ActionServlet中的init方法初始化Map集合
    map.put('请求路径','逻辑处理Action类')

5)在ActionServlet中的doPost方法中处理请求

package com.zking.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.zking.action.HelloAction;
/**
 * ActionServlet:中央控制器 用于接受请求,发送请求 不做“事”
 * @author 李婷
 *
 */
public class ActionServlet extends HttpServlet{
//该集合用于定义请求路径与子控制器类Action之间的绑定关系
//	例如:/helloAction -> HellowAction extends Action
	
	private Map<String,Action> actions=new HashMap<>();
	
	@Override
		public void init() throws ServletException {
			// TODO Auto-generated method stub
			super.init();
			actions.put("/helloAction",new HelloAction());
		}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
			this.doPost(req, resp);
	}

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

//	获取请求路径
		 String path = req.getServletPath();
//		获取路径名
		int start=path.indexOf("/");
		int end=path.lastIndexOf(".");
		String substring = path.substring(start, end);
		System.out.println(substring);
		
//		根据请求路径名获取对应的子控制器类Action去处理
		Action action = actions.get(substring);
		
		action.execute(req, resp);
		
	
	
	
	}

}


   


     


 


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值