service()
これは通常どのように実装されるかです (非常に単純化されています):
protected void service(HttpServletRequest req, HttpServletResponse resp) {
String method = req.getMethod();
if (method.equals(METHOD_GET)) {
doGet(req, resp);
} else if (method.equals(METHOD_HEAD)) {
doHead(req, resp);
} else if (method.equals(METHOD_POST)) {
doPost(req, resp);
} else if (method.equals(METHOD_PUT)) {
doPut(req, resp);
} else if (method.equals(METHOD_DELETE)) {
doDelete(req, resp);
} else if (method.equals(METHOD_OPTIONS)) {
doOptions(req,resp);
} else if (method.equals(METHOD_TRACE)) {
doTrace(req,resp);
} else {
resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);
}
}
ご覧のとおり、HTTP メソッドにほとんど委譲しdoGet()
てdoPost()
依存していません。だから、片手から交換doGet()
しdoPost()
てservice()
大丈夫です。一方、サーブレットは、、、およびその他のメソッドを個別に処理し、405 PUT
Method not allowedを返します。DELETE
HEAD
doGet()
doPost()
doGet()
そのため、コードを分離してdoPost()
委任し、サーブレットに他のメソッドを処理させることを実際にアドバイスします。これがコード内で繰り返されるパターンである場合は、次のヘルパー サーブレットを検討してください。
public class AbstractServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
doGetOrPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
doGetOrPost(request, response);
}
abstract protected void doGetOrPost(.....);
}