• 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

  • 相关阅读:
    csuoj 1355: 地雷清除计划
    Task 6.4 冲刺Two之站立会议3
    Task 10 统计从1到某个整数之间出现的1的次数
    Task 6.3 冲刺Two之站立会议2
    Task 9 从用户界面和体验分析“360极速浏览器”
    Task 6.3 冲刺Two之站立会议1
    《程序员开发心理学》阅读笔记一
    Task 6.2冲刺会议十 /2015-5-23
    Task 6.2冲刺会议九 /2015-5-22
    Task 6.2冲刺会议八 /2015-5-21
  • 原文地址:https://www.cnblogs.com/theStone/p/14226648.html
Copyright © 2020-2023  润新知