什么是";程序化服务器端包含"



来自Java EE教程:

如果资源是静态的,include方法将启用编程的服务器端include。

如果资源是一个web组件,则该方法的效果是将请求发送到包含的web组件,执行该web组件,然后将执行结果包含在来自包含servlet的响应中。

我不太确定他们所说的"编程服务器端包含"是什么意思,以及这些内容与web组件的情况有何不同。

我的意思是,无论我包括什么资源,我都会向它传递一个请求/响应对象元组,并得到一些副作用,我可能会也可能不会与客户端通信,对吧?

有人能详细说明一下吗?

您已经省略了引号前面的标题和文本。这些为您询问的评论提供了重要的背景:

在响应中包括其他资源

包含另一个web资源(例如banner)通常很有用从web返回的响应中的内容或版权信息组成部分要包含另一个资源,请调用RequestDispatcher对象:

include(request, response);

因此,当注释继续使用时

如果资源是静态的,include方法将启用编程的服务器端include。

它们表征前一代码片段的效果,而不是引入一些新概念。此上下文中的"程序化服务器端包含"是调用与静态资源关联的RequestDispatcher()include()方法。它的作用是在准备的响应中内联包含与调度程序关联的资源。因此,这是"服务器端",因为这一切都是由服务器完成的,对客户端透明,而不是客户端必须对所包含的资源发出单独的请求*

静态组件和web组件之间的区别在于与调用include()方法的RequestDispatcher相关联的资源——,即要包括什么资源——而不是其代码包含方法调用的组件。静态资源正是可以通过与web组件无关的URL标识的资源。通常这意味着它对应于一个文件。文件内容可以是任何内容,但常见的用途是包含HTML片段,例如许多网页共享的页眉或页脚。

我的意思是,无论我包括什么资源,我都会传递请求/响应对象元组,并获得一些副作用可能会也可能不会与客户沟通,对吧?

将其视为向RequestDispatcher传递请求和响应对象更准确。如果调度程序与静态资源相关联,则不,请求和响应对象不会呈现给该资源(本身),因为它没有接收或操作它们的机制。相反,运行代码的servlet引擎会根据自己的决定操纵响应对象。

如果目标资源是一个web组件,是的,它将能够从所提供的请求中读取数据,操纵请求及其上下文,并操纵所提供的响应,所有这些都由它自己决定。通常,它无法将这种情况与直接访问它的情况区分开来。但是,调用include()的组件最多只能有限地控制通过该机制传递给客户端的内容。


* 有关该术语"服务器端包含"部分的历史和灵感的更多信息,请参阅维基百科

最新更新