Come possiamo chiamare il metodo service dal metodo doGet o doPost nella servlet?
Il metodo service() appartiene a Genericservlet e può essere sovraccaricato per supportare qualsiasi tipo di protocollo come Http, Ftp ecc.
Allora avete un servlet specializzato per gestire HttpProtocol, lo chiamiamo HttpServlet. L'HttpServlet fornisce anche un'implementazione predefinita per i metodi service() e doGet() e doPost().
Perché non dovremmo sovrascrivere il metodo service()?
Perché non è una buona pratica sovrascrivere il metodo service. Se chiamiamo uno qualsiasi dei metodi doxxx allora internamente chiamerà il metodo service della HttpServlet. Quindi non c'è bisogno di chiamarlo esplicitamente.
Ordine di esecuzione di service():
service(ServletRequest,ServletResponse)
-->calls
-->service(HttpServletRequest req,HttpServletResponse res)
-->calls
-->doGet/doPost(HttpServletRequest req,HttpServletResponse res)
This is how you can override the service in case you want to (code given by Tomasz Nurkiewicz from SO community Overriding HttpServlet service method ):
- 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);
- }
- }
Articoli simili
- Comprerai un telefono Huawei/Honor con Huawei Mobile Service piuttosto che con Google Mobile Service? Perché o perché no?
- Come possiamo chiamare qualcuno dal suo stesso numero?
- Qual è corretto, "Si prega di chiamare al più presto" o "Si prega di chiamare quando è conveniente"?
- Come chiamare il metodo Main Activity in un'altra classe in Android