本帖最后由 轩辕龙琊 于 2018-9-23 16:50 编辑
感觉自己越学习越不懂了,唉,果然学海无涯啊!希望大神解惑....
BaseServlet继承自HttpServlet,并且重写了service方法。
public class BaseServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String r_method = request.getParameter("method");
System.out.println("runing is ok");
Method method = null;
try {
method = this.getClass().getMethod(r_method, HttpServletRequest.class, HttpServletResponse.class);
} catch (Exception e) {
e.printStackTrace();
}
try {
String result = (String) method.invoke(this, request, response);
if (result != null && !result.trim().isEmpty()) {
int i = result.indexOf(":");
String StringParam = result.substring(0, i);
String path = result.substring(i + 1);
if (StringParam.equals("f")) {
request.getRequestDispatcher(path).forward(request, response);
} else if (StringParam.equals("r")) {
response.sendRedirect(path);
}
}
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
其他的Servlet继承自BaseServlet。即可实现一个Servlet处理多个请求。获取URL参数获取Servlet中对应的执行方法。
可是从处理流程来讲,为什么所有的请求都必须过BaseServlet中的重写的service方法呢?
比方说Class A extends Class B。 ClassA中有一个Add方法,假如ClassB 继承ClassA,ClassB也可以调用ClassA的Add方法。ClassB.add()是没问题的。
那我是不是可以认为,所有的Servlet都默认调用BaseServlice中的Service方法?
或者是说,所有的servlet默认都调用的是Service方法??