JSP 内容一目了然

JSP content in sightly

一个JSP文件,就像HTML文件一样,可以直接在url中请求。但是,JSP 文件会在运行时编译,而 HTML 文件不会(尽管它们的请求方式相同)。即使是没有动态内容的 JSP 文件也会在运行时编译,因为它们会在内部转换为 servlet。我们可以在 JSP 文件中包含一个 HTML 文件,但反过来不行。向用户提供资源涉及很多组件(ServletsRequestResponseWebserver 等)。

  1. 哪个组件通过查看扩展名来决定文件是否需要编译?

  2. Sightly 是一个 HTML 文件,可以在其主体中包含 JSP 代码,理想情况下不应编译但会编译。怎么样?

不完全确定我理解你的问题是什么,但这是我的尝试

  1. 如果没有为路径定义的 Servlet,那么 Apache Sling 将根据 http 请求之类的东西找出使用哪个 "scripting engine"方法和扩展名(.jsp 与 .html)。 See here。之后由引擎(例如 JSP 引擎或 Sightly 引擎)决定如何处理请求。

  2. 如果您将 JSP 代码写入一个可见的文件中,它只会在响应中打印出来。我已经在本地主机上使用 Sightly Repl 对此进行了测试。

如此美观的文件 foo.html 包含内容

<c:set var="foo" value="bar"/>
<div>${foo}</div>

结果如下所示。

<c:set var="foo" value="bar"/>
<div></div>

您可以看到,Sightly 不会删除或评估 jsp 标签。 ${foo} 会消失,因为范围内没有名为 foo 的 Sightly 变量。


另一个注意事项:您实际上可以包含来自 Sightly 的 JSP 文件。

这是来自 Adobe's docs 的示例:

<section data-sly-include="path/to/template.jsp"></section>

Sightly 只能作为组件的一部分包含在内。尽管 sightly 是 HTML5(以 .html 结尾),但 sightly 是由 Sightly engine 编译的。 所以有可能有一个包含 JSP 文件的 sightly 文件。