自定义mvc标签

目录

思维导图:

1、什么是mvc

2、三层架构和MVC的区别?

3、MVC结构?

4.自定义MVC工作原理图

5.MVC实现


思维导图:

 

1、什么是mvc

全名:Model View Controller,模型视图控制器,是一种软件设计的典范。其中Model(模型层)、View(视图层)、Controller(控制层)它是一种软件设计典范,用于业务逻辑处理、数据、界面显示分离。用业务逻辑、数据和界面显示分离的方法来组织代码,在需要程序进行改动时不需要重新修改代码,达到减少代码的作用。

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

我的理解:不使用mvc我们会创建很多个servlet分别来实现增加,删除...操作,各司其职。mvc就

像是一个通用的servlet,其中组成有一个中央控制器,根据我们的请求不同来实现不同的业务逻

辑。前端的请求进入mvc进过一系列处理(取数据并不和中央控制器产生联系)之后将结果反馈给

界面。很明显的诠释了业务逻辑,数据和显示界面分离这句话。


2、三层架构和MVC的区别?

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

3、MVC结构?

V(视图层)

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

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

 

4.自定义MVC工作原理图

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


5.MVC实现

  mvc组成部分
①XML模型ConfigModelFactory:面对对象的思想操作我们的XML文件,修改XML来实现不同的逻辑。

②中央控制器DispathServlet:处理所有请求,分配给具体的子控制器实现业务。

③子控制器Action(接口):对子控制器的一种约束。

④增强子控制器ActionSupport:所有具体子控制器的父类,实现Action接口。

⑤模型驱动ModelDriver(泛型接口):具体的子控制器实现后实现返回子控制指定类型的对象,在中央控制器

中使用BeanUtils类对具体的子控制器类中定义的对象通过请求对象req进行初始化。

   案例1:
     1)创建抽象类Action,定义抽象方法execute(处理具体逻辑)
     2)创建HelloAction并继承抽象类Action,重写execute方法
     3)在ActionServlet中定义私有Map<String,Action>(根据不同请求路径名调用不同逻辑处理Action类)
     4)在ActionServlet中的init方法初始化Map集合
    map.put('请求路径','逻辑处理Action类')
     5)在ActionServlet中的doPost方法中处理请求

ActionServlet:

package com.zking.mvc.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.mvc.action.AddAction;
import com.zking.mvc.action.HelloAction;



/**
 * 中央控制器(接收请求、分发请求:注意:不做具体核心业务逻辑处理)
 * Servlet implementation class ActionServlet
 */

public class ActionServlet extends HttpServlet {
	//问题:
	//1)使用Map<String,Action>方式需要一个个手动配置请求路径的对应关系?
	//2)子控制器类Action只能完成一个核心业务逻辑处理?
	//保存请求路径名对应的子控制器类Action
	//Key=请求路径名
	//value=具体的子控制器类Action
	private Map<String,Action> actions=new HashMap();
	@Override
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		super.init();
		//初始化action
		actions.put("/helloAction", new HelloAction());
		actions.put("/addAction", new AddAction());
		
	}
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 思路:http://localhost:8080/mvc/xxx.action
		//1.获取请求路径*.action
		//request.getrequestURI
		//request.getContextPath
		//例如:XXX.action
		String requestURL = request.getServletPath();
		
		//2.截取请求路径名*
		//例如:/xxx
		int start=requestURL.indexOf("/");
		int end=requestURL.lastIndexOf(".");
		String requestName = requestURL.substring(start, end);
		//3.根据请求路径名获取对应的子控制器类Action
		Action action = actions.get(requestName);
		//4.将请求委托给子控制器Action处理
		action.execute(request, response);
	}

}

Action:

package com.zking.mvc.framework;

import java.io.IOException;

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

/**
 * 子控制器类,做具体的核心业务逻辑处理
 * @author zjjt
 *
 */
public abstract class Action {
	public abstract void execute(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException;

}

addaction:

package com.zking.mvc.action;

import java.io.IOException;

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

import com.zking.mvc.framework.Action;

public class AddAction extends Action {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub

			System.out.println("AddAction");
			Integer num1 = Integer.parseInt(request.getParameter("num1"));
			Integer num2 = Integer.parseInt(request.getParameter("num2"));
			Integer result=num1+num2;
			request.setAttribute("result", result);
			request.getRequestDispatcher("/rs.jsp").forward(request, response);
	}

}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>mvc</display-name>
  <servlet>
    <servlet-name>actionServlet</servlet-name>
    <servlet-class>com.zking.mvc.framework.ActionServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>actionServlet</servlet-name>
  <url-pattern>*.action</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梓轩wdw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值