zoukankan      html  css  js  c++  java
  • servlet中service() doGet() doPost() 方法

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

      在servlet中默认情况下,无论你是get还是post 提交过来 都会经过service()方法来处理,然后转向到doGet 
    1. 注意,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);
            }
        }
      从上面可以看出 这里的service是用来转向的,但是如果你在自己的servlet类中覆盖了service方法,比如说你的service是这样的: 
    1. Java代码 
    2.    1. public void service(ServletRequest req, ServletResponse res)    
    3. 2.                    throws ServletException, IOException {    
    4. 3.          res.getOutputStream().print(    
    5. 4.          "image is <img src='images/downcoin.gif'></img><br>");    
    6. 5.      }   
    7.  
    8.  
    9. Java代码 
    10.    1. <%@page contentType="text/html; charset=utf-8"%>    
    11. 2. <html>    
    12. 3. <head><title>选择</title></head>    
    13. 4. <body>    
    14. 5. 请选择你喜欢的水果:<br>    
    15. 6. <form action = "Test" method = "post">    
    16. 7. <input type="checkbox" name="fruit" value ="apple" >苹果<br>    
    17. 8. <input type="checkbox" name="fruit" value ="orange">桔子<br>    
    18. 9. <input type="checkbox" name="fruit" value ="mango">芒果<br>    
    19. 10. <input type="submit" value="提交">    
    20. 11. </form>    
    21. 12. </body>    
    22. 13. </html>    
    23. 14.    
    24. 15. 服务端servlet是:Test类    
    25. 16.    
    26. 17. import java.io.IOException;    
    27. 18.    
    28. 19. import javax.servlet.ServletException;    
    29. 20. import javax.servlet.ServletOutputStream;    
    30. 21. import javax.servlet.ServletRequest;    
    31. 22. import javax.servlet.ServletResponse;    
    32. 23. import javax.servlet.http.HttpServlet;    
    33. 24. import javax.servlet.http.HttpServletRequest;    
    34. 25. import javax.servlet.http.HttpServletResponse;    
    35. 26.    
    36. 27. /**
    37.   29. */   
    38. 30. public class Test extends HttpServlet {    
    39. 31.    
    40. 32. public void service(ServletRequest req, ServletResponse res)    
    41. 33.    throws ServletException, IOException {    
    42. 34.             res.getOutputStream().print("This is the service");    
    43. 35.    
    44. 36. }    
    45. 37.    
    46. 38. protected void doGet(HttpServletRequest request,    
    47. 39.     HttpServletResponse response) throws ServletException, IOException {    
    48. 40.    doPost(request,response);    
    49. 41.    
    50. 42. }    
    51. 43. protected void doPost(HttpServletRequest request,    
    52. 44.     HttpServletResponse response) throws ServletException, IOException {    
    53. 45.    ServletOutputStream out=response.getOutputStream();    
    54. 46.    String[] args=(String[])request.getParameterValues("fruit");    
    55. 47.   for(int i=0;i<args.length;i++){    
    56. 48.     out.print(args[i]+"<br>");    
    57. 49.    }    
    58. 50.       
    59. 51. }    
    60. 52. }   
    61. 所以,我们在写servlet的时候,一般都是重写doGet或doPost方法,不会管service方法。
  • 相关阅读:
    [No0000199]设计模式总结
    [No0000197]Windows用户都应该知道的运行命令
    [No000017F]如何监控注册表的修改
    [No0000196]一文读懂Java 11的ZGC为何如此高效
    [No0000195]NoSQL还是SQL?这一篇讲清楚
    [No0000194]聊聊 Chrome DevTools 中你可能不知道的调试技巧
    [No000018A]改善C#程序的建议11-20
    [No000018C]Vim清除上次的搜索高亮结果-Vim使用技巧(1)
    [No000018D]Vim快速注释/取消注释多行的几种方法-Vim使用技巧(2)
    [No000018E]Vim快速跳转任意行、任意列以及高亮显示当前行、当前列方法-Vim使用技巧(3)
  • 原文地址:https://www.cnblogs.com/heiming/p/5837260.html
Copyright © 2011-2022 走看看