回顾大话中的模板方法:

servelt中相应和处理请求的HttpServlet类,是一个抽象类,它采用的是模板方法,来实现根据不同的请求,调用不同的方法:
其中HttpServlet类中的service采就是这个核心的方法。根据的请求头的类型来决定执行哪个方法,也就是上图中说的定义了算法的骨架的方法。
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getMethod();
long lastModified;
if (method.equals("GET")) {
lastModified = this.getLastModified(req);
if (lastModified == -1L) {
this.doGet(req, resp);
} else {
long ifModifiedSince;
try {
ifModifiedSince = req.getDateHeader("If-Modified-Since");
} catch (IllegalArgumentException var9) {
ifModifiedSince = -1L;
}
if (ifModifiedSince < lastModified / 1000L * 1000L) {
this.maybeSetLastModified(resp, lastModified);
this.doGet(req, resp);
} else {
resp.setStatus(304);
}
}
} else if (method.equals("HEAD")) {
lastModified = this.getLastModified(req);
this.maybeSetLastModified(resp, lastModified);
this.doHead(req, resp);
} else if (method.equals("POST")) {
this.doPost(req, resp);
} else if (method.equals("PUT")) {
this.doPut(req, resp);
} else if (method.equals("DELETE")) {
this.doDelete(req, resp);
} else if (method.equals("OPTIONS")) {
this.doOptions(req, resp);
} else if (method.equals("TRACE")) {
this.doTrace(req, resp);
} else {
String errMsg = lStrings.getString("http.method_not_implemented");
Object[] errArgs = new Object[]{method};
errMsg = MessageFormat.format(errMsg, errArgs);
resp.sendError(501, errMsg);
}
}
特点:通过一个方法来判断传入进来的方法名字是谁,然后判断不同的方法,执行给不同的子类方法去执行 。
通常情况下这个方法应该是不可以被重写的,可以用final来定义,这样就不可以重写了。在这里这个service方法是可以重写的,我们可以通过重写这个方法来设置不同的拦截。
顺便回顾一下:
控制翻转的特点: 我们不直接控制doGet等方法,是通过实现HttpServlet然后嗲用service方法来实现的,简单理解为控制翻转
注入的特点:HttpServlet中的参数 httpRespond 和httpRequest都是tomcat在运行的时候new的提供给我们使用的
284

被折叠的 条评论
为什么被折叠?



