servlet中service() doGet() doPost() 方法

HttpServlet 里的三个方法:service(HttpServletRequest req, HttpServletResponse resp) ,doGet(HttpServletRequest req, HttpServletResponse resp), doPost(HttpServletRequest req, HttpServletResponse res)的区别和联系:

  1. 在servlet中默认情况下,无论你是get还是post 提交过来 都会经过service()方法来处理,然后转向到doGet 
  2. 注意,sun只是定义了servlet接口,而实现servlet接口的就是类似于tomcat的服务器,所以我是在tomcat的安装目录下找到实现的类。
protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException
    {
        String method = req.getMethod();
        if(method.equals("GET"))
        {
            long lastModified = getLastModified(req);
            if(lastModified == -1L)
            {
                doGet(req, resp);
            } else
            {
                long ifModifiedSince = req.getDateHeader("If-Modified-Since");
                if(ifModifiedSince < (lastModified / 1000L) * 1000L)
                {
                    maybeSetLastModified(resp, lastModified);
                    doGet(req, resp);
                } else
                {
                    resp.setStatus(304);
                }
            }
        } else
        if(method.equals("HEAD"))
        {
            long lastModified = getLastModified(req);
            maybeSetLastModified(resp, lastModified);
            doHead(req, resp);
        } else
        if(method.equals("POST"))
            doPost(req, resp);
        else
        if(method.equals("PUT"))
            doPut(req, resp);
        else
        if(method.equals("DELETE"))
            doDelete(req, resp);
        else
        if(method.equals("OPTIONS"))
            doOptions(req, resp);
        else
        if(method.equals("TRACE"))
        {
            doTrace(req, resp);
        } else
        {
            String errMsg = lStrings.getString("http.method_not_implemented");
            Object errArgs[] = new Object[1];
            errArgs[0] = method;
            errMsg = MessageFormat.format(errMsg, errArgs);
            resp.sendError(501, errMsg);
        }
    }
  1. 从上面可以看出 这里的service是用来转向的,但是如果你在自己的servlet类中覆盖了service方法,比如说你的service是这样的: 
  2. Java代码 
  3.    1. public void service(ServletRequest req, ServletResponse res)    
  4. 2.                    throws ServletException, IOException {    
  5. 3.          res.getOutputStream().print(    
  6. 4.          "image is <img src='images/downcoin.gif'></img><br>");    
  7. 5.      }   
  8.  
  9.  
  10. Java代码 
  11.    1. <%@page contentType="text/html; charset=utf-8"%>    
  12. 2. <html>    
  13. 3. <head><title>选择</title></head>    
  14. 4. <body>    
  15. 5. 请选择你喜欢的水果:<br>    
  16. 6. <form action = "Test" method = "post">    
  17. 7. <input type="checkbox" name="fruit" value ="apple" >苹果<br>    
  18. 8. <input type="checkbox" name="fruit" value ="orange">桔子<br>    
  19. 9. <input type="checkbox" name="fruit" value ="mango">芒果<br>    
  20. 10. <input type="submit" value="提交">    
  21. 11. </form>    
  22. 12. </body>    
  23. 13. </html>    
  24. 14.    
  25. 15. 服务端servlet是:Test类    
  26. 16.    
  27. 17. import java.io.IOException;    
  28. 18.    
  29. 19. import javax.servlet.ServletException;    
  30. 20. import javax.servlet.ServletOutputStream;    
  31. 21. import javax.servlet.ServletRequest;    
  32. 22. import javax.servlet.ServletResponse;    
  33. 23. import javax.servlet.http.HttpServlet;    
  34. 24. import javax.servlet.http.HttpServletRequest;    
  35. 25. import javax.servlet.http.HttpServletResponse;    
  36. 26.    
  37. 27. /**
  38.   29. */   
  39. 30. public class Test extends HttpServlet {    
  40. 31.    
  41. 32. public void service(ServletRequest req, ServletResponse res)    
  42. 33.    throws ServletException, IOException {    
  43. 34.             res.getOutputStream().print("This is the service");    
  44. 35.    
  45. 36. }    
  46. 37.    
  47. 38. protected void doGet(HttpServletRequest request,    
  48. 39.     HttpServletResponse response) throws ServletException, IOException {    
  49. 40.    doPost(request,response);    
  50. 41.    
  51. 42. }    
  52. 43. protected void doPost(HttpServletRequest request,    
  53. 44.     HttpServletResponse response) throws ServletException, IOException {    
  54. 45.    ServletOutputStream out=response.getOutputStream();    
  55. 46.    String[] args=(String[])request.getParameterValues("fruit");    
  56. 47.   for(int i=0;i<args.length;i++){    
  57. 48.     out.print(args[i]+"<br>");    
  58. 49.    }    
  59. 50.       
  60. 51. }    
  61. 52. }   
  62. 所以,我们在写servlet的时候,一般都是重写doGet或doPost方法,不会管service方法。

转载于:https://www.cnblogs.com/heiming/p/5837260.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值