1.概述在这篇简短的文章中,我们将从概念上了解什么是servlet和servlet容器,以及它们是如何工作的。此外,请在请求、响应、会话对象、共享变量和多线程的上下文中查看它们。2.Servlets及其容器servlets是Web开发常用的JEE组件。它们基本上是在容器边界内运行的Java程序。他们共同负责接受请求、处理请求并返回响应。要使用它们,容器首先需要注册servlet,无论是基于JEE还是基于Spring的容器,都可以在启动时接收它们。一开始,容器通过调用init()方法来实例化servlet。一旦初始化完成,servlet就准备好接受传入的请求。容器然后将这些请求定向到servlet的服务方法进行处理。之后,它进一步将请求委托给适当的方法,例如doGet()或doPost(),具体取决于HTTP请求类型。使用destroy(),容器会销毁servlet,不再接受传入的请求。我们将这个init-service-destroy周期称为servlet生命周期。现在我们从容器的角度来看。例如,当ApacheTomcat或Jetty启动时,它会创建一个ServletContext对象。ServletContext的任务是充当服务器或容器的内存,并记住与Web应用程序关联的所有servlet和过滤器。和侦听器,例如它们的web.xml文件或等效的注释。ServletContext一直存在,直到容器停止。无论如何,servlet的加载启动参数起着重要的作用。如果这个参数的值大于零,它只会在启动时由服务器初始化。如果未指定此参数,则在第一次请求命中时调用servlet的init()。3.请求、响应和会话在上一节中,我们讨论了发送请求和接收响应,它们基本上是任何CS应用程序的基础。现在,让我们从servlet的角度详细了解它们。在这种情况下,请求将由HttpServletRequest表示,响应将由HttpServletResponse表示。每当浏览器或curl命令等发送请求时,容器都会创建一个新的HttpServletRequest和HttpServletResponse对象。然后将这些新对象传递给servlet的服务方法。根据HttpServletRequest的方法属性,该方法确定应调用哪个doXXX方法。除了方法信息外,请求对象还携带其他信息,如头部、参数和主体。类似地,HttpServletResponse对象也带有标头、参数和正文——我们可以在servlet的doXXX方法中设置它们。这些物体的生命是短暂的。当客户端获得响应时,服务器将请求和响应对象标记为垃圾收集。那么我们如何维护后续客户端请求或连接之间的状态呢?答案是HttpSession。这个想法是将这些对象绑定到用户会话,以便与特定用户相关的信息可以跨多个请求持久保存。这通常是通过使用cookie的概念来完成的,使用[JSESSIONID]作为给定会话的唯一标识符。我们可以在web.xml中指定会话超时时间。
