MVC三层架构

MVC设计模式

什么是MVC:Model view Controller 模型、视图、控制器

mvc设计模式的概念

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范。
用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构.

早些年

用户直接访问控制层,控制层就可以直接操作数据库;

servlet-->CRUD(增删改查)-->数据库
    弊端:程序十分臃肿,不利于维护 
    Servlet的代码中:处理请求、响应、视图跳转、处理JDBC、处理业务代码、处理逻辑代码
    
    架构:没有什么是加一层解决不了的
    程序员调用
    ↓
    JDBC
    ↓
    Mysql Oracle sqlServer ..

MVC三层架构

Model

  • 业务处理:业务逻辑(Service)
  • 数据持久层:CRUD(Dao)

View

  • 展示数据
  • 提供链接发起Servlet请求(a,form,img...)

Controller(Servlet)

  • 接收用户请求:(req:请求参数、Session信息等..)
  • 交给业务层处理对应的代码
  • 控制视图的跳转

登录--->接收用户的登录请求--->处理用户的请求(获取用户登录的参数,username、password)--->交给业务层处理登录业务(判断用户名密码是否正确:事务)--->Dao层查询用户名和密码是否正确--->数据库

一般情况下,在项目中要体现出三层架构,通过分包来描述:

  • 1.web/controller/action...:表现层控制器
  • 2.domain/bean...:定义javabean
  • 3.service:描述业务层(定义业务接口)
    • serviceImpl:实现业务接口
  • 4.dao:描述数据访问层(定义数据访问层接口)
  • daoImpl:实现数据访问层接口
  • 5.util:定义工具类
  • 6.exception:自定义异常

BaseServlet

为什么要书写BaseServlet?

书写一个模块需要至少四个Servlet,即增删改查.这样不便于维护.开发复杂.可以通过BseServlet进行请求方法的定位.

package com.zgrj.account.util;

import java.io.IOException;
import java.lang.reflect.Method;

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

/**
 * Servlet implementation class BaseServlet
 */
public  abstract class BaseServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			request.setCharacterEncoding("utf-8");
			String methodName = request.getParameter("method");
			Class clazz  = 	this.getClass();
			String path = null;
			try {				
				    Method method = clazz.getDeclaredMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
					path = (String) method.invoke(this, request,response);
			} catch (Exception e) {
				e.printStackTrace();
				}
			request.getRequestDispatcher(path).forward(request, response);
		}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		doGet(request, response);
	}

}
posted @ 2020-06-01 10:30  CHENFANgY  阅读(405)  评论(0编辑  收藏  举报