MVC模式: 是一种软件架构思想,
将软件的各个功能模块按照 Model模型、View视图、Controller控制器进行划分结构,对代码进行分层,下层准备好的内容为上一层服务
M,Model模型层,指的是Java工程中专门负责数据的类和它的对象,又称为JavaBean
--1.JavaBean分为两类:
(1)实体Bean,存储与数据库表对应的类及对象,如Dog Student ... 对应的包为:com.xxx.entity 或 com.xxx.bean 或 com.xxx.pojo 或 com.xxx.domain,
添加类 添加对应属性并且提供get和set方法
(2)业务处理Bean:指的是对数据进行增删改查操作的接口和具体实现类,用来处理数据操作和业务逻辑 如:StudentDao StudentService
--2.对数据(实体)进行增删改查方法设计的类 对应的包:com.xxx.dao=>接口 com.xxx.dao.impl=>接口的实现类
--3.对增删改查方法进行灵活调用组成业务逻辑方法设计的类 对应的包:com.xxx.service=>业务接口 com.xxx.service.impl=>接口实现类
V:View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据
C:Controller,控制层,指工程中的servlet,作用是接收请求和响应浏览器 如:StudentServlet 调用Service 对应的包:com.xxx.servlet 或 com.xxx.web 或 com.xxx.controller 注意:随着项目的愈发庞大,包也随着增多,如utils 。。。
三层架构:是MVC具体实现方案,将代码分为多层,体现在分包中
三层架构指的是:
1、数据访问层:
--相应的包:-dao包:数据传输对应的代码包,一般针对业务逻辑所需方法设计接口
-dao.impl包:数据传输接口的实现类,具体完成数据操作(增删查改)
-上面两个包依赖的实体类包:entity|bean|domain|pojo,对应数据库表,一张表一个实体类
2、业务逻辑层:
--相应的包:-Servlet:业务功能设计接口,针对系统需要的功能进行接口设计
-Servlet.impl:业务功能的实现,针对系统需要的功能调用底层代码具体实现需要的操作
3、表现层:
-web|servlet|controller包:根据路径接受浏览器的请求并处理响应的程序
webapp:存放资源与java包无关
Model模型中有数据访问层、业务逻辑层;
表现层包括View(视图层)和 Controller(控制层,即指工程中的servlet)
public class BaseServlet extends HttpServlet {
//当访问BaseServlet的子类时,子类没有service,就会执行这个类的service,
//所以可以在这个类的service方法里想办法调用请求需要执行的子类方法,
// 而这service方法可以成为所有子类通用方法
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//1.根据请求路径URI获取需要调用的子类方法名:
// 用String的substring和lastIndexOf方法
String requestURI = request.getRequestURI();
//截取最后一个斜杠后的部分作为方法名
String methodName=requestURI.substring(requestURI.lastIndexOf("/")+1);
//2.通过字节码文件(反射)获取子类的对象,以便调取方法
Class<? extends BaseServlet> thisClass = this.getClass();
//3.通过字节码子类对象调取方法
Method method = thisClass.getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
//4.调用方法
method.setAccessible(true);//设置方法权限为可用
method.invoke(this,request,response);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
}
}
}