| Eclipse Corner cikk |

Összegzés
A forráskód előállítása időt spórolhat a projektekben és csökkentheti a redundáns programozás mennyiségét. A forráskód előállítása hatékony lehet, de a kódot író program rövid idő alatt nagyon összetetté és nehezen érthetővé válhat. Az összetettség csökkentésének és az olvashatóság javításának egyik módja a sablonok használata.
Az Eclipse Modeling Framework (EMF) projekt két nagyon hatékony eszközt biztosít a forráskód előállításához: JET (Java kibocsájtó sablonok) és JMerge (Java összevonás). A JET-tel lehetősége van a JSP-hez hasonló szintaxis (valójában a JSP szintaxis egy részhalmazának) használatára, mellyel igen könnyű olyan sablonokat írni, amelyek kifejezik az előállítani kívánt kódot. A JET olyan általános sablon alrendszer, mellyel SQL, XML, Java forráskódkódolt és egyéb kimenetet állíthat elő sablonokból. Az org.eclipse.emf.codegen bedolgozóban található az EMF futási környezet letöltés részeként.
A cikkből megtudhatja, hogy hogyan hozhat létre JET sablonokat, hogyan fordíthatja le automatikusan a sablonokat Java osztályokra a JET jelleg és a JET összeépítő használatával, és hogyan használhatja ezeket az osztályokat forráskód előállításához. A cikk egy rövid JET szintaxis referenciát is tartalmaz.
Közreműködő: Remko Popma, Azzurri Ltd., remko.popma kukac azzurri pont jp, 2003. július 30. Engedéllyel használva. Utolsó frissítés: 2007. január 3.
Kezdeti lépések
A JET modell
Utasítások
JET parancsfájl elemek
Erőforrások
Mielőtt létrehozhatná az első sablonját, szüksége van az EMF bedolgozóra. Ha még nem telepítette, akkor telepítse most, mielőtt továbbhaladna ebben az ismertetőben.
A képernyőképek az Eclipse SDK 3.1.0 RC2 változatán és az EMF 2.1.0 I200506160200 változatán alapulnak. A Java 5.0 szerkezetek, például az általános típusok használatához azonban legalább Eclipse 3.3M4 és EMF 2.3.0M4 kell.
A JET sablon olyan szövegfájl, melynek neve a "jet" karakterekre végződik. Az EMF egyezmény szerint a "jet" karaktereket kell hozzáfűzni ahhoz, ami az előállított kód fájlkiterjesztése lenne, így a .javajet azt jelzi, hogy a sablon egy .java fájlt állít elő, az .xmljet sablon XML fájlt, az .sqljet sablon SQL fájlt és így tovább.
A hagyományoknak megfelelően kezdjük egy olyan sablonnal, amely létrehozza a "Hello, world" üzenetet. Az alábbi, négy lépésből álló folyamattal hozzuk létre az első sablont:
Kattintson a munkaterület menü Fájl > Új > Projekt menüpontjára, hogy megnyíljon az Új projekt varázsló. Hozzon létre egy új Java projektet, és vegye fel hozzá az src nevű forrás mappát.

Miután létrehozta a projektet, kattintson rá a jobb egérgombbal a Csomagböngésző vagy a Hierarchia nézetben, majd válassza az előugró menü Új > Egyéb... > Java kibocsátó sablonok > Projektek átalakítása JET projektté menüpontját.

Miután megnyomta a Tovább gombot, válassza ki a létrehozott projektet, és kattintson a Befejezés gombra.

A varázsló hozzáadja a JET jelleget a projekthez azzal, hogy létrehoz egy templates mappát a projekt gyökere alatt, ahogyan az az alábbi képen látható. A JET összeépítő is hozzáadásra kerül a projekthez. Ez automatikusan lefordítja Java osztályra a templates mappa összes olyan fájlját, melynek neve a "jet" karakterekre végződik.

Mielőtt létrehozná az első sablont, gondoskodjék róla, hogy a projekt src forrás mappája legyen a lefordított sablonok cél mappája. Kattintson a jobb egérgombbal a projektre, majd válassza az előugró menü "Tulajdonságok" menüpontját. A Projekt tulajdonságai párbeszédablakban válassza a JET beállítások lehetőséget a bal oldali menüből, és adja meg az "src" értéket (a forrás mappa nevét) a "Forrás tároló" szövegmezőben. Az alábbi képen a Projekt tulajdonságai párbeszédablak JET beállítások tulajdonságoldala látható.

Megjegyzés: több mappát is megadhat a Sablon tárolók mezőben,
egymástól szóközzel vagy pontosvesszővel elválasztva. Ha azonban
különböző mappákban található sablonoknak ugyanaz a fájlneve, akkor
csak az első mappában található sablont fordítja le automatikusan a
JET összeépítő. Ha azt akarja, hogy az összes sablon le legyen fordítva,
akkor gondoskodjék róla, hogy eltérő legyen a fájlnevük.
A JET összeépítő most lefordítja Java forrásfájlokra a projekt src mappájában található összes sablont.
Előszöris, az összeépítési problémák elkerülése érdekében kapcsolja ki az automatikus összeépítéseket. A Projekt menüben szüntesse meg az "Automatikus összeépítés" lehetőség bejelölését.


Ha az "Automatikus összeépítés" tiltott, akkor nem kapja a következő hibát, amikor a Befejezés gombra kattint: "A 'jet' utasítás hiányzik a 'helloworld.txtjet' fájlból az 1. sorban", ahogyan az az alábbi képen látható.

Ha az automatikus összeépítés engedélyezett, akkor a fenti hibaüzenetet kapja. Szerencsére ez nem jelent valós problémát, mindössze azt, hogy a JET összeépítő rögtön a létrehozás után megpróbálta lefordítani a sablont, és azt találta, hogy az még üres. Kattintson az OK gombra a hiba párbeszédablak bezárásához. Nyissa meg a helloworld.txtjet fájlt, amennyiben az nincs nyitva, és írja be vagy vágja ki és másolja be az alábbi tartalmat a szerkesztőben.
<%@ jet package="hello" class="HelloWorldTemplate" %>
Hello, world!
Amikor elmenti a sablonfájlt, a JET összeépítő automatikusan lefordítja azt, amennyiben be van jelölve az 'Automatikus összeépítés' lehetőség. Ha nem, akkor válassza a Projekt menü "Projekt összeépítése" menüpontját.
Mivel megadta a hello csomagot és a HelloWorldTemplate osztályt a sablon első sorában, ezért az összeépítő létrehoz egy hello csomagot az src mappában és elmenti a HelloWorldTemplate.java Java fájlt a csomagba, ahogy az az alábbi képen látható.
A Java osztály a sablon fordításának eredménye, egy úgynevezett sablon megvalósítási osztály. Az osztály rendelkezik generate metódussal. Ez a metódus állítja elő a sablonban jelzett kódot.
Hozza létre a HelloWorldTemplate
sablon megvalósítási osztály egy példányát és hívja meg annak
generate metódusát az alábbiak szerint:
A fentiek megvalósításához hozzon létre egy új osztályt HelloWorldImpl névvel. Kattintson a jobb egérgombbal a hello csomagra a Csomagböngésző vagy a Hierarchia nézetben, majd válassza az előugró menü Új > Osztály menüpontját.
Legyen az osztály neve "HelloWorldImpl", és biztosítsa a public static void main(String[] args) csonk bejelölését.
Most másolja be az alábbi kódot a main() metódusba:
HelloWorldTemplate helloworld = new HelloWorldTemplate(); String result = helloworld.generate(null); System.out.println(result);
A futtatásához válassza a "Futtatás" eszköztár legördülő menü "Futtatás mint/Java alkalmazás" menüpontját. A rendszer kinyomtatja a "Hello, world!" szavakat a konzolra.
Összefoglalva: Létrehozta első sablonját és előállított vele némi kódot. Lehet, hogy az eredmény nem túl látványos, de ezzel elvégzett minden beállítást, és most már elkezdheti felfedezni, hogy miben tudja a JET segíteni a munkáját. A következő lépés egy argumentum átadása a sablonnak.
Vegyen fel egy új JET sablonfájlt vagy módosítsa a meglévőt,
hogy az alábbi legyen a tartalma:
<%@ jet package="hello" class="GreetingTemplate" %> Hello, <%=argument%>!
A JET összeépítő lefordítja ezt a sablont a GreetingTemplate osztályra a hello csomagban. Itt is létrehoz egy példányt a sablon osztályból (vagy módosítja a meglévő HelloWorldImpl példányt, de most átad egy karaktersorozat argumentumot a generate metódusnak:
GreetingTemplate sayHello = new GreetingTemplate();
String result = sayHello.generate("Tutorial Reader");
System.out.println(result);
A fenti kód kinyomtatja a "Hello, Tutorial Reader!" szavakat a konzolra.
A sablonnak átadott argumentum tetszőleges objektum lehet. Az előző
példában egy karaktersorozatot adott át a generate metódusnak, de az
alkalmazásban valószínűleg a saját modell objektumát akarja. Ha az
argumentum nem a java.lang csomagban van, vagy ha a
sablon olyan más osztályokat használ, amelyek nem a
java.lang csomagban vannak, akkor importálnia kell
ezeket az osztályokat a sablon jet utasításában. Az
imports attribútummal rendelkező
jet utasítás így néz ki:
<%@ jet package="hello"imports="java.util.*" class="ImportDemoTemplate" %>
A cikk JET szintaxis referencia szakasza további részletekkel szolgál a jet utasításról és annak attribútumairól.
A következő példában létrehoz egy XML kódot előállító sablont. Hogy tartsa magát az EMF egyezményhez, miszerint hozzá kell fűzni a "jet" karaktereket az előállított kód fájlkiterjesztéséhez, az importdemo.xmljet fájlba mentse a sablont. Egy java.util.List objektumot ad át a sablonnak, amely tartalmazza az XML előállításakor használni kívánt adatokat.
<%@ jet package="hello"imports="java.util.*" class="XMLDemoTemplate" %>
<% List<?> elementList = (List<?>) argument; %> <?xml version="1.0" encoding="UTF-8"?> <demo> <% for (Iterator<?> i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element> <% } %> </demo>
Az alábbi kód bemutatja a sablonpéldány meghívását. Létrehoz egy
listát és
átadja azt a sablon megvalósítási osztály
generate metódusának:
package hello;
import java.util.ArrayList;
public class XMLDemoImpl {
public static void main(String[] args) {
List<String> data = new ArrayList<String>();
data.add("first");
data.add("second");
data.add("third");
XMLDemoTemplate generateXml = new XMLDemoTemplate();
String result = generateXml.generate(
data);
System.out.println(result);
}
}
Ez kinyomtatja az alábbi XML eredményt a konzolra:
<?xml version="1.0" encoding="UTF-8"?> <demo> <element>first</element> <element>second</element> <element>third</element> </demo>
Ez egy nagyon egyszerű példa, mely nagyon egyszerű XML kódot állít elő. Természetesen bonyolultabb XML kódot is létrehozhat a JET használatával, ha attribútumokat és névtartományokat használ. Amikor ezt teszi, kényelmesebb lehet egy speciális osztályt létrehozni, ami jobb modellje az XML dokumentumnak, mint a java.util.ArrayList. Általában minél összetettebb a JET sablon, annál több működést érdemes a sablonnak átadott modell objektumba foglalni, hogy a sablon olvasható maradjon. Ezt tovább részletezzük az ismertető 2. részében.
A JET okos szolgáltatása, hogy módosíthatja azokat a címkéket, amelyek a kódrészleteket jelölik a sablonfájlban. Ez igen kényelmes, amikor az előállított kód szintaxisa nagyon hasonló az alapértelmezett JET szintaxishoz, például ha JSP oldalakat állít elő a JET használatával.
A következő példában egy egyszerű JSP oldalt hoz létre a JET használatával. Módosítja a JET címkéket, hogy a "<$" karaktersorozattal kezdődjenek a sabloncímkék, és a "$>" karakterrel fejeződjenek be. A sablon továbbra is tartalmaz "<%" és "%>" karaktersorozatokat, de a JET alrendszer most már nem tekinti speciálisnak őket, hanem ugyanúgy kiírja őket az eredménybe, mint bármely más karaktersorozatot.
A címkejelzők módosításához vegyen fel egy
startTag és egy
endTag attribútumot a sablon első sorában található JET
utasításba, az alábbi példában látható módon.
<%@ jet package="tags.demo" class="JspTemplate"startTag="<$"
endTag="$>" %> <$ String paramName = (String) argument; /* This is an executed scriptlet */ $> <$ if (paramName != null) { $>
<%= request.getParameter("<$=paramName$>") %> <!-- this is generated JSP --> <$ } $>
Most is egy karaktersorozat argumentummal hívja meg ezt a megvalósítási osztályt, az alábbiak szerint:
System.out.println(new tags.demo.JspTemplate().generate("button"));
Az alábbi kimenet jelenik meg a konzolon. A kimenet tartalmazza a
sértetlen JSP címkét: a "<%" és a "%>"
karaktersorozatot nem JET kódrészletként értelmezi a rendszer, hanem
egyszerűen beilleszti az előállított kódba.
<%= request.getParameter("button") %> <!-- this is generated JSP -->
Az alábbi szakaszban megnéztük a JET sablonok létrehozását, a JET jelleg beállítását a sablonok automatikus lefordításához Java megvalósítási osztályokra, valamint a Java megvalósítási osztályok használatát a kód előállítására.
Ebben a szakaszban közelebbről szemügyre vesszük a sablon lefordításának eredményeként kapott Java megvalósítási osztályokat. Megnézzük, hogy miért használható az argument és a stringBuffer implicit objektum a sablonokban, valamint hogy hogyan lehet személyre szabni a lefordított megvalósítási osztályt egyéni "váz" megadásával.
A JET sablont lefordítja Java megvalósítás osztályra. Vannak olyan objektumok a Java megvalósítási osztályban, amelyekre közvetlenül hivatkozhat a JET sablonban. Az alábbi példa bemutatja, hogy hogyan használható az argument és a stringBuffer implicit objektum a sablonokban.
<%@ jet package="hello" class="TranslationDemoTemplate" %>Hello, <%=argument%>!
<% stringBuffer.append("Hello again!"); %>
A fenti sablon az alábbiak szerint kerül lefordításra Java megvalósítási osztályra:
package hello;
public class TranslationDemoTemplate
{
protected static String nl;
public static synchronized TranslationDemoTemplate create(String lineSeparator)
{
nl = lineSeparator;
TranslationDemoTemplate result = new TranslationDemoTemplate();
nl = null;
return result;
}
protected final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
protected final String TEXT_1 = "Hello, ";
protected final String TEXT_2 = "!";
public String generate(Object argument)
{
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(TEXT_1);
stringBuffer.append(argument);
stringBuffer.append(TEXT_2);
stringBuffer.append("Hello again!");
return stringBuffer.toString();
}
}
Figyelje meg, hogy a Java megvalósítási osztály
generate metódusának van egy
Object paramétere, egy úgynevezett
argument. Ez ugyanaz az objektum, mint a sablon
második sorában szereplő
paraméter. Azt is figyelje meg, hogy a Java megvalósítási
osztály StringBuffer objektumot használ az
eredményül kapott előállított kód begyűjtésére. A sablonban közvetlenül
hivatkozhat erre az objektumra
a nevével: stringBuffer.
A
create statikus metódus lehetővé teszi az alkalmazás
számára egy TranslationDemoTemplate
példányosítását, amely egy bizonyos karaktersorozatot használ
sorelválasztóként.
A fenti TranslationDemoTemplate osztály generate metódusa a megvalósítási osztály "vázának" része. A JET alrendszer által használt alapértelmezett váz a következőképp néz ki:
public class CLASS
{
public String generate(Object argument)
{
return "";
}
}
A váz meghatározása majdnem úgy néz ki, mint egy normál Java osztály, kivéve az osztály nevét. Az osztály neve (CLASS) a jet utasításban szereplő class attribútum értéke lesz. Valamint a váz meghatározásában szerepel a korábban bemutatott generate metódus. A váz módosításával személyre szabhatja a sablon megvalósítási osztályt, például megvalósíthat vele felületet vagy módosíthatja az osztály egyéb jellemzőit.
Például tegyük fel, hogy azt szeretné, hogy minden sablon
megvalósítási osztály megvalósítson egy felületet. A felület az alábbihoz
hasonló lehet:
public interface IGenerator {
String generate(Object argument);
}
Az egyéni váz használatát úgy lehet a JET alrendszer tudomására hozni, hogy beállítja a jet utasítás skeleton attribútumát a sablonfájl első sorában. A skeleton attribútum értéke egy olyan URI, amely az egyéni váz meghatározását tartalmazó fájlra mutat.
Ennek kipróbálásához először hozzon létre egy új Névtelen szövegfájlt a Fájl > Új menüből vagy az eszköztárból.

Nyissa meg, és írja vagy másolja bele az alábbi tartalmat:
public class CLASSimplements IGenerator {
/* (non-javadoc) * @see IGenerator#generate(Object) */
public String generate(Object argument) { return ""; } }
Most mentse el ezt a fájlt generator.skeleton néven a templates könyvtárba, az alábbi képen látható módon.

Ez a fájl az egyéni váz. A vázat használó összes sablon az IGenerator felületet megvalósító osztályokra lesz lefordítva. A váz használatához vegye fel a skeleton attribútumot a sablon jet utasításába az alábbiak szerint:
<%@ jet package="hello" class="GreetingTemplate" skeleton="generator.skeleton" %> Hello, <%=argument%>! The current time is <%=new java.util.Date()%>.
Miután a JET összeépítő lefordította a sablont, a megvalósítási osztály így néz ki:
package hello; public class GreetingTemplateimplements IGenerator { protected final String NL = System.getProperties().getProperty("line.separator"); protected final String TEXT_1 = "Hello, "; protected final String TEXT_2 = "!" + NL + "The current time is "; protected final String TEXT_3 = "."; protected final String TEXT_4 = NL;
/* (non-javadoc) * @see IGenerator#generate(Object) */
public String generate(Object argument) { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append(TEXT_1); stringBuffer.append(argument); stringBuffer.append(TEXT_2); stringBuffer.append(new java.util.Date()); stringBuffer.append(TEXT_3); stringBuffer.append(TEXT_4); return stringBuffer.toString(); } }
A lefordított sablon most már
megvalósítja az IGenerator felületet, és a
generate metódus most már rendelkezik
a generator.skeleton fájlban megadott megjegyzésekkel.
Ez példa arra, hogy hogyan lehet személyre szabni a lefordított sablont
vázmeghatározással. A vázmeghatározások extra metódusokat, belső
osztályokat stb. is tartalmazhatnak. Kis kísérletezéssel megismerheti,
hogy mi minden lehetséges.
Ha használt már JSP technológiát korábban, akkor a JET szintaxis valószínűleg nagyon ismerős lesz. A JET szintaxis a JSP szintaxis részhalmaza, így nem lesz benne sok újdonság.
A szakasz a JET szintaxis félformális leírásával és referenciával szolgál.
A JET sablont lefordítja Java megvalósítás osztályra. Ez a megvalósítási osztály rendelkezik egy metódussal, melynek meghívásával beszerezheti az eredmény karaktersorozatot. A metódus neve általában generate (lásd még a jet utasítás skeleton attribútumát).
Ha nincs megadva skeleton attribútum a jet utasításban, akkor a Java megvalósítás az alábbi implicit objektumokkal rendelkezik, amelyekre hivatkozhat a JET sablonban:
Az utasítások a JET alrendszernek szóló üzenetek. Az utasítások szintaxisa a következő:
<%@ utasítás { attribútum="érték" }* %>
Lehet nem kötelező üres hely a "<%@" után és a "%>" előtt.
Az utasítások befolyásolják, hogy hogyan kerül lefordításra a sablon de nem írnak semmilyen kimenetet az előállított karaktersorozatba a sablon meghívásakor.
A jet utasítás meghatároz számos attribútumot és kommunikálja ezeket a JET alrendszer felé. A JET sablonfájlban lennie kell jet utasításnak a fájl első sorában, különben a sablonfájl nem fordítható le. Az esetleges további jet utasítások figyelmen kívül maradnak. Az ismeretlen attribútumok végzetes fordítási hibákat eredményeznek.
Az alábbi utasítás azt jelzi, hogy a sablont a hello csomagban található HelloWorldTemplate.java Java megvalósítási osztályra kell lefordítani. A megvalósítási osztálynak importálnia kell a java.io.* és a java.util.* csomagot.
<%@ jet package="hello" class="HelloWorldTemplate" imports="java.io.* java.util.*" %>
A jet utasítás attribútumainak részletei a következők:
| Attribútum | Érték |
|---|---|
| package | Annak a Java megvalósítási osztálynak a csomagneve, amelyre lefordítja a sablont. Ha az attribútum nincs jelen, akkor a Java megvalósítási osztály az alapértelmezett csomagban jön létre. |
| class | Annak a Java megvalósítási osztálynak az osztályneve, amelyre lefordítja a sablont. Ha nincs jelen, akkor a Java megvalósítási osztály neve CLASS. |
| imports | A Java sablon osztályba importálni kívánt csomagok és/vagy osztályok szóközzel elválasztott listája. |
| startTag | Az a karaktersorozat a JET sablonban, ami a kódrészletek, kifejezések vagy include utasítások kezdetét jelzi. Az alapértelmezett érték: "<%". Az attribútum és rokona, az endTag akkor nagyon kényelmes, amikor az előállított kód szintaxisa nagyon hasonló az alapértelmezett JET szintaxishoz, például ha JSP oldalakat állít elő a JET használatával. |
| endTag | Az a karaktersorozat a JET sablonban, ami a kódrészletek, kifejezések vagy include utasítások végét jelzi. Az alapértelmezett érték: "%>". Lásd még: startTag. |
| skeleton | Annak a Java megvalósítási osztálynak a vázmeghatározását tartalmazó fájl URI azonosítója, amelyre lefordítja a sablont. Az URI hasonló módon kerül feloldásra, mint a file attribútum értéke az include utasításban. Ha nincs megadva vázmeghatározás fájl, akkor a JET alrendszer az alábbi formátumú alapértelmezett vázat használ: "public class CLASS\n{\n public String generate(Object argument)\n {\n return \"\";\n }\n}\n". A váz osztálymeghatározásában szereplő osztálynév CLASS kell, hogy legyen. |
| nlString | A Java sablon osztályban használni kívánt új sor karaktersorozat. Az alapértelmezett érték: "System.getProperties().getProperty(\"line.separator\")" |
Az include utasítással lehetősége van szöveg és/vagy kód kicserélésére a sablon fordításakor. A <%@ include file="urlSpec" %> utasítás beilleszti a megadott erőforrás szövegét a JET sablonfájlba. A tartalmazott fájlban JET parancsfájl-elemek is lehetnek, amelyeket szintén feldolgoz a rendszer.
Az utasítás egyetlen attribútummal rendelkezik, ez a file. Az attribútum értéke a befoglalni kívánt fájl helyének URI azonosítója. Ez az URI lehet abszolút vagy relatív útvonal. A relatív URI-kat az include utasítást tartalmazó sablon mappájához viszonyítva értelmezi a rendszer.
Például:
Az alábbi példa a szerzői jogi nyilatkozatot tartalmazó fájl befoglalását kéri a fordításkor.
<%@ include file="copyright.jet" %>
Megjegyzés: A JET támogatja a sablon elérési utak
újradefiniálását. Lehetőség van úgy beállítani a JET alrendszert, hogy
több Sablon tárolót használjon. Ilyenkor az első tároló elsőbbséget élvez
a másodikkal szemben, a második a harmadikkal szemben stb. Ez azt jelenti,
hogy ha azonos fájlnévvel rendelkező sablonfájlok vagy tartalmazott fájlok
vannak több Sablon tárolóban, akkor az első mappában található fájl kerül
felhasználásra, és a többi(ek) figyelmen kívül marad(nak). A JET alapú
alkalmazás ügyfelei ezzel a mechanizmussal egyéni tartalmazott fájlokat
biztosíthatnak, amelyek az eredeti alkalmazás sablonjainak módosítása
nélkül definiálják újra az eredeti tartalmazott fájlokat.
A JET-ben kétféle parancsfájlnyelv-elemek vannak: kódrészletek és kifejezések. A kódrészlet egy utasítástöredék, a kifejezés pedig egy teljes Java kifejezés.
Minden egyes parancsfájl-elemnek "<%" alapú szintaxisa van az alábbiak szerint:
<% ez egy kódrészlet %> <%= ez egy kifejezés %>
Az üres hely nem kötelező a "<%" és "<%=" után és a "%>" előtt.
Ha a kódrészlet lezárása helyett literál karakterekként akarja használni a %> karaktersorozatot a kódrészletben, akkor a %\> beírásával védheti le. Hasonlóan, a <% karaktersorozatot a <\% beírásával védheti le.
A kódrészletek tetszőleges érvényes Java kódtöredéket tartalmazhatnak.
A kódrészletek a sablon hívásakor kerülnek végrehajtásra. Az, hogy állítanak-e elő kimenetet az eredmény karaktersorozatba, a kódrészletben található tényleges kódtól függ. A kódrészleteknek lehetnek mellékhatásai, amelyek módosítják a bennük látható objektumokat.
Amikor az adott fordítási egységben található összes kódrészlet kombinálva van abban a sorrendben, ahogyan a JET sablonban szerepelnek, akkor érvényes Java utasítást vagy utasítássorozatot kell adniuk.
Példa:
<% if (Calendar.getInstance().get(Calendar.AM_PM) == Calendar.AM) {%>
Good Morning
<% } else { %>
Good Afternoon
<% } %>
<% scriptlet %>
A JET kifejezés elem egy Java kifejezés, amelyet kiértékel a rendszer és hozzáfűzi az eredményt a generate metódus által visszaadott StringBuffer objektumhoz. A kifejezések kiértékelésére a sablon hívásakor kerül sor.
Ha a kifejezés eredménye nem fűzhető hozzá a StringBuffer objektumhoz, akkor fordítási hiba történik. A JET kifejezés tartalmának teljes Java kifejezésnek kell lennie.
A kifejezésekben támogatottak a mellékhatások. Ezek a JET kifejezés kiértékelésekor hatnak. A JET kifejezések balról jobbra kerülnek kiértékelésre a JET sablonban.
A következő példában az aktuális dátumot fűzi hozzá a StringBuffer eredményhez.
<%= (new java.util.Date()).toLocaleString() %>
<%= kifejezés %>
http://www.javaworld.com/javaworld/jw-11-2001/jw-1102-codegen.html