• 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方法。
  • 相关阅读:
    闭包函数与装饰器
    python 函数的参数
    python 函数定义及调用
    python 文件指针及文件覆盖
    phtnon 文件操作
    Volatile 关键字 内存可见性
    UNION 和 UNION ALL 操作符
    设计模式(七)---- 模板方法模式
    设计模式(六)---- 策略模式
    设计模式(五)---- 原型模式
  • 原文地址:https://www.cnblogs.com/heiming/p/5837260.html
Copyright © 2020-2023  润新知