javaWeb实例之抽取BaseServlet

首先说下为什么要抽取BaseServlet.java呢?

看图可以知道每当前端页面有一个请求时,后台就需要创建一个Servlet类实现相关的逻辑,如果需求多了,就会有很多Servlet.java类。

抽取BaseServlet目的就是为了减少Servlet类数量

即现在只有两个Servlet类了,而前端请求可以写作方法在UserServlet中,只需要在前端请求中写方法名即可反射。

如下图,发现Servlet类确实减少了:

其中BaseServlet.java

// 不需要访问到该servlet
// 如果不抽取BaseServlet,那么所有请求都需要写一个XXXServlet.java类
// 如:ActiveUserServlet.java、ExitServlet.java、FindUserServlet.java、LoginServlet.java、RegisterServlet.java
public class BaseServlet extends HttpServlet {
    // 只需要实现service()方法,然后在该方法中分发请求
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 分发方法即分发activeUser、exit、findUser、login、register等方法
        // 完成方法分发
        // 1.获取请求路径
        String uri = req.getRequestURI();//   /demo/user/login
        System.out.println("请求uri: "+uri);
        // 2.获取方法名称
        String methodName = uri.substring(uri.lastIndexOf('/') + 1);// login
        System.out.println("方法名称:"+methodName);
        // 3.获取方法对象Method,根据方法名称反射方法对象
        //获取方法
        try {
            // getMethod(String methodName, Object... args); 传入方法名称和参数
            Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
            //4.执行方法
            method.invoke(this,req,resp);
        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

UserServlet.java

@WebServlet("/user/*")
public class UserServlet extends BaseServlet {
    public void register(HttpServletRequest request, HttpServletResponse response) {
        // 注册逻辑
        System.out.println("注册逻辑");
    }

    public void activeUser(HttpServletRequest request, HttpServletResponse response) {
        // 激活用户逻辑
        System.out.println("激活用户逻辑");
    }

    public void exit(HttpServletRequest request, HttpServletResponse response) {
        // 退出登录逻辑
        System.out.println("退出登录逻辑");
    }

    public void findUser(HttpServletRequest request, HttpServletResponse response) {
        // 发现用户逻辑
        System.out.println("发现用户逻辑");
    }

    public void login(HttpServletRequest request, HttpServletResponse response) {
        // 登录逻辑
        System.out.println("登录逻辑");
    }
}

浏览器输入:http://localhost:8080/demo/user/exit即可访问对应方法,处理对应请求的逻辑。

本项目的完整代码地址:GitHub的Demo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值