gpt4 book ai didi

java - JSTL XML 文件何时实际读取?

转载 作者:行者123 更新时间:2023-11-30 04:51:58 25 4
gpt4 key购买 nike

我在这里阅读了有关 JSTL 标记的信息:

https://stackoverflow.com/tags/jstl/info

还有一件事我真的不明白......

当您引用某些文件时,如下所示:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

或这里:

<html xmlns:c="http://java.sun.com/jsp/jstl/core">

这个文件什么时候被真正读取?该文件实际上是从网络读取的吗?如果该文件实际上是从网络读取的,那么在完全没有外部网络访问(没有互联网)的高度安全的环境中如何进行开发/测试?

这个文件(这些文件)可以读取一次并保存在本地然后在本地引用吗?

如果我尝试打开该网页或执行 wget http://java.sun.com/jsp/jstl/core ,我显然得到了一些应该由人类而不是网络应用程序服务器阅读的内容。

最佳答案

当 servlet 容器启动时,它会扫描整个类路径以查找任何 .tld文件,包括 /META-INF所有部署的 JAR 文件的文件夹。 JSTL JAR 文件包含 c.tld 等。文件的开头如下:

<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">

<description>JSTL 1.1 core library</description>
<display-name>JSTL core</display-name>
<tlib-version>1.1</tlib-version>
<short-name>c</short-name>
<uri>http://java.sun.com/jsp/jstl/core</uri>

...

注意 <uri>入口。这是在 servletcontainer 启动期间解析并记住的。 .tld文件为每个标签声明了标签处理程序类,该类代表执行“幕后”所有工作的具体 Java 代码。例如,<c:out>声明如下:

 <tag>
<description>
Like &lt;%= ... &gt;, but for expressions.
</description>
<name>out</name>
<tag-class>org.apache.taglibs.standard.tag.rt.core.OutTag</tag-class>
<body-content>JSP</body-content>
...

现在,当 JSP 文件使用此 URI 声明 taglib 时,则 .tld相关文件将用于定位标签类并执行它们。

因此,taglib URI 只是一个虚拟地址,仅存在于 servlet 容器的上下文中,而不存在于外部,即使某些 taglib 碰巧在该 URI 后面有一个真实的 HTTP 站点。 URI 应该只是一个唯一的标识符。它不一定需要是 http://something 。它可以是一切,但网站地址是一个相对强大的唯一标识符。这几乎 100% 保证没有其他 taglib 具有相同的 URI。顺便说一句,您也可以在包名称中看到这种独特性。

关于java - JSTL XML 文件何时实际读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9652100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com