zoukankan      html  css  js  c++  java
  • service()和doGet()和doPost()

    从前看李刚的书,书中许多都是直接用service()的。但其实这样是不好的。因为虽然一般情况下我们的doGet和doPost方法是一样的,但其实http能提交的方法有许多,不一定只有这两个,可以看tomcat中实现的service();

    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);
        }
    }
    可以看到这里通过反射机制识别的提交方式有许多,还有put、head很多方法。如果你重写了service方法,那么就不会调用其他的doGet和doPost以及PUT方法。这里的service是种代理模式,我们最好还是只写doGet和doPost方法。


  • 相关阅读:
    PHP数组函数
    sublime常用快捷键
    PHP中array_merge函数与array+array的区别
    【转】2017PHP程序员的进阶之路
    phpmyadmin上传sql文件大小限制问题解决方案
    二. python的os模块
    一. python的collections模块
    一. python进阶(文件的读写编码)
    七. python进阶(内置函数和高阶函数)
    六. python进阶(递归)
  • 原文地址:https://www.cnblogs.com/leejuen/p/5547478.html
Copyright © 2011-2022 走看看