プロが教える店舗&オフィスのセキュリティ対策術

web.xmlでtaglib-locationを設定する理由

質問させてください。
strutsでwebプログラミングの勉強をしています。
タグライブラリを使用する際に、web.xmlに<taglib-location>なるものを以下のように記載する必要があることを学びました。

<taglib>
<taglib-uri>/tags/struts-html</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>

これを設定する理由はなんでしょうか?
素人考えでは、シンプルにtaglib-uriに記載しているところにライブラリファイルを置けばよい気がします。

セキュリティ関係の理由があるのでしょうか?(確か、WEB-INF以下のディレクトリは利用者から見れない設定だったと記憶しています)

初歩的な質問の気もしますが、どなたか教えていただけると幸いです。
以上よろしくお願いいたします。

A 回答 (3件)

タグライブラリを使用するためのuriの指定方法は3つあります。


今回のようにweb.xmlに<taglib>を使い定義する方法を用いた場合ですが、<taglib-uri>に指定するのは実際の物理パスではなく、論理的な識別子です。
そして、<taglib-location>に書くのは<taglib-uri>に指定したuriにマッピングするTLDファイルの物理パスです。

つまり/tags/struts-htmlというuriを指定すると<taglib-location>に指定したtldファイルを参照するという仕組みになっています。

<taglib-uri>に定義した任意のURIを指定すれば<taglib-location>にあるtldファイルを参照してくれるというわけです。

<taglib-uri>には任意のURIを指定できるので好きなようにURIを設定できます。
ただし、一般的にはhttp://ドメイン名/~のようにURL形式で定義するのが推奨されているようです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
よくわかりました。

お礼日時:2010/06/24 11:54

「web.xmlは、」 → 「タグディレクティブは、」


に訂正
    • good
    • 0

>これを設定する理由はなんでしょうか?



externalizing resources と呼ばれるものです。
一般的には、separation of concerns(日本語訳は「関心の分離」)によって、リコンパイルせずに後で内部情報を変更できるようにすることが目的ですが(ローカライゼーションとか)、このケースではセキュリティ確保という面もあります。

なお今のバージョンのStruts1(ver1.3.x)では、struts-taglib.jar をパス内のどこかにコピーしてやれば、web.xmlは、

<%@ taglib
uri="http://struts.apache.org/tags-html"
prefix="html" %>

でOKです。(warファイルにする時には/WEB-INF下にコピーする必要がありますが)
http://struts.apache.org/1.3.10/userGuide/config …
5.4.3.1 Configure the Struts JSP Tag Libraries (Servlet 2.3/2.4)
    • good
    • 0
この回答へのお礼

ありがとうございます。
勉強になりました。

お礼日時:2010/06/24 11:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!