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);
}
}