JSPラベル作動原理


最近はchronicalesのjavaプロジェクトをしています。自分のjava web関連の様々な技術が希薄であることを発見しました。そこで自分にリストを作って、できないもの、強化すべきものを全部書いて、もうちょっと見てください。そして学習の成果を少し記録します。本文は主にJSPラベルの仕事原理を説明します。まずJSPファイルを見ます。
 
    

 
 
 
  
You already have 52 stories, so we will be swapping stories.
Drag the story here to add to the 52 week list...
${model.storyTruncatedTitle}
 
上のような形をしたjspコードは2番目で、3行はtaglibタグを使用していくつかのタブライブラリを導入し、それぞれのプレフィックスをcとfnと定義した。それから、c:forEachなどのラベルを使って埋め込みスクリプトを書くことができます。でも、このラベルはどうやって働いていますか?Intellijでcommand+Bを使用してこれらのラベルの定義ファイルに来ました。tldファイルであることが分かりました。
 

 
    
   JSTL 1.1 core library
   JSTL core
   1.1
   c
   http://java.sun.com/jsp/jstl/core;
 
   
     
         Provides core validation features for JSTL tags.
     
     
         org.apache.taglibs.standard.tlv.JstlCoreTLV
     
   
 
   
     
      Simple conditional tag that establishes a context for
      mutually exclusive conditional operations, marked by
      :when and otherwise.
     
     choose
     org.apache.taglibs.standard.tag.common.core.ChooseTag
     JSP
   
 ................
 
ここには一つのラベルだけがくっついています。つまり、チョイスの定義には名前と説明以外に、それぞれのラベルが一つのjavaクラスに対応しています。これらのラベルの役割はこれらのクラスで定義されています。これらのjavaコードはどのように書かれていますか?このリンクを参照してください。自分でカスタマイズしたラベルライブラリを書いてもいいです。必要があれば。したがって、jarパッケージ+tldファイルはラベルライブラリを定義しています。
上記のjspファイルには下記のコードでtaglibを導入しました。
  
uriを通してtldファイルを特定しますが、このような一つのブラウザはoracleサイトに転向します。そして、ラベル情報が得られないurlはどうしてtldファイルを見つけてくれますか?答えはweb.xmlで構成されています。一般的にweb.xmlにtaglibの定義があります。以下のとおりです
 

   
     http://www.example.com/taglib
   
   
     /taglib.tld
 
   
 
これはこの意味のあるハードディスクのパス「/taglib.tld」に相当します。別名、つまり、urlに似ているuriです。そしてjspで引用できます。しかし、chronicalesのコードを見たら、web.xmlにはこのような定義がないことが分かりました。甚だ疑わしい。今日一日探してやっと答えを見つけました。上のtldファイルに戻ると、このような行が見られます。
 
  http://java.sun.com/jsp/jstl/core
このtldファイルはstandar.jarというファイルに含まれています。このjarカバンはウェブ/libの下に置いてあります。つまり、classpathの下に置いてあります。jarファイルを開けば、二つのフォルダがあります。org、META-INF。一つ目はもちろんpackage名です。二つ目のファイルには多くのtldファイルが含まれています。各tdにはuriというラベルがあります。uriを指定します。このように、jspファイルはclassipatの下のすべてのMETA-INFフォルダをスキャンして中のtldファイルを探して、uriが一致することに出会うならばこのファイルを指定します。それから実験をして、standar.jarを解圧して、中のuriラベルを変えて、例えばこの例について、http://java.sun.com/jsp/jstl/core せいにするhttp://java.sun.com/jsp/jstl/cor 。また元のファイルを包装して交換します。intellijに行ってjspファイルの中でtaglibを引用するコードが全部赤くなりました。つまり見つけられません。また、引用したuriを私のjarカバンの中で修正したのと同じです。http://java.sun.com/jsp/jstl/corOKです
もう二つの刺激的な実験をして、tldファイルを拷問して、META-INFと同じレベルのカタログとorgディレクトリの下に置いても、全部見つけられます。検索の範囲は本当に大きいです。だから、jspはすべてのクラスパスとそのすべてのサブディレクトリの下で検索すると結論しました。それなら、classipathの下にjarカバンがたくさんある時、スキャンが遅くなりますか?あるいはインデックスキャッシュの仕組みがありますよね。