通过反射调用
public abstract class BaseServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String methodName = req.getParameter("method");
System.out.println("methodName " + methodName);
Class clazz = this.getClass();
if(methodName == null && methodName.trim().isEmpty()) {
throw new RuntimeException("请求方法" + methodName + "错误");
}
try {
Method method = clazz.getMethod(methodName,HttpServletRequest.class, HttpServletResponse.class);
String resuletPath = (String) method.invoke(this, req, resp);
if(resuletPath == null && resuletPath.trim().isEmpty()) {
System.out.println("路径 " + resuletPath + "不存在!");
throw new RuntimeException();
}
int colonIndex = resuletPath.indexOf(":");
String reqPattern = resuletPath.substring(0, colonIndex);
String urlPath = resuletPath.substring(colonIndex, resuletPath.length());
if(resuletPath.contains(":")) {
if(reqPattern.equals("f")) {
req.getRequestDispatcher(urlPath).forward(req, resp);
}else if(reqPattern.equals("r")) {
resp.sendRedirect(req.getContextPath() + urlPath);
}else {
throw new RuntimeException("不支持目前访问方式" + reqPattern);
}
}else {
req.getRequestDispatcher(urlPath).forward(req, resp);
}
} catch (SecurityException e) {
System.out.println("SecurityException" + e.getMessage());
} catch (InvocationTargetException e) {
System.out.println("InvocationTargetException" + e.getMessage());
} catch (IllegalAccessException e) {
System.out.println("IllegalAccessException" + e.getMessage());
} catch (NoSuchMethodException e) {
System.out.println("NoSuchMethodException" + e.getMessage());
e.printStackTrace();
}
}
}