• 技术文章 >Java >Java基础

    Servlet 生命周期的4个阶段

    GuanhuiGuanhui2020-06-17 11:14:46原创1999

    Servlet 生命周期的4个阶段

    1、通过调用“init()”方法进行初始化;

    init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。

      @Override
        public void init(ServletConfig config) throws ServletException {
            this.config = config;
            this.init();
        }

    2、调用“service()”方法来处理客户端的请求;

    service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。

     protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
     
            String method = req.getMethod();
     
            if (method.equals(METHOD_GET)) {
                long lastModified = getLastModified(req);
                if (lastModified == -1) {
                    // servlet doesn't support if-modified-since, no reason
                    // to go through further expensive logic
                    doGet(req, resp);
                } else {
                    long ifModifiedSince;
                    try {
                        ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
                    } catch (IllegalArgumentException iae) {
                        // Invalid date header - proceed as if none was set
                        ifModifiedSince = -1;
                    }
                    if (ifModifiedSince < (lastModified / 1000 * 1000)) {
                        // If the servlet mod time is later, call doGet()
                        // Round down to the nearest second for a proper compare
                        // A ifModifiedSince of -1 will always be less
                        maybeSetLastModified(resp, lastModified);
                        doGet(req, resp);
                    } else {
                        resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
                    }
                }
     
            } else if (method.equals(METHOD_HEAD)) {
                long lastModified = getLastModified(req);
                maybeSetLastModified(resp, lastModified);
                doHead(req, resp);
     
            } else if (method.equals(METHOD_POST)) {
                doPost(req, resp);
     
            } else if (method.equals(METHOD_PUT)) {
                doPut(req, resp);
     
            } else if (method.equals(METHOD_DELETE)) {
                doDelete(req, resp);
     
            } else if (method.equals(METHOD_OPTIONS)) {
                doOptions(req,resp);
     
            } else if (method.equals(METHOD_TRACE)) {
                doTrace(req,resp);
     
            } else {
                //
                // Note that this means NO servlet supports whatever
                // method was requested, anywhere on this server.
                //
     
                String errMsg = lStrings.getString("http.method_not_implemented");
                Object[] errArgs = new Object[1];
                errArgs[0] = method;
                errMsg = MessageFormat.format(errMsg, errArgs);
     
                resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);
            }
        }

    3、通过调用“destroy()”方法终止;

    destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

    @Override
        public void destroy() {
            // NOOP by default
        }

    5、由JVM的垃圾回收器进行垃圾回收的。

    推荐教程:《Java教程

    以上就是Servlet 生命周期的4个阶段的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:java
    上一篇:public static void main什么意思 下一篇:java servlet作用是什么?
    大前端线上培训班

    相关文章推荐

    • JAVA中的事务处理• 彻底弄懂JavaScript执行机制• JavaScript复杂判断的优雅写法• 直击JavaScript全栈教程• java中tostring方法怎么用

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网