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

自定义mvc标签

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

自定义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(根据不同请求路径名调用不同逻辑处理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;





public class ActionServlet extends HttpServlet {
	//问题:
	//1)使用Map方式需要一个个手动配置请求路径的对应关系?
	//2)子控制器类Action只能完成一个核心业务逻辑处理?
	//保存请求路径名对应的子控制器类Action
	//Key=请求路径名
	//value=具体的子控制器类Action
	private Map 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());
		
	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.doPost(request, 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;


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



  mvc
  
    actionServlet
    com.zking.mvc.framework.ActionServlet
  
  
  actionServlet
  *.action
  
  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  

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

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

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