うぬはまだEL(式言語)の本当の恐ろしさをしらぬ

NetBeans 6.7RCで先取りJavaEE第4弾!

今回は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とかつらいだけだし。