2012-03-11 6 views
1

は、私がここにJSTLタグに関する情報読み:JSTL XMLファイルは実際にいつ読み込まれますか?

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"> 

このファイルは実際にいつ読み込まれますか?このファイルはネットワークから実際に読み込まれていますか?そのファイルが実際にネットワークから読み取られた場合、外部ネットワークへのアクセスがまったくない(インターネットがない)高度にセキュリティが確保された環境で、どのように開発/テストが行​​われますか?

このファイル(これらのファイル)を一度読んでローカルに保存してからローカルで参照できますか?私はそのWebページを開くかwgetのhttp://java.sun.com/jsp/jstl/coreをしようとした場合

、私は明らかに人間によってではなく、Webアプリケーションサーバによって読まれることを意図されたものを取得しています。

答えて

2

servletcontainerが起動すると、すべてのデプロイされたJARファイルの/META-INFフォルダを含む.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>エントリ:JSTLのJARファイルは、とりわけ、以下のように起動するc.tldファイルを持っています。これは、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とタグライブラリを宣言したときに、その後、問題の.tldファイルは、タグのクラスを見つけて、それを実行するために使用されます。

したがって、taglib URIは、実際にはそのURIの背後にある実際のHTTPサイトを持つtaglibもありますが、サーブレットコンテナのコンテキストにのみ存在し、外部には存在しない仮想アドレスです。 URIはただ一意の識別子であると考えられています。必ずしもhttp://somethingである必要はありません。すべてになりうるが、ウェブサイトのアドレスは比較的堅牢な固有の識別子である。これは他のtaglibが同じURIを持たないことをほぼ100%保証します。パッケージ名の中で、このユニークさが戻ってくるのが分かります。

+0

+1 and accepted ... * "したがって、taglib URIはサーブレットコンテナのコンテキスト内にのみ存在し、" * ...ああ、外ではない仮想アドレスです。しかし、「http://」で始まっています。(私は何とかこのことを非常に混乱していると思います.- /私はパッケージ名について知っていますが、少なくともプロトコルのように見えません。) –

+1

URIではなくURLです。その違いについてはWikipediaを参照してください。 – BalusC

+0

ああ、確かに...そして、それ自体が人々の間での混乱の主な**ソースです。 URI/URLの区別自体は、SNAFUの主要な概念です。ここではURIと同じように見えるURIがあります。URIは場所によってリソースを識別することはできますが、必須ではないため、非常に混乱します。私は悲しげに、私たちが不完全で、貧弱な考え方で作られた "標準"と "スペック"で作られた非常に混乱した世界に住んでいると思います。ありがたいことに、いくつかの規律(工学や医学のような)はコンピューティングよりも高い基準を持っています。 ) –

関連する問題