JavaServer Pages
| JSP | |
|---|---|
| Rozšíření | .jsp
|
| MIME typ | application/jsp
|
| webová stránka | www.oracle.com/technetwork/java/jsp-138432.html |
V informatice JavaServer Pages , obvykle označovaný zkratkou JSP (také někdy čteno jako Java Scripting Preprocessor ), je technologie webového programování v Javě pro vývoj prezentační logiky (obvykle podle vzoru MVC ) webových aplikací , poskytující obsah . dynamické ve formátu HTML nebo XML . Je založen na sadě speciálních značek v rámci stránky HTML, pomocí kterých lze vyvolat předdefinované funkce ve formě kódu Java ( JSTL ) a/nebo funkce JavaScriptu . Kromě toho vám umožňuje vytvářet nové knihovny značek, které rozšiřují sadu standardních značek (JSP Custom Tag Library ). Knihovny značek JSP lze považovat za rozšíření funkčnosti webového serveru nezávislá na platformě .
Popis
V kontextu platformy Java je technologie JSP korelována s technologií servletů : v době prvního vyvolání jsou stránky JSP ve skutečnosti automaticky přeloženy kompilátorem JSP na servlet . Na stránku JSP lze potom pohlížet jako na reprezentaci servletu na vysoké úrovni. Kvůli této koncepční závislosti i použití technologie JSP vyžaduje na webovém serveru přítomnost kontejneru servletů a také specifického serveru JSP nazývaného JSP engine (který zahrnuje kompilátor JSP); obvykle jsou kontejnerový servlet a JSP engine integrovány do jednoho produktu (například Tomcat dělá obojí).
JSP je alternativní technologie k mnoha dalším přístupům ke generování dynamických webových stránek, například PHP nebo ASP nebo tradičnější CGI . Od těchto technologií se neliší ani tak typem dynamického obsahu, který lze produkovat, ale vnitřní architekturou softwaru, který tvoří webovou aplikaci (a následně dobou vývoje, přenositelností, modifikovatelností , výkonem a dalšími aspekty. kvalita softwaru ).
MVC paradigma
Sun Microsystems doporučuje používat vzor Model-View-Controller se stránkami JSP k rozdělení prezentační vrstvy od zpracování požadavků a ukládání dat. Ke zpracování dat se používají běžné servlety nebo vyhrazené stránky JSP. Po dokončení zpracování přejde řízení na stránku JSP, která se používá pouze k zobrazení výstupu. Tato poslední stránka JSP by měla obsahovat pouze akce a značky HTML , XML a JSP; stránka by měla k získání dat využívat JavaBeans .
Jinými slovy, při vývoji webové aplikace konvence diktuje, že v JSP je co nejméně kódu Java a že současnost jde o vyvolání nativního kódu Java (objektů a metod ) implementovaného v samostatných speciálních třídách nazývaných JavaBeans. Toto oddělení umožňuje snadné opětovné použití kódu Java bean, jakmile je vyvolán v libovolném požadovaném bodě webové aplikace.
Struktura stránky JSP
JSP je textový dokument napsaný se specifickou syntaxí , který představuje webovou stránku s částečně nebo zcela dynamickým obsahem. Zpracováním stránky JSP motor JSP dynamicky vytváří konečnou stránku HTML, která se zobrazí ve webovém prohlížeči uživatele . Stránka JSP může obsahovat tři typy prvků, které odpovídají třem různým režimům zpracování: statický obsah , direktivy a skripty .
Statický obsah
Statický obsah jsou části stránky JSP, které musí být zachovány jako celek na dynamicky generované webové stránce, bez jakéhokoli zpracování. Proto musí být napsány v jazyce značek, který může klient přímo používat, například HTML (pokud je klientem prohlížeč), WML (pokud je klient mobilní telefon , který přistupuje na stránku ve WAP ) nebo XML (různé typy klienta).
Směrnice
Direktivy JSP lze interpretovat jako příkazy zaměřené na stroj JSP. Tyto příkazy se provádějí ve fázi předběžného zpracování před zpracováním skriptovaných částí stránky . Dvě hlavní směrnice jsou includea page.
include: Instruuje stroj JSP, aby do aktuálního souboru zahrnul další soubor. To je ekvivalentní zkopírování a vložení obsahu označeného souboru do aktuálního souboru. (Taková směrnice je podobná té, kterou očekává preprocesor C / C ++ ). Tuto direktivu lze použít například k vytváření opakujícího se obsahu na různých stránkách webu.
<%@ include file="filedaincludere.ext" %>
page: existuje mnoho variant směrnicepage, které mají zcela odlišné účely:
page importodpovídáimportJavě a označuje, které třídy budou použity ve zbytku dokumentu;<%@ page import="java.util.*" %> //importa tutte le classi del package java.util
page contentTypeoznačuje, v jakém formátu je dokument napsán (například HTML nebo XML)<%@ page contentType="text/html" %>
page errorPageurčuje "chybovou stránku", která se zobrazí, pokud zpracování dynamické stránky selže kvůli výskytu nějaké výjimkypage isErrorPageoznačuje, zda aktuální je chybová stránka<%@ page isErrorPage=false %> //specifica che non è una pagina di errore
page isThreadSafeoznačuje, zda je servlet generovaný stránkou JSP bezpečný pro vláknapage tagliboznačuje, že stránka JSP využívá knihovnu značek . Knihovna musí být identifikována pomocí Uniform Resource Identifier ( URI )<%@ taglib prefix="myprefix" uri="taglib/miataglib.tld" %>
Skriptování
Třetí kategorií prvků na stránce JSP jsou úryvky zdrojového kódu (Java). Tyto fragmenty kódu jsou pak spuštěny Java Virtual Machine a vydávají text, který přispívá ke zdroji generované webové stránky. Vyvolání kódu Java je klíčem ke generování dynamických stránek v JSP; například stránky JSP na webu pro online nakupování mohou obsahovat kód Java, který kontroluje dostupnost produktu a vytváří stránku s těmito informacemi.
Prohlášení
Stránka JSP může obsahovat deklarace atributů a metod zavedené sekvencí <%! . Tyto atributy a metody se stanou součástí třídy "servlet" generované kompilátorem JSP (jejich umístění v textu stránky JSP je irelevantní). Vývojář obeznámený s technologií servletů může využít této možnosti, například k přepsání "metod životního cyklu" servletů, jako je jspInit.
<%! int serverInstanceVariable = 1; %>
Výrazy
Výrazy jsou uvozeny sekvencí <% = a obsahují jakýkoli Java výraz. Během zpracování stránky JSP je výraz vyhodnocen jádrem JSP, výsledek je převeden na řetězec a řetězec je vložen do kódu HTML/XML na místo, které odpovídá místu, kde se vyskytuje samotný výraz.
<body>Sei l'utente registrato nr. <%= registroUtenti.conta() %></body>
Skriptlet
Skriptlety jsou úryvky kódu vložené kdekoli v textu. Koncepčně si můžete představit, že během konstrukce dynamické webové stránky zahrne engine JSP statický obsah bez zpracování, postupuje v dokumentu shora dolů a okamžitě spustí jakékoli skriptlety, na které se během operace narazí. Technicky jsou tyto skriptlety zahrnuty v metodách servletů generovaných stránkou JSP v rámci metod, které vytvářejí odpověď na požadavek HTTP .
Implicitní proměnné
Prvky kódu na stránce JSP mohou odkazovat na sadu předdefinovaných proměnných:
out: představuje výstupní proud , na kterém je webová stránka vytvořena. Je to objekt třídyJSPWriter. Její použití je často implicitní (například ve výrazech), ale v případě potřeby lze na tuto proměnnou odkazovatpage: představuje servlet generovaný stránkou JSPpageContext: objekt třídyPageContext, který obsahuje data spojená s celou stránkou. Objekt lze přenést z jedné stránky JSP na druhourequest- Objekt třídyHttpServletRequestpředstavující požadavek HTTP , který vedl k aktivaci stránky JSP / servleturesponse: objekt třídyHttpServletResponsepředstavující odpověď HTTP, která má být odeslánasession: objekt třídyHttpSessionpředstavující relaci HTTP, v rámci které byla stránka JSP vyvolánaapplication: umožňuje přistupovat k objektům a ukládat je, aby byly přístupné všem uživatelům a upravitelné z libovolné stránkyconfig: často se nevyužívá, protože informace zpřístupněné tímto implicitním objektem jsou obecně nastaveny a detekovány automaticky.
Akce JSP
Akce JSP jsou značky XML , které vám umožňují řídit určité aspekty chování webového serveru . Některé příklady jsou následující:
jsp:include: předá kontrolu jiné stránce JSP s vrácením kontroly na konci zpracování; podobné volání proceduryjsp:forward: dává trvale kontrolu nad jinou stránkou JSPjsp:param: zavádí další parametr v kontextu akcí jakoincludeaforward.
JSP Tag Libraries
Kromě předdefinovaných akcí mohou vývojáři přidat akce jimi vyvinuté pomocí rozhraní API rozšíření značek JSP. Vývojáři píší třídu Java, která implementuje jedno z rozhraní značek, a poskytují popis XML knihovny, ve které jsou specifikovány značky a třídy java, které je implementují.
Podívejme se na následující kód:
<% @ taglib uri = "mytaglib.tld" prefix = "myprefix"%> ... <myprefix: myaction> <% - úvodní značka%> ... </ myprefix: myaction> <% - závěrečná značka%> ...
Kompilátor JSP načte soubor mytaglib.tld a uvidí, že značka 'myaction' je implementována třídou 'MyActionTag'. Při prvním použití značky v souboru se vytvoří instance 'MyActionTag'. Poté (a kdykoli je značka použita), bude při nalezení úvodní značky vyvolána metoda ' doStartTag ()' . Prozkoumá se výsledek otevření tagu a určí se, jak zpracovat obsah tagu. Obsah je text mezi úvodní a závěrečnou značkou. Metoda doStartTag () může vrátit jednu z následujících hodnot:
- SKIP_BODY - obsah tagu nebude skenován.
- EVAL_BODY_INCLUDE – zpracovat obsah značky.
- EVAL_BODY_TAG - zpracovat obsah TAGu a odeslat výsledek do výstupního streamu.
POZNÁMKA : Pokud značka rozšiřuje třídu BodyTagSupport , bude vyvolána, když bude tělo zpracováno těsně před vyvoláním metody doEndTag . Tato metoda se používá k implementaci konstrukcí smyčky.
Když je nalezen uzavírací tag, je vyvolána metoda doEndTag . Tato metoda může vrátit jednu z následujících hodnot.
- EVAL_PAGE – označuje, že má být zpracován zbytek stránky JSP.
- SKIP_PAGE - označuje, že by nemělo docházet k žádnému dalšímu zpracování. Ovládací prvek opustí stránku JSP. Používá se pro dopředné akce.
Výše popsaná značka MyAction by mohla mít implementaci podobnou této:
public class MyActionTag rozšiřuje TagSupport {
// Uvolní všechny proměnné instance.
public void release () {...}
public MyActionTag () {...}
// volána pro počáteční značku
public int doStartTag () {...}
// volána na koncové značce
public int doEndTag () vyvolá výjimku JspTagException {...}
}
Internacionalizace
Internacionalizace stránek JSP je dosažena pomocí stejné techniky, která se používá v běžných aplikacích Java, tedy pomocí balíků zdrojů .
Příklady
Následující úryvek navrhuje, jak byste mohli vytvořit záhlaví na různé webové stránky, díky čemuž se prezentace bude v některých detailech lišit (například tím, že odkaz na aktuální stránku nebude možné kliknout):
<jsp: include page = "header.jsp"> // zahrnout standardní část <jsp: param name = "tato stránka" value = "contacts" /> // Poskytuji konkrétní informace </ jsp: include>
Následující příklad ukazuje, jak konzistentně spravovat vkládání apletu na webovou stránku. Před příchodem značky <OBJECT> neexistoval žádný jedinečný způsob integrace apletů. Tato značka je poměrně řídká a doufejme, že v budoucnu bude integrována pro podporu dynamických atributů. V současné době značka nepodporuje dynamická volání apletu; pokud máte například aplet, který vykresluje graf, který vyžaduje, aby byly body předány jako parametry, nemůžete použít značku jsp: params , pokud nejsou body konstantní. Proto není možné iterovat přes ResultSet a vytvářet značky jsp: param. Každou značku jsp tedy musíme spravovat ručně: param; každá z těchto značek však může mít dynamický název a dynamický obsah.
<jsp: typ pluginu = výška apletu = "100 %" šířka = "100 %"
archiv = "myjarfile.jar, myotherjar.jar"
codebase = "/ applety"
kód = "com.foo.MyApplet">
<jsp: params>
<jsp: param name = "enableDebug" value = "true" />
</ jsp: params>
<jsp: záložní>
Váš prohlížeč nepodporuje applety.
</ jsp: záložní>
</ jsp: plugin>
V následujícím úryvku je vytvořen nebo zpřístupněn objekt s názvem myBean , který patří do třídy MyBean balíčku com.foo a který bude přístupný po dobu trvání požadavku. To znamená, že objekt bude přístupný a platný na všech stránkách, které jsou volány prostřednictvím značek <jsp: include> a <jsp: forward> ze stránky, která jako první přijala požadavek. Atribut rozsahu může mít následující hodnoty:
- požadavek - atribut bude platný ve všech po dobu trvání požadavku. Jakmile bude požadavek zpracován všemi stránkami JSP, bude objekt odstraněn.
- stránka - atribut bude dostupný pouze pro aktuální stránku.
- session - atribut je dostupný po dobu trvání relace uživatele.
- aplikace - atribut je dostupný pro každou instanci a nikdy není dereferencedován. Je to stejné jako definování statické nebo globální proměnné.
<jsp: useBean id = "myBean" class = "com.foo.MyBean" scope = "request" /> <jsp: getProperty name = "myBean" property = "lastChanged" /> <jsp: setProperty name = "myBean" property = "lastChanged" value = "<% = new Date ()%>" />
JSP 2.0
Nová verze specifikace JSP obsahuje nové funkce zaměřené na zvýšení produktivity vývojářů. Podrobně:
- Expression Language (EL), který umožňuje vývojářům vytvářet šablony stylů (jako jsou šablony Velocity );
- rychlejší a jednodušší způsob vytváření nových značek.
Související položky
Další projekty
Wikimedia Commons obsahuje obrázky nebo jiné soubory na stránkách JavaServer Pages
Externí odkazy
- Oficiální stránka na oracle.com .
- Oficiální Sun tutorial na java.sun.com .
- Bezplatné výukové programy a průvodci na Courses.coreservlets.com . Získáno 12. října 2006 (z originálu archivováno 19. ledna 2007) .