M-D*_*M-D 15 tomcat servlets java-ee
我有一个servlet,看起来像:
public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
doTheJob(request, response);
}//method doGet
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
doTheJob(request, response);
}//method doPost
private void doTheJob(.....) {
...........................
}
}
Run Code Online (Sandbox Code Playgroud)
由于我的应用程序的工作方式,我只需要从doGet()和doPost()调用doTheJob ().所以我觉得,我应该更好地覆盖的方法service()方法中的HttpServlet的.
但我想知道这是否会制造任何问题或导致任何问题.
Tom*_*icz 23
这是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);
}
}
Run Code Online (Sandbox Code Playgroud)
正如你可以看到它几乎代表们doGet(),并doPost()根据HTTP方法.因此,从一只手更换doGet(),并doPost()用service()罚款.在另一方面你的servlet还将处理PUT,DELETE,HEAD等多种方式,同时具有独立doGet()和doPost()它将返回不允许的405方法.
这就是为什么我实际上建议分离doGet()和doPost()委托你的代码,让servlet处理其他方法.如果这是代码中的重复模式,请考虑以下帮助程序servlet:
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(.....);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14440 次 |
| 最近记录: |