客户端每次发送请求时都会执行我们写的servlet的service方法然后响应结果,每次实现一个功能我们就要新建一个servlet来实现功能,这样就会出现功能没写多少类创建了不少
为了让一个servlet实现多个方法,可以通过反射来调用
我们定义一个类来让它继承HttpServlet然后让servlet层所有的类继承它
在执行时子类由于没有service方法就会取父类找到service
这样还可以初始化浏览器请求与响应的乱码问题
public class BaseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF8");
resp.setCharacterEncoding("UTF8");
resp.setContentType("text/html; charset=UTF8");
}
通过浏览器输入的路径来获取我们想要调用的方法名
//获取路径名
String uri = req.getRequestURI();
//截取/最后的路径,获得方法名
String substring = uri.substring(uri.lastIndexOf("/") + 1);
然后找到对应子类,获取对应的实例方法方法
//通过路径反射调用子类的对应的方法
//获取子类类对象
Class<? extends BaseServlet> aClass = this.getClass();
//通过反射获取类对象对应的实例方法
Method declaredMethod = aClass.getDeclaredMethod(substring, HttpServletRequest.class, HttpServletResponse.class);
//调用实例方法
declaredMethod.invoke(this,req,resp);