呵呵呵5596

导航

java反射应用之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("登录逻辑");
}

}

posted on 2021-11-30 21:06  呵呵呵5596  阅读(40)  评论(0编辑  收藏  举报