如果我们使用了默认的httpServlet, 那么每个功能都需要一个 servlet , 就会导致 servlet 的数量大增
我们需要把一个 servlet 完成多个功能, 即把一个模块的代码写在一个 servlet 中, 比如用户的增删改查等等的对用户操作, 只需要一个 servlet 文件
如何抽取?
首先, httpServlet 中, 本身就有一个继承而来的 service 方法, 此方法前面介绍过, 它能够根据用户请求的方式自动调用doGet或doPost处理请求, 那么我们只需要覆盖重写此 service 方法即可.
我们需要创建一个Servlet继承”HttpServlet”,该类中包含了处理http协议的方法, 我们覆盖HttpServlet是保证我们的Servlet也能处理http请求
自定义的Servlet叫 BaseServelt, 取这个名称是为了按名知意, 这个 servelt 是为了完成对功能的分发, 它不会被直接访问, 它只是为了被继承
接下来, 我们定义一个 UserServlet, 这个 servlet 完成对整个 user 操作的功能模块, 需要注意:
UserServlet 要监听的路径, 写成 /user/*, 并在userServlet中写上多个方法
其中 BaseServlet 完成对方法分发的逻辑是 :
- 获取请求路径getURI, 判断要对 user 的操作, 比如 /user/add , /user/delete
- 截取方法名称lastIndexOf(‘/’), 也就是截取最后一个名称, 如 add, delete
- 通过反射this.getClass().getDeclareMethod(name,args), 获取add,delete 的方法对象,
- 通过方法对象, 执行我们自定义的方法, method.setAccessible(true), method.invoke(this,req,resp)
注意 : 自定义的servlet方法, 最好是public, 否则需要 getDeclare, 以及 setAccessible