Servlet & JSP – 24 – Expression Language – 03

Merhaba Arkadaslar,
Bu bolumde , Expression Language Operator ve Expression Language function konusunu inceleyecegiz.

Expression Language Operator

Expression Language kullanirken genel olarak operator ile hesaplama yapmamiz pek onerilen bir durum degildir. Yine de expression language arithmetic , logical ve relational operatorleri destekler.

Arithmetic Operator

+
-
*
/ veya div
% veya mod

Logical Operator

&& veya and
|| veya or
! veya not

Relational Operator

== veya equals
!= veya ne
< veya lt
> veya gt
<= veya le
>= veya ge

0 a bolme sonucu , Expression Language “Infinity” sonucunu dondurecektir. 0’a bolme islemini Java kodunda yapsak runtime exception aliriz. % mod operatorunu 0 ile kullanirsak 0’a bolme isleminde oldugu gibi “Infinity” degil exception aliriz !

Ornek Uygulama

Yeni bir Servlet sinifi olusturalim;

ELOperator.java

package _11_ExpressionLanguage.operators;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ELOperator extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


		int num1 = 1;
		String num2 = "2";
		int num7=7;	
		boolean bool1= true;		
		
		List list1 = new ArrayList();	
		list1.add("true");
		list1.add("false");
		
		req.setAttribute("num1", num1);
		req.setAttribute("num2", num2);
		req.setAttribute("num7", num7);
		req.setAttribute("list1", list1);
		req.setAttribute("bool1", bool1);
		
		RequestDispatcher view = req.getRequestDispatcher("06_EL_operator/eloperator.jsp");
		view.forward(req, resp);

	}
}

request scope’a cesitli degiskenleri attribute olarak ekledik ve JSP dosyamiza dispatch ettik.
eloperator.jsp

${(num1+5)*3} <br>
${num1/0 } <br>
${num1 div 0 } <br> 
${num7 % 3 } <br> 
${num7 mod 4 } <br> 
${bool1 and true} <br>
${num2 ==2} <br>
${num2 eq 2} <br>
${num2 le 5} <br>

Expression Language ve Null

Java’da bol miktar NullPointerException aliriz. Buna ragmen Expression Language null-friendly bir yapisi vardir.  Null veya bilinmeyen degerleri yonetebilir.

Eger ilgili attribute objesi yoksa hata vermez cikti olarak bir sey yazmaz. Ornegin foo ve bar attribute’leri tanimli olmasin ;

${foo}
${foo[bar]}
${foo.bar}

Aritmetik islemler icin bilinmeyen/olmayan degerler 0(sifir) olarak degerlendirilir.

${10+foo}
${10/foo}
${10-foo}
<%--${10%foo} java.lang.ArithmeticException: / by zero --%>

Logical operatorler icin false olarak degerlendirilir.

${7<foo}
${7==foo}
${foo==foo}
${true and foo}
${true or foo}
${not foo}

Expression Language Functions

Expression Language aracigiliyla Java metotlarimizi kullanabiliriz. Bunun icin oncelikle yeni bir sinif tanimlayalim ve basit bir metot yazalim. Burada onemli nokta metot public ve static olmalidir !

ELFunction.java

package _11_ExpressionLanguage.function;

public class ELFunction {
	public static int calculate(int n1, int n2) {
		return (n1+n2)*5;
	}
}

Expression Language fonksiyonu tanimlamak icin yeni bir dosya kullanacagiz ;
Tag Library Descriptor ( TLD ) 

function.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">

	<uri>myURI</uri>
	<tlib-version>2.0</tlib-version>
	<function>
		<name>myfunction</name>
		<function-class>_11_ExpressionLanguage.function.ELFunction</function-class>
		<function-signature>
			int calculate(int n1, int n2)
		</function-signature>
	</function>

</taglib>

funtion.tld dosyamiz WEB-INF klasoru altinda olmalidir.  uri ve name alanlarina istedigimiz isimleri yazdik. <function-class> etiketi ile ilgili sinifin ismini paket adiyla birlikte yazdik.
<function-signature> etiketi ile metot tanimimizi yaziyoruz. Sinifimiza tanimladigimiz metodu tld dosyamizda da tanimliyoruz.

public static int calculate(int n1, int n2) { }

int calculate(int n1, int n2)

Yeni bir JSP dosyasi olusturalim;

elfunction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@taglib prefix="myPrefix" uri="myURI"%>
<html>
<body>
${myPrefix:myfunction(5,10) }
</body>
</html>

Yeni bir taglib tanimi yaptik. prefix alanina istedigimiz bir ismi verdik. uri alanina ise tld dosyamizda verdigimiz myURI ismini yazdik.

Tanimladigimiz function’i expression language ile kullanmak icin ; tanimladigimiz prefix ve tld dosyasinda  <name> etiketinde verdigimiz isim gereklidir. Tanimladigimiz metot 2 tane parametre aldigi icin burada myFunction(5,10) olarak deger gonderiyoruz.

JSP dosyamizi calistirdigimizda sonucu 75 olarak tarayicimiza yazdiracaktir.

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6 Web Component Developer

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *