"programmatic server-side includes" 是什么?

What are "programmatic server-side includes"?

来自the Java EE tutorial

If the resource is static, the include method enables programmatic server-side includes.

If the resource is a web component, the effect of the method is to send the request to the included web component, execute the web component, and then include the result of the execution in the response from the containing servlet.

我不太清楚 "programmatic server-side includes" 是什么意思,以及它们与 Web 组件案例有何不同。

我的意思是,无论我包含什么资源,我都会将一个 request/response 对象元组传递给它并得到一些我可能会或可能不会与客户端通信的副作用,对吗?

有人可以详细说明一下吗?

您省略了引文前的标题和正文。这些为您询问的评论提供了重要的背景信息:

Including Other Resources in the Response

It is often useful to include another web resource, such as banner content or copyright information, in the response returned from a web component. To include another resource, invoke the include method of a RequestDispatcher object:

include(request, response);

因此,当评论继续

If the resource is static, the include method enables programmatic server-side includes.

它们是描述前面代码片段的效果,而不是引入一些新概念。 中的 "programmatic server-side include" 是 调用与静态资源关联的 RequestDispatcher()include() 方法。它具有包含与调度程序关联的资源的效果,在正在准备的响应中内联。因此,这是 "server-side" 因为它全部由服务器完成,对客户端透明,而不是客户端必须对包含的资源进行单独请求。*

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

I mean, regardless of the resource I include, I pass a request/response object tuple to it and get some side-effects that I may or may not communicate to the client, right?

将其视为将请求和响应 object 传递给 RequestDispatcher 更为准确。如果调度程序与静态资源关联,不,请求和响应 object 是 而不是 呈现给该资源(本身),因为它没有机制接收或操纵它们。相反,运行代码的 servlet 引擎会在它认为合适时操纵响应 object。

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


*有关术语 "server-side includes" 部分的历史和灵感的更多信息,请参阅 Wikipedia.