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

  • 相关阅读:
    日志格式设计
    域!!!
    Sql Server 2000 中游标的使用示例
    微软下一代操作系统Windows 7仅占25MB空间!
    添加aspnet_isapi.dll的映射时“确定”按钮不可用的解决方案
    巧用Array对象来实现字符串的反转
    [有人帮我说明了原因,明天找人测试一下]紧急求助!!(请您帮看看我的一个在线考试系统的部分代码是否有问题啊?)
    给站长的一点建议
    用SQL SERVER中的的一函数实现表中数据记录随机排序
    使用内嵌资源
  • 原文地址:https://www.cnblogs.com/theStone/p/14226648.html
Copyright © 2011-2022 走看看