三层架构之BaseServlet

1、需求分析
  • 将一张数据库表的相关操作,整合到一个servlet里面,从而达到减少servlet数量,降低代码重复率的目的。
2、解决方案
  • 写一个BaseServlet,让业务相关的servlet都来继承BaseServlet,而让BaseServlet来继承HttpServlet,并重写里面的service方法。于是,每次业务相关的servlet被执行时,都会执行BaseServlet里面的代码,在BaseServlet里面实现业务servlet相关的方法。
3、BaseServlet代码模板
package cn.itcast.travel.web.servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

// 这个servlet的作用是重写HttpServlet , 使得继承这个servlet的servlet可以访问到里面的方法。
public class BaseServlet extends HttpServlet {
    //在这里, 只需要重写service方法, 因为service方法就是HttpServlet执行的关键方法。
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //当子类被执行的时候, 就会先来到父类这里, 执行父类的相关方法, 于是在父类里面获取子类的方法, 然后就在父类里面达到了执行子类方法的目的.

        //1.获取请求路径
        String uri = req.getRequestURI();  // 这个方法获取到了路径  /trave/user/add
        //2.获取调用的方法名
        String methodName = uri.substring(uri.lastIndexOf('/') + 1);  // 这里是从后面开始截取字符串
        
        try {
            //3.获取方法对象, 这里有异常需要抛出
            Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
            //4.执行方法
            method.invoke(this,req,resp);  //这里也有异常, 需要抛一下
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐