The NoteBook of EricKong

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

          在servlet中默認(rèn)情況下,無論你是get還是post 提交過來 都會經(jīng)過service()方法來處理,然后轉(zhuǎn)向到doGet或是doPost方法,可以看HttpServlet 類的service方法:

                   原代碼:

           

           

          [c-sharp] view plaincopy
          1. protected void service(HttpServletRequest req, HttpServletResponse resp)  
          2.         throws ServletException, IOException  
          3.     {  
          4.         String method = req.getMethod();  
          5.         if(method.equals("GET"))  
          6.         {  
          7.             long lastModified = getLastModified(req);  
          8.             if(lastModified == -1L)  
          9.             {  
          10.                 doGet(req, resp);  
          11.             } else  
          12.             {  
          13.                 long ifModifiedSince = req.getDateHeader("If-Modified-Since");  
          14.                 if(ifModifiedSince < (lastModified / 1000L) * 1000L)  
          15.                 {  
          16.                     maybeSetLastModified(resp, lastModified);  
          17.                     doGet(req, resp);  
          18.                 } else  
          19.                 {  
          20.                     resp.setStatus(304);  
          21.                 }  
          22.             }  
          23.         } else  
          24.         if(method.equals("HEAD"))  
          25.         {  
          26.             long lastModified = getLastModified(req);  
          27.             maybeSetLastModified(resp, lastModified);  
          28.             doHead(req, resp);  
          29.         } else  
          30.         if(method.equals("POST"))  
          31.             doPost(req, resp);  
          32.         else  
          33.         if(method.equals("PUT"))  
          34.             doPut(req, resp);  
          35.         else  
          36.         if(method.equals("DELETE"))  
          37.             doDelete(req, resp);  
          38.         else  
          39.         if(method.equals("OPTIONS"))  
          40.             doOptions(req, resp);  
          41.         else  
          42.         if(method.equals("TRACE"))  
          43.         {  
          44.             doTrace(req, resp);  
          45.         } else  
          46.         {  
          47.             String errMsg = lStrings.getString("http.method_not_implemented");  
          48.             Object errArgs[] = new Object[1];  
          49.             errArgs[0] = method;  
          50.             errMsg = MessageFormat.format(errMsg, errArgs);  
          51.             resp.sendError(501, errMsg);  
          52.         }  
          53.     }  

           

           

          從上面可以看出 這里的service是用來轉(zhuǎn)向的,但是如果你在自己的servlet類中覆蓋了service方法,比如說你的service是這樣的:

             public void service(ServletRequest req, ServletResponse res)
                             throws ServletException, IOException {
                  res.getOutputStream().print(
                   "image is <img src='images/downcoin.gif'></img><br>");
              }

          那么這時service就不是用來轉(zhuǎn)向的,而是用來處理業(yè)務(wù)的,現(xiàn)在不論你的客戶端是用pos還是get來請求此servlet

          都會執(zhí)行service方法也只能執(zhí)行servlet方法,不會去執(zhí)行doPost或是doGet方法。

           
          比如說:你的客戶端代碼是:

           

           

          [c-sharp] view plaincopy
          1. <%@page contentType="text/html; charset=utf-8"%>  
          2. <html>  
          3. <head><title>選擇</title></head>  
          4. <body>  
          5. 請選擇你喜歡的水果:<br>  
          6. <form action = "Test" method = "post">  
          7. <input type="checkbox" name="fruit" value ="apple" >蘋果<br>  
          8. <input type="checkbox" name="fruit" value ="orange">桔子<br>  
          9. <input type="checkbox" name="fruit" value ="mango">芒果<br>  
          10. <input type="submit" value="提交">  
          11. </form>  
          12. </body>  
          13. </html>  
          14. 服務(wù)端servlet是:Test類  
          15. import java.io.IOException;  
          16. import javax.servlet.ServletException;  
          17. import javax.servlet.ServletOutputStream;  
          18. import javax.servlet.ServletRequest;  
          19. import javax.servlet.ServletResponse;  
          20. import javax.servlet.http.HttpServlet;  
          21. import javax.servlet.http.HttpServletRequest;  
          22. import javax.servlet.http.HttpServletResponse;  
          23. /** 
          24.  * 演示service方法 
          25.  */  
          26. public class Test extends HttpServlet {  
          27.  public void service(ServletRequest req, ServletResponse res)  
          28.    throws ServletException, IOException {  
          29.            res.getOutputStream().print("This is the service");  
          30.  }  
          31.  protected void doGet(HttpServletRequest request,  
          32.    HttpServletResponse response) throws ServletException, IOException {  
          33.   doPost(request,response);  
          34.  }  
          35.  protected void doPost(HttpServletRequest request,  
          36.    HttpServletResponse response) throws ServletException, IOException {  
          37.   ServletOutputStream out=response.getOutputStream();  
          38.   String[] args=(String[])request.getParameterValues("fruit");  
          39.   for(int i=0;i<args.length;i++){  
          40.    out.print(args[i]+"<br>");  
          41.   }  
          42.     
          43.  }  
          44. }  

           

           


          那么當(dāng)你提交數(shù)據(jù)后的輸出結(jié)果是:this is the service

          posted on 2014-01-06 14:54 Eric_jiang 閱讀(296) 評論(0)  編輯  收藏 所屬分類: JSP
          主站蜘蛛池模板: 宜宾县| 寿宁县| 筠连县| 寻甸| 泰顺县| 石首市| 巴彦县| 伽师县| 桃园市| 昆山市| 遵义县| 黄浦区| 铜梁县| 阜新| 泊头市| 辽源市| 平武县| 哈巴河县| 青田县| 金湖县| 营口市| 乐安县| 隆化县| 伊吾县| 嘉峪关市| 四川省| 如皋市| 高雄市| 云龙县| 浠水县| 正镶白旗| 工布江达县| 尼勒克县| 中宁县| 延吉市| 宣威市| 泗阳县| 浏阳市| 通州市| 大姚县| 大化|