うぬはまだEL(式言語)の本当の恐ろしさをしらぬ
今回はEL(式言語)です。
JavaEE 6のELのバージョンが文献によってばらばらなのが気になります。1.2というのもあれば2.2というのもあります。どっちが正しいのでしょうか。sunのサイトでも2.2とかいてあります。でも、JavaEE 5からはJSPから独立したコンポーネントになりました。おかげで様々な部分で使うことが可能です。
そんなELですが、JavaEE 6でまたまたパワーアップしました。
さっそく今回もパッケージやインポートの省略すらせずコードのすべてをお見せしましょう。
まず適当なクラスをつくります。メソッドが3つあります。
package bean; public class HogeBean { public int add(int a,int b){ return a + b; } public String hello(String name){ return "はろー "+name+" さん"; } public static String upper(String s){ return s.toUpperCase(); } }
続いてサーブレット。requestスコープに先ほどのクラスをつっこんでフォワードしただけです。
package servlet; import bean.HogeBean; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(urlPatterns="/new") public class NewServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("hoge", new HogeBean()); request.getRequestDispatcher("index.jsp").forward(request, response); } }
最後にJSP。
<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>1 + 2 = ${hoge.add(1 , 2)}</h1> <h1>${hoge.hello('徳田新之助')}</h1> <h1>${hoge.upper('Abcdefg')}</h1> </body> </html>
実行すると以下の表示がされます。
1 + 2 = 3
はろー 徳田新之助 さん
ABCDEFG
ええ、つまり、インスタンスのメソッドが実行できるようになったのです。staticも大丈夫なようです。
ちなみに徳田新之助はおいらのハンドル名です。省略されてしんさんになったのです。初期の暴れん坊将軍最高です。
さらにこんなことをしてみましょう。
<h1>${hoge.hello(hoge.upper('Abcdefg'))}</h1>
こういう表示がされます。
はろー ABCDEFG さん
ネストもおっけーなんですね。よくつかわれるエスケープなどもELfunction使わなくなる様な気がします。自由度が大幅に上がりますよね。
もちろん、JavaEE 5で導入された、unified ELもあるということで#{}の書式でも使えます。JSFとかも結構楽になりますよね。
JavaEE 6、おいらは好きですよ。Java EE 5、Java EE 6と歩みは遅くとも確実によくなってきてます。J2EE 1.4までのほうがいいという人も世の中にはいるようですが、おいらは戻りたくないなぁ。EJB 2.1とかつらいだけだし。