我们先定义一个BaseServlet,继承HttpServlet 重写Service方法 (因为HttpServlet就是在Service方法里做的通过请求方式进行方法分发,我们就重写改成通过请求路径分发)
根据资源路径进行方法分发,利用反射得到调用者的class字节码文件并调用对应方法
public class BaseServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1. 获取请求的路径String uri =req.getRequestURI(); // /brand-case/brand/selectAll//2.获取最后一段路径 根据最后一个“/”的索引+1截取后面的字符串String methodName = uri.substring(uri.lastIndexOf("/") + 1);//3 执行方法// 获取BrandServlet 或者UserServlet的字节码对象class 谁调用,谁就是thisClass extends BaseServlet> cls = this.getClass();//获取方法Method对象try {Method method = cls.getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);method.invoke(this,req,resp);} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {throw new RuntimeException(e);}}
}
其他的像 BrandServlet 或者 UserServlet 只需要继承BaseServlet并写各自的方法就可以了
(需要在方法传递request跟response参数)
@WebServlet("/brand/*")
public class BrandServlet extends BaseServlet {public void selectAll(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{System.out.println("Brand 的 selectAll 方法");}public void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{System.out.println("Brand的add方法");}
}
今天在写selectByUser方法的时候,遇到了axios里面代码段无法被执行的情况
if (resp.data == "false"){_this.$message({message:"未查询到您想要的数据",type:"error"})
}
因为在js中 false代表的是boolean类型的
我们传入的false是字符串就会导致if失效
所以直接换成了_false就解决了该问题
上一篇:分号属于一句话的结束吗
下一篇:大智若愚是什么意思