MVC的三层架构中表现层的Servlet的通用类BaseServlet

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

    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值