我们知道,无论何时发出servlet请求,servlet容器都会首先检查web.xml文件中的url和相应的servlet类。这很好,但之后出现了混乱。假设我正在使用load-on-startup属性。因此,servlet应该在第一次调用之前就绪。在这种情况下,容器需要servlet Config对象来使servlet工作。但是再次加载启动和servlet的init-parameter在web.xml文件中定义。那么当确切的容器使用web.xml时?(当使用load-on-startup属性时,容器显然不能等待第一次调用,容器必须再次读取web.xml文件以了解该属性是否与任何servlet一起使用。)
如果有人能清除我的困惑会更好。如果可能,请提供一些可靠的链接。
答案 0 :(得分:3)
web.xml
。为了便于理解,您可以假设容器只是您的Web服务器。虽然Web服务器不仅仅是一个Web容器。
Web服务器读取web.xml
,并加载上下文配置,在启动服务器上加载等。 web.xml
是您通过其向容器/服务器通知您的应用程序的文件。您的Web应用程序位于Web服务器内,服务器拦截所有传入的请求,根据上下文决定应该将请求转发到哪个应用程序。
答案 1 :(得分:3)
加载和实例化:
servlet容器负责加载和实例化servlet。加载和实例化可以在容器启动时发生,也可以延迟,直到容器确定需要servlet来处理请求。
当servlet引擎启动时,必须由servlet容器定位所需的servlet类。 servlet容器使用普通的Java类加载工具加载servlet类。加载可以来自本地文件系统,远程文件系统或其他网络服务。并且当在web.xml
中声明servlet时,容器在容器启动期间加载并读取该文件。
<强>初始化:强>
实例化servlet对象后,容器必须先初始化servlet
它可以处理来自客户端的请求。容器通过使用实现ServletConfig
接口的唯一(每个servlet声明)对象调用Servlet接口的init方法来初始化servlet实例。