servlet代码优化的逻辑
BaseServlet:用来替换HttpServlet,BrandServlet直接继承Baseservlet,在BaseServlet中重写service方法,
从根据请求方式匹配doGet或doPost变成根据请求路径的最后一段路径来完成方法的分发
brand-demo/brand/selectAll
/brand访问到了brandServlet
/selectAll访问到了selectAll方法
- 获取对应的路径 2个api
String methodName=uri.subString(index+1)的原因:
xx.substring()括号中带的参数不一样,效果就会有很大的区别,详细如下:
lastindexof:
lastindexof从0索引开始计算
int lastindexof : 报告指定 Unicode 字符或字符串在此实例中的最后一个匹配项的从零开始的索引的位置。
如果未在此实例中找到该字符或字符串,则此方法返回 -1。
比如字符串String s="brand-demo/brand/add" int a=s.lastIndexOf("/")的返回值就是a=3
subString:
xx.substring(0,2)表示取第一个和第二个字符(0,1,2表示第一、二、三个字符,含头不含尾的原则就只包含第一、二个字符),返回一个新的字符串(只包含指定的第一和第二个字符);
xx.substring(2)表示去掉前两个字符,返回一个新的字符串(只包含去掉前两个字符后剩下的字符
String s="brand-demo/brand/add"
String result= s.subString(a)
输出结果result为/add"
result带斜杠的原因就是subString方法是从1索引开始计算,而lastindexof从索引0开始计算
this代表谁
谁调用我(this 所在的方法),我(this)就代表谁
理解HttpServlet中的service方法通过,请求方式完成方法的分发,子类继承他就默认调用了它的方法
同理BaseServlet通过最后一个路径完成方法的分发,子类也一定会调用这个方法,所以这个this代表了BaseServlet的所有子类
获取方法对象执行方法
反射:
获得带形式参数方法对象: Method method = clazz.getMethod("方法名", String.class);有几种类型参数就需要几个参数类型的class对象
获得方法对象后调用方法的方法:method.invoke(要调用该方法的对象,方法的实参 )