LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Java na webu IV. - JSP

Servlety jsou skvělé na práci s HTTP protokolem, na psaní HTML jsou ale přinejmenším nevhodné. V dnešním díle seriálu si představíme JavaServlet Pages, tedy nadstavbu servletů sloužící pro tvorbu HTML kódu prokládaného výstupem aplikace.

16.6.2013 14:00 | Petr Horáček | Články autora | přečteno 9453×

JSP neboli JavaServlet Pages, je technologie postavená na Java servletech sloužící především pro ulehčení zápisu výstupu Java aplikace do HTML souborů. Jak jsme si již v minulém díle naznačili, samotné servlety se pro tento účel příliš nehodí.

JSP se používalo podobně jako PHP v podobě spaghetti kódu, HTML zde bylo prokládáno tzv. scriptlety, které nebyly nic jiného než klasická Java. Jak se ale v tomto článku dozvíte, postupem času vznikla celá řada značek a jejich knihoven, které jsou pro tvorbu webových stránek přímo vytvořeny a řeší většinu základních problémů. A abych nezapoměl, JSP slouží v architektuře MVC jako view.

Převlečený servlet

Jak již bylo řečeno v perexu, JavaServlet Pages je nadstavba servletů. Nejlépe si to ukážeme na životním cyklu těchto souborů. JSP uložené v aplikaci při prvním requestu mířeném na něj prochází těmito fázemi:

  1. JSP se přepíše na servlet (soubor s příponou .java),
  2. ten se zkompiluje na soubor s koncovkou .class,
  3. dál se postupuje jako s klasickým servletem, třída se nahraje a poté se opakovaně volá její metoda service(). Protože se JSP kompiluje pouze jednou, jsou další nahrávání takovýchto stránek velice rychlé. Pokud je na souboru JSP provedena nějaká změna, vše se automaticky vrací do bodu 1.

O výše uvedené úkony se u Apache Tomcatu stará engine Jasper 2.

Zavržené scriptlety

JSP je možné prokládat klasickým Java kódem, tzv. scriptlety, k jejich užití slouží značky <% %>, <%= %> a <%! %>. Scriptlety jsou stále podporovány pouze z důvodu jejich výskytu ve starých aplikacích. Následující kód je první a poslední ukázka jejich použití, kterou si v tomto seriálu uvedeme. Funkce je triviální, při každém načtení stránky se zvýší zobrazované číslo o 1.

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <!-- deklarace => tento kód bude umístěn v třídě servletu
        mimo metodu zpracování requestu, zavolá se tedy pouze jednou -->
        <%! int c = 0;%>

        <!-- obyčejný kód Javy provádějící inkrementaci -->
        <% c++;%>

        <!-- exprese => užití této konstrukce funguje stejně jako
        <% out.println(c); %>, jde pouze o zkrácený zápis -->
        <%= c %>
    </body>
</html>

Servletový ekvivalent tohoto kódu by mohl vypadat takto:

import javax.servlet.http.*;
import java.io.*;

public class cPlus extends HttpServlet {
    private int c = 0;

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws IOException {
       c++;
       PrintWriter out = response.getWriter();
       out.println("<!DOCTYPE html><html><head>" +       
       "<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'></head>" + 
       "<body>" + c + "</body></html>");
   }
}

Značky

Roli scriptletů elegantně nahrazuje řada tagů (neboli značek). Ty lze použít takřka na veškeré úkony, které budeme v šabloně potřebovat (nezapomeňte: veškerá logika MVC aplikace je umístěna v modelech a controllerech, JSP slouží view, a proto se stará pouze o vykreslování zaslaných dat).

Tagy obstarávají vypisování proměnných, cyklení, formátování textu, vkládání externích šablon, práci s JavaBeany (o kterých ještě bude řeč) ad. Je dokonce možné vytvářet vlastní knihovny tagů a pokrýt tak i specifické nároky aplikace.

EL

EL je v JSP hojně užívaný jazyk, slouží k vypisování hodnot uložených v requestu, session, stránce či aplikaci. Tato data je možné vypisovat přímo do stránky, či jako paramtry do atributů tagů.

EL je schopné, podobně jako jiné jazyky, vyhodnocovat i logické (and, &&, or ||, not, !), aritmetické (+, -, *, /, div, %, mod) a relační (==, eq, !=, ne, <, lt, >, gt, <=, le, >=, ge) operace. Pokud chceme vypsat hodnotu uloženou v poli či JavaBeanu, můžeme využít tečkovanou konvenci nebo k hodnotám přistupovat přes hranaté závorky.

Zde je několik příkladů EL:

${"Ahoj světe"}
<!-- vypsání řetězce -->

${ahoj}
<!-- vypsání proměnné -->
 
${zdvorilosti.ahoj}
${zdvorilosti[ahoj]}
<!-- dvojí přístup k hodnotě v objektu JavaBean či v poli -->

${5 > 3}
<!-- použití relačních operátorů, vrací True -->

Na další možné kombinace a použití určitě přijdete sami.

JSP tagy

JSP samo o sobě poskytuje jen několik tagů, pro jejich použití není třeba používat žádné externí knihovny. Zde je jejich seznam:

<jsp:forward page="stranka.jsp" />
<!-- přesměrování na další stránku -->

<jsp:include page="stranka.jsp" />
<!-- vložení externí stránky -->

<jsp:useBean id="idBeanu" scope="page/application/request/session" class="trida" />
<!-- vložení JavaBeanu, pokud není zadaný Bean nalezen, vytvoří se nový,
parametr scope udává rozsah platnosti -->

<jsp:setProperty name="idBeanu" property="atribut" value="hodnota" />
<!-- zapíše hodnotu do Beanu, pokud zapisujeme do requestu, použijeme místo
atributu value atribut param -->

<jsp:getProperty name="idBeanu" property="atribut" />
<!-- získá hodnotu z Beanu -->

JSTL tagy

Jak vidíte, samotné JSP tagy příliš funkcionalit neposkytují. Pro účely větvení kódu, cyklení, vkládání proměnných, formátování řetězců apod. jsou zde knihovny tagů JSTL (JSP Stanard Tag Library), jmenovitě: Core, Formatting, SQL, XML, JSTL functions.

Tyto knihovny je třeba do aplikace přidat (například v podobě JAR souboru) a v JSP je nutné vložit prefix je zmiňující. Podrobnou dokumentaci můžete nalézt zde: http://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm.

Core

Tato knihovna obsahuje základní funkce pro vypisování proměnných, větvení kódu, cyklení i práci s URL. Zde je kód pro import knihovny a několik jejích tagů.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- tento tag je potřeba umístit na začátek dokumentu pro import  knihovny --> 

<c:out value="<h1>Ahoj</h1>" />
<!-- slouží pro bezpečné vypisování řetězců a proměnných, díky jeho parametru
escapeXML, který je primárně zapnutý, tento tag vypíše „<h1>Ahoj</h1>“,
tedy &lt;h1&gt;Ahoj&lt;/h1&gt; -->

<c:catch></c:catch>
<!-- pokud se kód mezi těmito tagy nepovede zpracovat,
nezobrazí se chybové hlášení, pouze se tento blok přeskočí a nevypíše -->

<c:if test="${2 > 1}">
  <p>2 je větší než 1<p>
</c:if>
<!-- pokud se operace zadaná pomocí EL v parametru test ukáže
jako pravdivá, vypíše se tělo tagu  -->

<c:forEach var="z" items="${zmrzliny}">
   <c:out value="${z.nazev}"/>
    <c:out value="${z.barva}"/>
</c:forEach>
<!-- vypíše vlastnosti všech zmrzlin ze seznamu -->

Formatting

Knihovna Formatting slouží k formátování zobrazovaných textů, datumů, časů a čísel.

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!-- opět je zde import potřebné knihovny -->

<fmt:formatDate pattern="d. M. yyyy H.mm:ss" value="${datum}" />
<!-- vypíše předaný objekt data v zadaném formátu -->

SQL

Tuto knihovnu se doporučuje nepoužívat. Stará se o přímou komunikaci s databází, tyto úkony ale do viewu rozhodně nepatří.

XML

Jak název napovídá, pomocí tagů z této knihovny můžeme zpracovávat XML soubory.

JSTL functions

Tagy této knihovny slouží převážně k práci s řetězci.

Soubory s koncovkou .tag

Nejjednoduším formou vlastních tagů jsou soubory s příponou .tag, umístěné ve složce /WEB-INF/tags. Obsah těchto JSP, lze v nich tedy používat další knihovny, EL atd. Tagům je možné předává parametry v pomocí atributů. Pokud jsou parametry příliš dlouhé, lze je umístit do těla tagu.

Pomocí tagů můžeme například vytvořit hlavní šablonu stránky (s hlavičkou a patičkou), dalšími tagy doplníme menu a jiné opakované prvky stránky.

Hlavní soubor index.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!-- import vlastní knihovny tagů -->
<%@ taglib tagdir="/WEB-INF/tags" prefix="m" %> 
<!-- otevření vlastního tagu (s předaným atributem titulku), dál se bude nacházet jeho tělo -->
<m:Main titulek="Titulek stránky"> 
    <h1>Ahoj světe</h1>
    <m:Menu/> <!-- vložení tagu Menu -->
    <p>Vítejte na našem webu</p>
</m:Main>

Main.tag:

 <!-- přidává povinný atribut Titulek -->
<%@ attribute name="titulek" rtexprvalue="true" required="true" %>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>${titulek}</title> <!-- zadaný parametr se zde vypíše pomocí EL -->
    </head>
    <body>
        <jsp:doBody/> <!-- místo, do kterého se vypíše tělo tagu -->    
    </body>
</html>

Menu.tag:

<ul class="menu">
    <li>Úvod</li>
    <li>Kontakt</li>
</ul>

Vlastní EL funkce a knihovny tagů

Vlastní tagy můžeme vytvořit také implementací třídy SimpleTagSupport, tímto způsobem se dají vytvořit i složitější funkce zapsané přímo Javou. Další možností je tvorba vlastních EL funkcí. Tyto vymoženosti ale nejsou úplně triviální, a proto se jim budeme raději věnovat v samostatném článku.

Závěr

Tak to je k dnešnímu poněkud rozsáhlejšímu článku všechno. V příštím díle se konečně vrhneme na praktičtější téma, instalaci Javy a vývojového prostředí NetBeans.

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

17.4.2018 0:46 /František Kučera
Dubnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 4. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tématem tohoto srazu bude OpenStreetMap (OSM) aneb svobodné mapy.
Přidat komentář

16.3.2018 22:01 /František Kučera
Kulatý OpenAlt sraz v Praze oslavíme klasicky: u limonády a piva! Přijďte si posedět, dát si dobré jídlo a vybrat z mnoha piv do restaurace Kulový blesk, který najdete v centru Prahy nedaleko metra I. P. Pavlova na adrese Sokolská 13, Praha 2. Sraz se koná ve čtvrtek 22. března a začínáme v 18:00. Heslo: OpenAlt. Vezměte s sebou svoje hračky! Uvítáme, když si s sebou na sraz vezmete svoje oblíbené hračky. Jestli máte nějaký drobný projekt postavený na Arduinu, nějakou zajímavou elektronickou součástku, či třeba i pěkný úlovek z crowdfundingové akce, neváhejte. Oslníte ostatní a o zábavu bude postaráno.
Přidat komentář

13.2.2018 0:41 /František Kučera
Únorový pražský sraz OpenAltu se koná 15. 2. 2018 a tentokrát se vydáme na návštěvu do jednoho pražského datacentra. Sejdeme se v 17:50 v severovýchodní části nástupiště tramvajové zastávky Koh-I-Noor. Po exkurzi se přesuneme do restaurace U Pštrosa (Moskevská 49), kde probereme tradiční témata (svobodný software a hardware, DIY, CNC, SDR, 3D tisk…) a tentokrát bude k vidění i IoT brána od The Things Network.
Přidat komentář

11.2.2018 23:11 /Petr Ježek
Hledáte lehký a rychlý prolížeč PDF souborů? Pokud vás již omrzelo čekat na načítání stránek či jiné nešvary, zkuste xreader.
Přidat komentář

11.2.2018 20:35 /Redakce Linuxsoft.cz
Třetí ročník odborné IT konference na téma Cloud computing v praxi proběhne ve čtvrtek 1. března 2018 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 16 hod. odpoledne. Konference o trendech v oblasti cloud computingu nabídne i informace o konkrétních možnostech využívání cloudů a řešení vybraných otázek souvisejících s provozem IT infrastruktury.
Přidat komentář

15.1.2018 0:51 /František Kučera
První letošní pražský sraz se koná již tento čtvrtek 18. ledna od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Vítáni jsou všichni příznivci svobodného softwaru a hardwaru, ESP32, DIY, CNC, SDR nebo dobrého piva. Prvních deset účastníků srazu obdrží samolepku There Is No Cloud… just other people's computers. od Free Software Foundation.
Přidat komentář

14.11.2017 16:56 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tradičně první čtvrtek před třetím pátkem v měsíci: 16. listopadu od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.11.2017 11:06 /Redakce Linuxsoft.cz
PR: 4. ročník odborné IT konference na téma Datová centra pro business proběhne již ve čtvrtek 23. listopadu 2017 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00. Konference o návrhu, budování, správě a efektivním využívání datových center nabídne odpovědi na aktuální a často řešené otázky, např Jaké jsou aktuální trendy v oblasti datových center a jak je využít pro vlastní prospěch? Jak zajistit pro firmu či jinou organizaci odpovídající služby datových center? Podle jakých kritérií vybrat dodavatele služeb? Jak volit součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně spravovat datové centrum? Jak eliminovat možná rizika? apod.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

20.2.2018 18:48 / Ivan Majer
portal

20.2.2018 15:57 / Jan Havel
Jak využíváte služby cloudu v podnikání?

16.1.2018 1:08 / Ivan Pittner
verejna ip od o2 ubuntu

15.1.2018 17:26 / Mira Harvalik
Re: Jak udělat HTML/Javascript swiping gallery do mobilu?

30.12.2017 20:16 / Michal Knoll
odmocnina

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2018) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze