当前位置: 首页 > 网络应用技术

我不知道这些servlet规格,容器和敢说它们是Java程序员吗?

时间:2023-03-08 22:12:21 网络应用技术

  最早使用Web动态内容,最早使用CGI(通用网关接口,通用运动接口)技术,根据用户输入的请求动态传输HTML数据。CGI不是开发语言,但只能使用程序为其编写以实现Web服务器的协议。它可用于实现诸如E -Commerce网站,搜索引擎处理和在线注册之类的功能。当用户在网页中提交输入数据时,Web浏览器将发送用户输入的数据到Web服务器。在服务器上,CGI程序格式化了输入数据,将此信息发送到在数据库或服务器上运行的其他程序,然后将结果返回到Web Server。服务器将结果发送到Web浏览器。这些结果有时会使用新的网页显示,有时在当前网页中显示。

  编写自定义CGI脚本需要很多编程技能。大多数CGI脚本都是由Perl,Java,C和C ++等语言编写的。设计师需要控制服务器,包括所需的背景程序(例如数据库)。这些背景程序提供了来自用户的结果或消息。即使使用基于服务器的网站设计工具,编写CGI程序需要程序员具有一定的经验。

  因为对动态内容的每个请求都需要启动新的CGI程序,因此它将增加Web服务器上的负担。因此,CGI的很大缺陷是很容易影响Web服务器的运行速度。

  由于需要单独编写CGI程序和HTML文档并单独编写,因此将两者集成在一起并不容易。因此,CGI程序的维护和写作更加困难。要解决此问题,一些制造商已经启动了脚本语言来增强Web开发功能。

  脚本语言是一种可以嵌入HTML文档中的文本型编程语言。脚本语言分别分别为两种类型:客户端和服务器端,分别在Web浏览器和Web服务器中运行。

  客户端脚本语言主要包括JavaScript,JScript(Microsoft的JavaScript版本)和VBScript。当Web浏览器需要浏览由客户端脚本语言编写的网页时,Web服务器将客户脚本传输到网络浏览器,将其发送到Web浏览器客户脚本可以减轻Web服务器上的处理负担,并提高网页的响应速度。

  服务器脚本语言主要包括ASP,JSP,PHP和LIVEWIRE。当Web浏览器需要浏览服务器脚本语言编写的网页时,Web服务器运行服务器 - 端脚本 - 在网页中端口,并传输。由脚本语言和网页的HTML部分生成的新网页。网络浏览器生成的新网页显示了新的网页。服务器脚本可以减少不同Web浏览器的操作差异,并改善网页的实用性。

  在此期间,Java的Servlet模型诞生了。

  基于Java技术的Web组件,用于生成动态内容并由容器管理。类似于其他Java技术组件,Servlet是一个与该平台无关的平台,并且由Java Web服务器执行。

  运行时环境通常由Servlet容器提供。Servlet容器,有时也称为Servlet Engine作为Web服务器或应用程序服务器的一部分。通过请求和响应对话,我们提供了与Servlet交互的能力。服务器及其生命周期。

  请求后,您需要调用服务器程序处理请求。

  HTTP服务器如何知道要拨打哪个处理器?

  最简单的事情是在HTTP服务器代码上写一堆IF/else:如果需要调整X类M1方法的请求,如果B请求,则为o类的M2方法。该设计的致命点是HTTP服务器代码与业务逻辑相结合。如果添加新的业务方法,则必须更改HTTP服务器代码。面向接口的编程被认为是解决耦合问题的银炸弹。我们可以定义一个接口。每个商务舱都实现界面。是的,他是servlet界面。服务接口的商务舱也称为服务。

  解决业务逻辑和HTTP服务器的耦合问题,存在一个问题:HTTP服务器如何知道特定请求:

  显然,HTTP服务器不适合此,否则必须与业务逻辑相结合。

  结果,servlet容器诞生了。

  用于加载和管理业务类别。

  HTTP服务器不会直接与业务交互,而是将请求首先交给Servlet容器。Servlet容器将将请求转发到特定服务。如果服务器未创建,则加载和实例化,然后调用服务的接口方法。

  因此,Servlet接口实际上是Servlet容器和特定业务类别之间的接口:

  左:HTTP服务器直接调用特定的商务类,但它是耦合的。因此,Servlet接口和Servlet容器已经意识到HTTP服务器和商务类的解耦。

  Servlet接口和Servlet容器的整个规格集称为Servlet规范。Tomcat按照Servlet规范实现Servlet容器,并且具有HTTP Server函数。如果您实现新业务,您只需要实现一个实现一个服务并将其注册到Tomcat(Servlet容器),其余的将由Tomcat提供帮助。

  servlet接口定义以下五种方法:

  特定的商务舱在服务方法中实现处理逻辑。这两个类别封装在通信协议上:

  HTTP协议中的请求和响应对应

  相关的生命周期方法:

  ServiceConfig的作用是封装Servlet的初始化参数。您可以将参数配置为服务并通过程序中的getservletConfig获取这些参数。

  有一些界面通常抽象的类。抽象类用于实现接口和包装通用的逻辑。因此,servlet规范提供了一个通用的摘要类,可以通过扩展它来扩展该类别以实现servlet。尽管servlet规范不在乎通信协议是什么,但大多数servlet在HTTP环境中进行了处理。因此,Servet规范还提供了HTTPServlet来继承grenicservlet并添加HTTP功能。这样,我们通过继承HTTPServlet类实现自己的服务器,只需要重写两种方法:Doget和Dopost。

  当客户要求资源

  Servlet容器实例化并致电服务,服务如何注册到Servlet容器?

  根据servlet规范,Web应用程序具有一定的目录结构,放置

  Servlet容器可以通过阅读配置文件找到并加载Servlet。Web应用程序的一般目录结构:

  定义一系列与其servlet容器进行通信的方法。如果MIME类型,调度请求或为文件编写日志文件。EAFEJVM Web应用程序具有上下文。(Web应用程序是服务器URL名称空间中安装的特定子集(例如)并可以通过。战争文件安装的服务和内容集合。

  在分布式系统下,每个计算机节点都有上下文。在这种情况下,上下文不能用作共享全局信息的位置(因为该信息不是真正的全局)。应该使用外部资源(例如数据库)。ServletContext。对象包含在ServletConfig对象中。当服务器初始化时,Web服务器提供对象。

  Servlet规范定义了ServletContext Interface的Web应用程序。例如,SpringBoot应用程序只有ServletContext。不要与Spring的ApplicationContext交谈,因为在应用程序中,您可以拥有多个Spring ApplicationContext。

  部署Web应用程序后,Servlet容器在启动时将加载Web应用程序,并为每个Web应用程序创建一个全局上下文环境ServletContext对象,以为背后的Spring容器提供主机环境。

  您可以将服务视为全局对象。Web应用程序可能具有多个服务。这些servlet可以通过全球servicecontext共享数据:

  ServletContext持有所有Servlet实例,因此它也可以实现Servlet请求的转发。

  Tomcat和Jetty在启动过程中触发了容器初始化事件。Spring的ContextLoaderListener将监视此事件。它的上下文化方法将被调用。在这种方法中,弹簧初始化了全局弹簧根容器。这是Spring IOC容器。完成IOC容器初始化后,Spring将其存储到ServiceContext以易于获取。

  ServletContext用于共享数据。例如,SpringMVC需要从ServletContext获取一个全局弹簧容器,并将其设置为自己的父容器。

  Tomcat&Jetty还将在启动过程中扫描servlet。Web应用程序中有多个服务。以SpringMVC中的DispatcherServlet为例。该服务实际上是用于重新播放,匹配和处理的标准前端控制器。服务请求。

  servlet通常会延迟加载。当达到第一个请求时,Tomcat&Jetty发现尚未实例化DispatcherServlet,因此请致电DispatcherServ的Init方法。DispatcherServlet在初始化时将建立自己的容器,称为SpringMVC容器以保持SpringGMVC相关的bean。在同一时间,Spring MVC还将通过ServiceContext获取Spring Root容器,并将Spring Root容器设置为SpringMVC的父母容器容器。请注意,Spring MVC容器可以访问父容器中的bean,但是父容器无法访问次大陆的bean。换句话说,弹簧根容器无法在SpringMVC容器中访问Bean。可以在控制器中访问服务对象,但是无法在服务中访问控制器对象。

  Tomcat/Jetty开始,对于每个WebApp,按顺序初始化:

  1.对于每个WebApp,都有一个WebApp ClassLoader和ServletContext

  2.当ServertContext启动时,扫描Web.xml配置文件,并找到过滤器,侦听器和servlet配置

  3.如果侦听器配备了Spring的ContextLoaderListener:

  4.如果Servlet配备了SpringMVC DispatcherServlet

  服务的默认单打模式,Spring的BEAN默认值也是单打模式,Spring MVC如何处理并发请求?在初始化之后,DispatcherServ中的成员变量不会更改,因此它是安全的线程。如何保证“可见”?由tomcat等网络容器保证。调用int方法时,tomcat使用同步。

  如果至少没有一个初始化的实例,则将其加载并初始化服务的实例。

  实施描述:类名称是服务org.apache.catalina的开始

  引入servlet规范后,不必关心套筒网络通信,http协议或您的业务类别的实例化和称呼,因为它们是由servlet规范标准化的,我们只需要关心如何实现业务逻辑。

  查看它很方便,但是如果规范无法满足您的性格需求,则不会使用它。因此,设计规范或中间件必须完全考虑可扩展性。Servlet规范提供了两种扩展机制:过滤器和侦听器。

  过滤器,此接口允许您对请求和响应进行一些统一的自定义。Filter基于该过程。它是过程的一部分,是基于过程行为的。例如:

  滤波器是Servlet的重要标准之一:

  Web应用程序部署完成后,Servlet容器需要实例化过滤器并将文件链接到过滤器链中。当请求进来时,获取第一个过滤器并调用Dofilter方法。Dofilter方法负责调用此过滤器链中的下一个过滤器。

  听众,听众是基于状态的。任何行为都会改变相同的状态,并且触发事件是一致的。当Web应用于Servlet容器时,Servlet容器内将继续发生各种事件,例如启动和停止Web应用程序以及用户请求。提供一些默认显示器来监视这些事件。事件发生时,servlet容器将负责调用侦听器。当然,您可以定义侦听器以监视您感兴趣的事件,并在web.xml.xml.xml中配置监视器。例如,Spring实现了自己的侦听器和聆听ServletContext的启动事件,以便在启动Servlet容器时创建和初始化全局弹簧容器。

  为什么服务方法同时将请求和响应视为输入参数,而不是输入参数仅是请求,而响应被放置在返回值中?

  方便在责任链模式下传输层。

  为什么在Springboot项目中没有Web.xml?SpringBoot以嵌入方式启动Tomcat。对于Springboot,Tomcat只是一个jar package.springboot将服务容器直接通过Servlet Facteracter通过Servlet 3.0规格或API容器添加到Servlet容器没有web.xml。

  用于管理生命周期。

  管理SpringMVC豆的生命周期。

  通常使用SpringMVC容器,用于管理春豆的生命周期。DispatcherServlet是SpringMVC容器中的服务接口和SpringMVC容器的核心类别。

  Spring容器主要用于某些需要在整个Web应用程序中共享的组件,例如DAO,数据库的连接范围等。SpringMVC容器主要用于与Servlet相关的某些组件,例如控制器,ViewResovler,Ett。在这一点上,弹簧容器之间的关系很明显。

  弹簧和SpringMVC有自己的IOC容器或上下文,为什么它们分为两个容器?

  隔离管理豆具有自己的职责。SpringMVC容器直接管理与DispatcherServ相关的Bean,该豆类是控制器,ViewResolver等,并且在Init of DispacherServlet中创建了SpringMVC容器。Spring容器管理其他BEAN,例如服务和DAO,例如服务和Dao。

  SpringMVC容器是弹簧容器的子座。这样被称为父亲的关系是什么意思?当您通过次大陆获得特定的豆子时,子朝园首先在您管理的bean中找到此bean。在父容器中找到。但是,父容器无法转到子 - 续 - 范围以找到某个bean。

  实际上,此例程与JVM类加载程序有点相似。不同类型的装载机也用于隔离。LET的负载。

  通过父亲和儿子之间的关系,SpringMVC容器可以从父亲弹簧容器中取走豆子,因为弹簧容器管理公共豆。当然,可以管理相同的容器,并完成Springboot。

  Spring和SpringMVC通过配置文件明确指定了其各自管理的Bean。

  servlet容器与弹簧容器有什么关系?

  有人说,弹簧容器是servlet容器的子座,但是这个servlet容器是由tomcat实现的容器,还是由码头实施的容器?servlet容器。可以说,弹簧容器取决于servlet容器,弹簧容器的实现遵循Servlet规范。

  弹簧容器只是ServletContext的属性。启动Web容器时,它是通过ServletContextListener机制构建的。Springboot中只有一个弹簧上下文:

  初始化servlet容器后,春季聆听。弹簧容器是在servlet容器中创建的,访问到达以及初始化dispatcher service.controller相关的bean和spring dewine bean时创建的springmvc容器。

  参考