検索
連載

式言語から静的メソッドを呼び出すJavaTips 〜JSP/サーブレット編

Share
Tweet
LINE
Hatena

 JSP 2.0からは「Functions(関数)」という機能を利用することで、式言語(${〜})からJavaのpublic staticメソッド(静的メソッド)を呼び出すことが可能になりました。簡単な数値演算や文字列加工、その他の単純な情報の取得については、あらかじめFunctionsとしてアプリケーションに登録しておくことで、JSPページから冗長なスクリプティング要素を取り除くことができます。

 以下では具体的な例として、Functionsを利用してJSPページ上でシステム・プロパティを取得する方法について紹介します。

(1)静的メソッドを含むJavaクラスを定義する

 システム・プロパティを取得するためのsystemPropertyメソッドをpublic staticメソッドとして定義します。

リスト1 MyFunctions.java
package to.msn.wings.javatips;
 
public class MyFunctions {
  public static String systemProperty(String name) {
    return System.getProperty(name);
  }
}

(2)タグライブラリ・ディスクリプタを定義する

 静的メソッドをタグライブラリ・ディスクリプタに登録します。<function>要素は、JSP 2.0から新たに追加された要素で、タグライブラリ上でFunctionsを定義するためのものです。ここでは、to.msn.wings.javatips.MyFunctionsクラスのsystemPropertyメソッドをsystemProperty関数として登録しています。ここでは、とりあえず実際のメソッド名と関数名とを等しく設定していますが、もちろん、まったく異なる名前でも構いません。

リスト2 MyTag.tld
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
 version="2.0">
  <tlib-version>2.0</tlib-version>
  <function>
    <name>systemProperty</name>
    <function-class>to.msn.wings.javatips.MyFunctions</function-class>
    <function-signature>java.lang.String systemProperty(java.lang.String)</function-signature>
  </function>
</taglib>

(3)デプロイメント・ディスクリプタを定義する

 次に、デプロイメント・ディスクリプタに、リスト2のタグライブラリ・ディスクリプタを登録します。

リスト2 web.xml
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"
  version="2.4">
  <jsp-config>
    <taglib>
      <taglib-uri>http://www.wings.msn.to/mytag/</taglib-uri>
      <taglib-location>/WEB-INF/MyTag.tld</taglib-location>
    </taglib>
    <taglib>
  </jsp-config>
</web-app>

(4)JSPページを定義する

 (1)〜(3)で設定したFunctionsが正しく動作しているかどうかを確認するために、JSPページ上で実際にFunctionsを記述してみます。Functionsを使用するには、タグライブラリを使う場合と同様に@taglibディレクティヴでタグライブラリを有効化する必要があります。

リスト3 function.jsp
<%@ page contentType="text/html;charset=Windows-31J" %>
<%@ taglib prefix="my" uri="http://www.wings.msn.to/mytag/" %>
一時フォルダのパス:${my:systemProperty("java.io.tmpdir")}

 上記を実行して、以下のような結果が表示されれば成功です。

実行結果

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る