ClassLoader の getResource を使う

Webアプリで、クラスパス上での URL を求めてみる。

例えば、Wicketorg.apache.wicket.markup.html.WebPage に対して

URL url = WebPage.class.getClassLoader()
   .getResource(WebPage.class.getPackage().getName().replaceAll("\\.","/"));


add(new Label("url",url.getPath()));
add(new Label("protocol",url.getProtocol()));


Labelの出力として、HTML ファイルを以下のようにする。

<div wicket:id="url"></div>
<div wicket:id="protocol"></div>


すると、Eclipse ワークスペースを c:\a1\workspace
Webコンテンツ uran という場合、
Label の出力結果は以下のとおり、


file:/C:/a1/workspace/.metadata/.plugins/org.eclipse.wst.server.core
/tmp0/wtpwebapps/uran/WEB-INF/lib/wicket-1.4.12.jar!/org/apache/wicket/markup/html

jar


同様に、Webアプリ上の任意のクラス uran.vel.temp.Velhome というクラスがあった場合、

 URL url = Velhome.class.getClassLoader()
     .getResource(Velhome.class.getPackage().getName().replaceAll("\\.","/"));


とすれば、以下のように、getProtocol() の結果は、"file" である。


/C:/a1/workspace/.metadata/.plugins/org.eclipse.wst.server.core
/tmp0/wtpwebapps/nadia/WEB-INF/classes/uran/vel/temp/

file


これは、Velocity の file.resource.loader.path に使えるのではないだろうか?