servlet中的service()方法重写与不重写

在servlet中默认情况下,无论你是get还是post 提交过来 都会经过service()方法来处理,然后转向到doGet或是doPost方法,可以看HttpServlet 类的service方法:

         原代码:

 

[c-sharp]  view plain copy
  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是用来转向的,但是如果你在自己的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就不是用来转向的,而是用来处理业务的,现在不论你的客户端是用pos还是get来请求此servlet

都会执行service方法也只能执行servlet方法,不会去执行doPost或是doGet方法。

 
比如说:你的客户端代码是:

 

[c-sharp]  view plain copy
  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. 服务端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. }  

 


那么当你提交数据后的输出结果是:this is the service


原文:http://blog.csdn.net/muyihuakai/article/details/5858792

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值