日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Servlet生命周期中的service方法分析

發(fā)布時(shí)間:2023/12/9 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Servlet生命周期中的service方法分析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

問題
ServletLifeCycle中的service方法內(nèi),有super.service(request, response); 會執(zhí)行this.doGet(HttpServletRequest request, HttpServletResponse response);
沒有super.service(request, response);,則不執(zhí)行this.doGet(...). 是怎么實(shí)現(xiàn)的?

舉一反三:
一個(gè)子類,覆寫的方法內(nèi),如果調(diào)用了父類的該方法,會執(zhí)行子類內(nèi)的另一個(gè)方法;
覆寫的方法內(nèi),如果沒有調(diào)用父類的該方法,就不會執(zhí)行子類內(nèi)的另一個(gè)方法;

分析 ----->符號是關(guān)鍵注釋

1 public class ServletLifeCycle extends HttpServlet { 2 private static final long serialVersionUID = 1L; 3 4 @Override 5 public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { 6 // TODO Auto-generated method stub 7 //this.doGet((HttpServletRequest)request, (HttpServletResponse)response); 8 super.service(request, response);//------------------->執(zhí)行父類的service(ServletRequest request, ServletResponse response)方法 9 10 System.out.println("處理客戶端請求"); 11 } 12 13 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 14 // TODO Auto-generated method stub 15 System.out.println("處理過程"); 16 response.getWriter().append("Served at: ").append(request.getContextPath()); 17 } 18 19 } 20 21 22 23 24 public abstract class HttpServlet extends GenericServlet { 25 public void service(ServletRequest req, ServletResponse res) 26 throws ServletException, IOException { 27 28 HttpServletRequest request; 29 HttpServletResponse response; 30 31 try { 32 request = (HttpServletRequest) req; 33 response = (HttpServletResponse) res; 34 } catch (ClassCastException e) { 35 throw new ServletException("non-HTTP request or response"); 36 } 37 service(request, response);//------------------->父類的方法的重載執(zhí)行父類的service(HttpServletRequest request, HttpServletResponse response)方法 38 //------------------->我的理解是,如果沒有重載,會出現(xiàn)死循環(huán). 走到此處又執(zhí)行子類ServletLifeCycle的service方法,子類又調(diào)用父類service方法,循環(huán)嵌套. 39 } 40 41 42 protected void service(HttpServletRequest req, HttpServletResponse resp) 43 throws ServletException, IOException { 44 45 String method = req.getMethod(); 46 47 if (method.equals(METHOD_GET)) { 48 long lastModified = getLastModified(req); 49 if (lastModified == -1) { 50 // servlet doesn't support if-modified-since, no reason 51 // to go through further expensive logic 52 doGet(req, resp);//------------------->調(diào)用子類ServletLifeCycle的doGet方法 53 } else { 54 long ifModifiedSince; 55 try { 56 ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE); 57 } catch (IllegalArgumentException iae) { 58 // Invalid date header - proceed as if none was set 59 ifModifiedSince = -1; 60 } 61 if (ifModifiedSince < (lastModified / 1000 * 1000)) { 62 // If the servlet mod time is later, call doGet() 63 // Round down to the nearest second for a proper compare 64 // A ifModifiedSince of -1 will always be less 65 maybeSetLastModified(resp, lastModified); 66 doGet(req, resp); 67 } else { 68 resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED); 69 } 70 } 71 72 } else if (method.equals(METHOD_HEAD)) { 73 long lastModified = getLastModified(req); 74 maybeSetLastModified(resp, lastModified); 75 doHead(req, resp); 76 77 } else if (method.equals(METHOD_POST)) { 78 doPost(req, resp); 79 80 } else if (method.equals(METHOD_PUT)) { 81 doPut(req, resp); 82 83 } else if (method.equals(METHOD_DELETE)) { 84 doDelete(req, resp); 85 86 } else if (method.equals(METHOD_OPTIONS)) { 87 doOptions(req,resp); 88 89 } else if (method.equals(METHOD_TRACE)) { 90 doTrace(req,resp); 91 92 } else { 93 // 94 // Note that this means NO servlet supports whatever 95 // method was requested, anywhere on this server. 96 // 97 98 String errMsg = lStrings.getString("http.method_not_implemented"); 99 Object[] errArgs = new Object[1]; 100 errArgs[0] = method; 101 errMsg = MessageFormat.format(errMsg, errArgs); 102 103 resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg); 104 } 105 } 106 107 108 protected void doGet(HttpServletRequest req, HttpServletResponse resp) 109 throws ServletException, IOException 110 { 111 String protocol = req.getProtocol(); 112 String msg = lStrings.getString("http.method_get_not_supported"); 113 if (protocol.endsWith("1.1")) { 114 resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg); 115 } else { 116 resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg); 117 } 118 } 119 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/ICE_Inspire/p/5150170.html

總結(jié)

以上是生活随笔為你收集整理的Servlet生命周期中的service方法分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。