JSP | |
---|---|
Rozšíření | .jsp |
MIME typ | aplikace/jsp |
Vývojář | Nadace Eclipse |
Poslední vydání | 3.1.0 (15. května 2022 ) |
Typ formátu | formát souboru , šablonový engine a technická specifikace |
standard(y) | JSR 245 |
webová stránka | projects.eclipse.org/… ( anglicky) |
Mediální soubory na Wikimedia Commons |
JSP ( JavaServer Pages ) je technologie, která umožňuje webovým vývojářům vytvářet obsah, který má statické i dynamické komponenty. Stránka JSP obsahuje dva typy textu: statická zdrojová data, která mohou být v jednom z textových formátů HTML , SVG , WML nebo XML , a prvky JSP, které vytvářejí dynamický obsah. Kromě toho lze knihovny značek JSP a jazyk Expression Language (EL) použít k vložení kódu Java do statického obsahu stránek JSP.
Kód stránky JSP je přeložen do kódu servletu Java pomocí kompilátoru stránek Jasper JSP a poté zkompilován do bytekódu Java Virtual Machine ( JVM ) . Kontejnery servletů schopné spouštět stránky JSP jsou napsány v jazyce Java nezávislém na platformě. JSP jsou načteny na server a spravovány ze speciální struktury paketů Java serveru nazvané Jakarta EE Web Application. Stránky jsou obvykle zabaleny v archivech souborů .war a .ear .
Technologie JSP je platformově nezávislá, přenosná a snadno rozšiřitelná technologie pro vývoj webových aplikací .
Od verze 1.2 probíhá vývoj stránek JavaServer Pages v rámci procesu Java Community Process . JSR 53 definuje standardy JSP 1.2 a Servlet 2.3, zatímco JSR 152 definuje specifikaci JSP 2.0. V květnu 2006 byla vydána specifikace JSP 2.1 pod JSR 245 jako součást Java EE 5 . 10. prosince 2009 byla vydána specifikace JSP 2.2 jako obsah vydání JSR 245 .
Tyto verze se zásadně liší od předchozích verzí, které byly vnímány jako odpověď Javy na ASP . Některé ze základních funkcí předchozích verzí (jako je schopnost vyvíjet knihovny značek) byly odstraněny nebo nahrazeny v souladu s principem oddělení kódu a obsahu. Vzhledem k tomu, že je obtížné procházet a oddělovat obsah od samotného kódu ve velkých objemech zdrojového kódu , přišel nápad oddělit (přenést) je pomocí značek JSP, jako je <jsp:useBean/>. Pro realizaci této myšlenky byly JSP tagy rozděleny do tří logických skupin: direktivy, prvky skriptu a akce.
JSP 1.2 rozšiřuje specifikaci JavaServer Pages 1.1 (JSP 1.1) následovně:
Nová verze specifikace JSP přidává následující funkce:
Platforma Java EE 5 se zaměřuje na snadný vývoj pomocí anotací jazyka Java, které zavedlo J2SE 5.0 . JSP 2.1 podporuje tento cíl definováním anotací vkládání závislostí na příkazy JSP a posluchače kontextu.
JavaServer Pages (JSP) umožňují oddělit dynamickou část stránek od statického HTML . Dynamická část je uzavřena ve speciálních značkách "<% %>":
Vaše jméno hostitele : < % = požadavek . getRemoteHost () %>Stránky JSP mají příponu .jspa jsou umístěny na stejném místě jako běžné webové stránky. Struktura takových stránek se může skládat z pěti konstrukcí: HTML , komentáře, prvky skriptu, směrnice a akce. Stránka JSP je zkompilována do servletu se statickým obsahem, který je odeslán do výstupního proudu spojeného s metodou služby . Proto při prvním požadavku může tento proces způsobit mírné zpoždění. Komentáře v dokumentu nebo programu nezpůsobí zpomalení programu, protože je kompilátor a interpret ignoruje . Skriptové prvky umožňují specifikovat Java kód , který se později stane součástí finálního servletu, direktivy umožňují ovládat celou strukturu servletu a akce slouží ke specifikaci existujících použitých komponent a také k ovládání chování JSP enginu. . Pro usnadnění skriptování jsou zde předdefinované proměnné jako request, response, pageContext, session, out, application, config, page, exception. Příklad stránky JSP využívající všechny komponenty JSP:
Komentáře se používají k vysvětlení zdrojového kódu programu. Na stránkách JSP lze komentáře rozdělit do dvou skupin:
Komentáře zdrojového kódu JSP jsou označeny speciální posloupností znaků: <%--na začátku a --%>na konci komentáře. Tento typ komentáře je odstraněn při kompilaci stránky JSP. Příklad komentáře JSP:
<%-- Zobrazí produktový katalog a aktuální nákupní košík . --%>Komentáře ke značkám HTML jsou formátovány podle pravidel jazyka HTML. Tento typ komentáře je kompilátorem JSP považován za statický text a je umístěn do výstupního dokumentu HTML. Výrazy JSP uvnitř komentářů HTML se provádějí. Příklad HTML komentáře:
<!-- Datum vytvoření stránky : <%= nová java . utilita _ Datum () %> -->Specifikace JSP rozlišuje tři typy prvků skriptu:
Deklarace se běžně používají k definování proměnných, metod, vnitřních tříd a dalších platných Java konstruktů na úrovni třídy. Výrazy se stanou argumenty metody out.print(). S pomocí skriptletů jsou pracovní části kódu Java vnořeny do stránek JSP.
JSP prohlášeníDeklarace JSP vám umožní definovat proměnné, metody, vnitřní třídy a tak dále. Deklarace se používají k definování konstrukcí Java používaných v programu. Protože se deklarace nevykreslují, obvykle se používají ve spojení s výrazy nebo skriptlety JSP. Příklad fragmentu JSP ukazuje počet požadavků na tuto stránku od spuštění serveru (nebo od poslední úpravy a opětovného načtení servletu). Všimněte si, že v příkladu používáme deklaraci i výraz a že uvnitř konstruktu je za deklarací středník ( ; ):
<%! private int accessCount = 0 ; %> Počet zobrazení stránky od načtení serveru : < %= ++ accessCount % > JSP výrazyVýrazy JSP se používají k vkládání hodnot Java přímo do výstupu. Java výrazy jsou vyhodnoceny, převedeny na řetězec a vloženy do stránky. Tyto výpočty probíhají za běhu (tedy při požadavku na stránku), a proto je plný přístup k informacím o samotném požadavku. Ve výrazech můžete použít konstanty, proměnné, volání různých metod. Všechny výrazy, bez ohledu na složitost jejich obsahu, jsou vyhodnoceny jako jediný výsledek nebo číslo. Stránky JSP spoléhají na JSP Writer , který převezme jakýkoli výsledek výrazu, převede jej na typ String(text) a uloží jej do vyrovnávací paměti . Například následující kód zobrazuje datum a čas požadavku dané stránky:
Aktuální čas : <%= nová java . utilita _ Datum () %> Vaše jméno hostitele : <% = požadavek . getRemoteHost () %>Musíte věnovat pozornost třem pravidlům:
Skriptlety JSP vám umožňují vložit libovolný kód do metody servletu, která se vygeneruje při vykreslení stránky, což vám umožní používat většinu konstrukcí Java. Skriptlety mají také přístup ke stejným předdefinovaným proměnným jako výrazy. Chcete-li tedy například zobrazit hodnotu na stránce, musíte použít předdefinovanou proměnnou out.
<% String queryData = požadavek . getQueryString (); ven . println ( "Další data dotazu: " + data dotazu ); %>Kód uvnitř skriptletu je vložen tak, jak byl napsán. Veškerý statický HTML (text šablony) před nebo po skriptletu je převeden pomocí print. Například následující fragment JSP obsahuje smíšený text šablony a skriptletu:
<% if ( Math . random () < 0,5 ) { %> < B > Hezký den < / B > ! <% } else { %> < B > Mějte pro vás špatný den </ B > ! <% } %>Po převodu skriptletu bude kód vypadat takto:
if ( Math . random ( ) < 0,5 ) { out . println ( "<B>Přeji hezký</B> den!" ); } jinak { ven . println ( "<B>Mějte pro vás špatný den</B>!" ); }To znamená, že skriptlety nemusí obsahovat úplné úryvky Java a že bloky, které zůstanou otevřené, mohou ovlivnit statický kód HTML mimo skriptlet.
Stránka JSP může odeslat zprávu do příslušného kontejneru s pokyny, co dělat. Tyto zprávy se nazývají směrnice. Všechny direktivy začínají <%@, následuje název direktivy a jeden nebo více atributů s hodnotami a končí %>. Direktivy na stránce JSP způsobí, že kontejner odešle požadavek na provedení konkrétní služby, která není deklarována ve vygenerovaném dokumentu. Forma směrnic může být reprezentována takto:
<% @ atribut směrnice = "hodnota" %>Můžete také kombinovat nastavení více atributů v jedné direktivě:
<% @ direktiva atribut1 = "hodnota1 " atribut2 = "hodnota2" ... atributN = " hodnotaN " %>Existují tři hlavní typy direktiv: page , která vám umožňuje dělat věci, jako je import tříd, změna nadtřídy servletu a tak dále; include , který umožňuje vložit soubor do třídy servletu při překladu souboru JSP do servletu; a taglib , který vám umožňuje rozšířit mnoho značek o vaše vlastní, které je kontejner JSP schopen interpretovat.
Direktiva stránky JSPJak název napovídá, tato direktiva poskytuje atributy pro stránku JSP. Atributy definované v této direktivě jsou vloženy do dané stránky JSP a všech jejích vnořených statických prvků, ať už byly vloženy s direktivou includenebo s akcí jsp:include. Forma směrnice je pagenásledující:
<% @ atribut stránky = " hodnota " %>Vezměme si jako příklad následující záznam:
<% @ import stránky = ” java . utilita _ * , com . moje třídy . * ” buffer = ” 15 kb ” %>Tato direktiva uvádí, že stránka JSP importuje třídy ze dvou balíčků Java , java.utila com.myclassespoté určuje velikost vyrovnávací paměti, která by měla být použita ke zpracování dané stránky JSP.
Dále zvažte atributy direktivy page:
Stejného výsledku můžete dosáhnout pomocí skriptletu:
<% odezvy . setContentType ( "text/prostý" ); %> Zahrnout direktivu JSPTato direktiva vám umožňuje zahrnout soubory do servletu při překladu stránky JSP. Použití směrnice vypadá takto:
<% @ include file = "relativní url" %>Daná adresa URL je obvykle interpretována relativně k JSP stránky, na které je odkaz umístěn, ale stejně jako u jiných relativních adres URL můžete systému sdělit umístění zdroje, o který se zajímáte, vzhledem k adrese webového serveru . domovský adresář přidáním předpony URL se symbolem " / " . S obsahem začleněného souboru se zachází jako s prostým textem JSP a může proto obsahovat prvky, jako je statický HTML , prvky skriptu, direktivy a akce. Mnoho webů například používá na každé stránce malý navigační panel. Kvůli problémům s používáním HTML rámců se tento úkol často řeší umístěním malé tabulky na horní nebo levou polovinu stránky, jejíž HTML kód se pro každou stránku webu mnohokrát opakuje. Direktiva includeje nejpřirozenějším způsobem, jak tento úkol splnit, protože vývojáře šetří noční můrou kopírování HTML do každého jednotlivého souboru. Stává se to takto:
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > < html > < head > < title > Testovací stránka </ title > </ head > < body > <% @ include file = "/navbar .html" %> <!-- Specifický fragment této stránky ... --> </ body > </ html >Všimněte si, že vzhledem k tomu, že direktiva includezahrnuje soubory během překladu stránky, po provedení změn na navigační liště budete muset znovu přeložit všechny stránky JSP, které ji používají. Což je v tomto případě dobrý kompromis, protože navigační lišta se zpravidla mění poměrně zřídka a proces připojení neztrácí na účinnosti. Pokud se zahrnuté soubory mění poměrně často, můžete místo toho použít akci jsp:include. Tato akce zahrnuje soubor při přístupu k JSP.
JSP direktiva taglibJak již víte, na stránkách JSP se prvky zapisují pomocí značek (konvenční znaky, štítky, značky). Sadu značek, které může kontejner JSP interpretovat, lze rozšířit o takzvané knihovny značek. Můžete také připojit akce k rozšířené sadě značek, což má za následek rozšíření samotného jazyka JSP. Značky lze rozdělit na standardní a vlastní. Obecný způsob psaní může vypadat takto:
<% @ taglib uri = ” URI do knihovny značek ” prefix = “ předpona znaků “ %>Knihovna značek musí být identifikována adresou URI (jedinečný identifikátor zdroje). URI může být absolutní nebo relativní. Jedinečný identifikátor zdroje identifikuje umístění knihovny značek ( TLD ), která definuje vlastní značky této knihovny. Příklad zadání direktivy:
<% @ taglib uri = " http://www.moywebserver.ru/naydiznaki.tld " prefix = "iskat" %>Stránka JSP může obsahovat nekonečný počet direktiv taglib, ale každá direktiva musí mít jinou předponu, která definuje obsah knihovny na stránce. Jako předponu můžete použít jakýkoli text, slovo. Zatímco direktivu tagliblze použít kdekoli na stránce JSP, všechny nativní značky, které tyto direktivy používají, musí být použity za nimi.
Akce JSP používají konstrukce syntaxe XML k řízení provozu servletového stroje. Můžete dynamicky zahrnout soubor, znovu použít JavaBeans , přesměrovat uživatele na jinou stránku nebo vygenerovat HTML pro Java plugin . Všechny tyto akce jsou podrobně popsány níže. Pamatujte, že stejně jako u všech XML , názvy prvků a atributů rozlišují velká a malá písmena. Akce lze rozdělit do dvou skupin: standardní a vytvořené (vlastní, které vytváří programátor). Jsou povoleny následující standardní akce:
Tato akce vám umožní načíst JavaBean pro pozdější použití na stránce JSP. Tato funkce vám umožňuje znovu používat třídy Java bez obětování výhod poskytovaných servlety JSP. Kromě toho je to jeden způsob, jak odstranit velkou část zpracování Java ze stránky JSP. Pokud přenesete zpracování Java ze stránky JSP na JavaBean, pak lze tyto funkce použít na jiných stránkách JSP. Nejjednodušší syntaxe pro specifikaci beanu, který se má použít, je:
< jsp : useBean id = "name" class = "package.class" />Obvykle to znamená "vytvoření nové instance objektu třídy určené třídou a její přidružení k proměnné pojmenované podle id ". Můžete však nastavit atribut scope (přebírá hodnoty page|request|session|application, pagepro stránku, requestpro požadavky, sessionpro relace nebo dialogy, applicationpro aplikaci), který je spojen beannejen s aktuální stránkou. V tomto případě je užitečné získat odkazy na existující beansa akce jsp:useBeanvytvoří instanci nového objektu pouze v případě, že neexistuje žádný objekt se stejnými hodnotami id a scope . Nyní, když máte bean, můžete upravit jeho vlastnosti pomocí akce jsp:setPropertynebo pomocí skriptletu a explicitně zavolat metodu objektu s názvem proměnné zadaným dříve prostřednictvím atributu id . Připomeňme si, že když u fazolí říkáte „tato fazole má vlastnost typu X pojmenovaná foo“, skutečně myslíte „tato třída má metodu getFoo, která vrací data typu X, a jinou metodu, která bere X setFoojako parametr.“ Akce jsp:setPropertyje podrobněji popsána v další části, ale prozatím byste si měli pamatovat, že můžete buď explicitně nastavit hodnotu nastavením atributu param tak, aby získal hodnotu z odpovídajícího parametru dotazu, nebo jednoduše vyjmenovat vlastnosti a získat hodnoty z parametry dotazu se stejnými názvy jako vlastnosti. Hodnoty existujících vlastností můžete získat pomocí JSP výrazů nebo skriptletů voláním příslušné metody getXxxnebo (nejčastěji) pomocí akce jsp:getProperty.
Třída přidělená beanu musí být v normálním adresáři třídy serveru, nikoli v části vyhrazené pro třídy, které jsou po úpravách automaticky znovu načteny. Například pro Java Web Server musí být všechny použité třídy umístěny v adresáři classesnebo souboru .jar v adresáři lib, nikoli v adresáři servlets. Níže je jednoduchý příklad, který načte beana nastaví/získá jednoduchý parametr řetězce.
BeanTest.jsp
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > < html > < head > < title > Opětovné použití JavaBeans v JSP < / title > < / head > < body > < h1 > Opětovné použití JavaBeans v JSP </ h1 > < jsp : useBean id = "test" class = "hall.SimpleBean" /> < jsp : setProperty name = "test" property = "message" value = "Ahoj WWW" /> < p > Zpráva : < jsp : getProperty name = "test" property = "message" /> </ p > </ body > </ html >SimpleBean.java
hala balíčků ; public class SimpleBean { private String message = "Text zprávy není nastaven" ; public String getMessage () { return ( message ); } public void setMessage ( String message ) { this . zpráva = zpráva _ } }Několik dalších podrobností o použití jsp:useBean. Nejjednodušší způsob, jak jej použít bean , je použít konstrukci:
< jsp : useBean id = "name" class = "package.class" />načíst beana následně použít jsp:setPropertya jsp:getPropertyupravit a získat jeho vlastnosti (parametry). Existují však dva další způsoby. Nejprve můžete použít formát kontejneru, konkrétně:
< jsp : useBean ... > Tělo </ jsp : useBean >aby bylo zajištěno, že tělo bude spuštěno pouze při beanprvním vytvoření instance, nikoli při nalezení a použití existující instance bean. Jak je uvedeno níže, beanslze jej sdílet, takže ne každý výraz jsp:useBeanvede k nové instanci bean. Za druhé, kromě id a class můžete použít tři další atributy: scope , type a beanName . Tyto atributy jsou popsány níže:
Můžete použít jsp:setPropertydříve popsané beans. Můžete to udělat dvěma způsoby. Nejprve můžete použít jsp:setPropertypo, ale mimo prvek jsp:useBean, jak je znázorněno v příkladu:
< jsp : useBean id = "myName" ... /> ... < jsp : setProperty name = "myName" property = "someProperty" ... />V tomto případě se jsp:setPropertyprovede bez ohledu na to, zda byla nalezena existující instance beannebo byla vytvořena nová instance. Další možností je umístit jsp:setPropertydo těla prvku jsp:useBean, jak je znázorněno v jiném příkladu:
< jsp : useBean id = "myName" ... > ... < jsp : setProperty name = "myName" property = "someProperty" ... /> </ jsp : useBean >To jsp:setPropertyse provádí pouze v případě, že byla vytvořena nová instance objektu, nikoli v případě, že je nalezena existující instance. Akce jsp:setPropertypřijímá následující čtyři atributy:
Pokud nepoužijete ani valueani param, je to stejné, jako byste zadali jméno, které paramodpovídá názvu property. Můžete použít tento princip automatického používání vlastností požadavku, jejichž názvy se shodují s názvy vlastností, a jít dále nastavením názvu vlastnosti na " * " a vynecháním parametrů value a param . V tomto případě server zpracuje platné vlastnosti a parametry dotazu pro shodu identických jmen. Následuje příklad, který se používá beank vytvoření tabulky prvočísel. Pokud parametr numDigitsv datech požadavku existuje, je předán do bean numDigits. Podobně pro numPrimes. JspPrimes.jsp
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > < html > < head > < title > Opětovné použití JavaBeans v JSP < / title > < / head > < body > < h1 > Opětovné použití JavaBeans v JSP </ h1 > < jsp : useBean id = "primeTable" class = "hall.NumberedPrimes" /> < jsp : setProperty name = "primeTable" property = "numDigits" /> < jsp : setProperty name = "primeTable" property = "numPrimes" /> < p > Několik prvočísel znaků < jsp : getProperty name = " primeTable " property = "numDigits" /> : < jsp : getProperty name = "primeTable" property = "numberedList" /> </ p > </ body > </ html > jsp:getProperty actionTento prvek určuje hodnotu vlastnosti bean, převádí ji na řetězec a odesílá do výstupního proudu. Pro provedení akce je třeba nastavit dva atributy: název bean, který je v akci přednastaven jsp:useBean, a název vlastnosti, jejíž hodnotu je třeba určit. Níže je uveden příklad použití této akce:
< jsp : useBean id = "itemBean" ... /> ... < UL > < LI > Počet položek : < jsp : getProperty name = "itemBean" property = "numItems" / > < LI > Jednotková cena : < jsp : getProperty name = "itemBean" property = "unitCost" /> </ UL > jsp:include actionTato akce umožňuje vložit obsah souborů do vygenerované stránky. Syntaxe akce:
< jsp : include page = "relativní URL" flush = "true" />Na rozdíl od direktivy include, která vkládá soubor během fáze překladu stránky JSP, tato akce vloží soubor, když je stránka požadována. To má za následek určitou ztrátu efektivity a eliminuje možnost JSP kódu ve vloženém souboru, ale poskytuje významnou výhodu ve flexibilitě.
Příklad vložení obsahu čtyř souborů na stránku JSP:
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" > < html > < head > < title > Novinky </ title > </ head > < body > < h1 > Novinky </ h1 > < p > Zde jsou výňatky z našich čtyř nejoblíbenějších článků : </ p > < ol > < li >< jsp : include page = "news/Item1 . html" flush = "true" /></ li > < li >< jsp : include page = "news/Item2.html" flush = "true" /></ li > < li >< jsp : include page = " news/ Item3.html" flush = "true" /></ li > < li >< jsp : include page = "news/Item4.html" flush = "true" /></ li > </ ol > </ tělo > </ html > jsp:akce vpředTato akce vám umožňuje předat požadavek jiné statické HTML stránce, servletu nebo stránce JSP. Na rozdíl od akce jsp:includese zpracování aktuální stránky ukončí. Používá jeden atribut page, který musí obsahovat relativní URL , na základě které je objekt řazen request. K původním parametrům dotazu předaným na jinou stránku můžete pomocí akce jsp:parampřidat další parametry . Hodnota atributu pagemůže být buď statická hodnota, nebo hodnota vypočítaná během požadavku, jak je znázorněno v následujících dvou příkladech:
< jsp : forward page = "/utils/errorReporter.jsp" /> < jsp : forward page = "<%= someJavaExpression %>" />Pomocí akce jsp:forwardmůžete také přenést řízení na jinou stránku, ale s podmínkou, že před voláním této akce nebylo nic zapsáno do odchozí vyrovnávací paměti (jinak bude vyvolána výjimka IllegalStateException).
jsp:param action a jsp:params actionTato akce poskytuje informace o typu názvu/hodnoty. Tato akce se používá hlavně spolu s již známými akcemi jsp:includea jsp:forward. Kromě toho jej lze použít také společně s akcí jsp:plugin. V ostatních případech na použití této akce nezáleží. Používá jsp:paramse s akcemi jsp:includea jsp:forwardpředává původní objekt na nové stránky request, které budou rozšířeny o nové parametry. Pokud zadáte nové hodnoty pro již existující parametry, budou to nové hodnoty, které budou mít přednost. Pomocí akce jsp:paramsmůžete nastavit několik parametrů najednou
jsp:plugin actionTato akce vám umožňuje vložit prvek OBJECT nebo EMBED (v závislosti na typu používaného prohlížeče), který je nutný ke spuštění apletů, které používají plugin Java. Jinými slovy, tato akce slouží ke generování HTML pro vložení Java API do stránky JSP. Stejným způsobem můžete vložit URL ke stažení modulů pro Java API od JavaSoft, které poskytuje možnost spouštět aplety uvnitř prohlížeče. Vstupní formulář pro tuto akci vypadá takto:
< jsp : plugin type = "bean|applet" code = "soubor třídy" codebase = "Objekt CodeBase" align = "location" archive = "seznam archivů" height = "height" hspace = "horizontální prostor" jreversion = "verze" name = "název komponenty" vspace = "vertikální mezera" width = "width" nspluginurl = "url" iepluginurl = "url" > < jsp : params > < jsp : param name = "name1" value = "value1" /> < jsp : název parametru = "název2" hodnota = "hodnota2" /> ... < jsp : název parametru = "názevN" hodnota = "hodnotaN" /> </ jsp : params > < jsp : záložní > </ jsp : záložní > </ jsp : plugin >Podívejme se na příklad použití této akce v kódu appletu:
< jsp : plugin type = "applet" code = "Blink.class" width = 300 height = 100 > < jsp : params > < jsp : param name = lbl value = "Ano, je to chutnější než jen nakrájený chléb! " /> < jsp : param name = speed value = "4" /> < jsp : params > < jsp : fallback > Váš prohlížeč z neznámého důvodu nemůže spustit tento applet </ fallback > < / jsp : plugin >Jáva | |
---|---|
Platformy | |
Sun Technologies | |
Klíčové technologie třetích stran | |
Příběh |
|
Vlastnosti jazyka | |
Skriptovací jazyky |
|
Java konference |
|