zoukankan      html  css  js  c++  java
  • Servlet与servlet容器

    一、servlet

    ​ Servlet服务端小程序,纯Java语言,非脚本语言,比其他编程语言的服务器要快,我所了解的大多数是直接执行服务器脚本语言。Servlet是java语言,jsp虽然也是脚本语言,但是第一次执行后会产生对应的servlet对象,这也是javaweb相对其他编程语言高效的原因之一。

    javaweb存在三种Servlet

    1. Servlet
    2. GenericServlet
    3. HttpServlet

    后两种与Servlet分别是实现或继承关系。GenericServlet实现了Servlet接口,HttpServlet继承了GenericServlet。两者相比,主要的区别在于Service方法,GenericServlet的service方法是一个抽象方法,而HttpServlet实现了service方法,并对其进行了一些优化,通过不同的http请求方式,执行不同的方法。具体如下:

    //GenericServlet
        public abstract void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
    
    //HttpServlet
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String method = req.getMethod();
            long lastModified;
            if (method.equals("GET")) {
                lastModified = this.getLastModified(req);
                if (lastModified == -1L) {
                    this.doGet(req, resp);
                } else {
                    long ifModifiedSince;
                    try {
                        ifModifiedSince = req.getDateHeader("If-Modified-Since");
                    } catch (IllegalArgumentException var9) {
                        ifModifiedSince = -1L;
                    }
    
                    if (ifModifiedSince < lastModified / 1000L * 1000L) {
                        this.maybeSetLastModified(resp, lastModified);
                        this.doGet(req, resp);
                    } else {
                        resp.setStatus(304);
                    }
                }
            } else if (method.equals("HEAD")) {
                lastModified = this.getLastModified(req);
                this.maybeSetLastModified(resp, lastModified);
                this.doHead(req, resp);
            } else if (method.equals("POST")) {
                this.doPost(req, resp);
            } else if (method.equals("PUT")) {
                this.doPut(req, resp);
            } else if (method.equals("DELETE")) {
                this.doDelete(req, resp);
            } else if (method.equals("OPTIONS")) {
                this.doOptions(req, resp);
            } else if (method.equals("TRACE")) {
                this.doTrace(req, resp);
            } else {
                String errMsg = lStrings.getString("http.method_not_implemented");
                Object[] errArgs = new Object[]{method};
                errMsg = MessageFormat.format(errMsg, errArgs);
                resp.sendError(501, errMsg);
            }
    

    二、servlet容器

    ​ Servlet就是一个javaBean,而且是单例模式,交给Servlet容器运行,通过创建Servlet类将给Servlet容器去执行。tomcat是一个轻量级的服务器,实现了servlet/规范,他也是一个servlet容器。一个tomcat有一个或多个容器,且容器不共享。在webapp文件中,每一个文件夹,都是一个servlet容器,存放着不同的server,彼此之间contex域不共享。
    如有不足或错误,请指正!谢谢QAQ

  • 相关阅读:
    Java实现 LeetCode 56 合并区间
    JQuery实现对html结点的操作(创建,添加,删除)
    JQuery实现对html结点的操作(创建,添加,删除)
    JQuery实现对html结点的操作(创建,添加,删除)
    Java实现 LeetCode 55 跳跃游戏
    Java实现 LeetCode 55 跳跃游戏
    Java实现 LeetCode 55 跳跃游戏
    Java实现 LeetCode 54 螺旋矩阵
    Java实现 LeetCode 54 螺旋矩阵
    Java实现 LeetCode 54 螺旋矩阵
  • 原文地址:https://www.cnblogs.com/theStone/p/14226648.html
Copyright © 2011-2022 走看看