Hlavní navigace

S Javou na webovém serveru (3)

Lukáš Zapletal 25. 1. 2001

JSP nebo-li Java Server Pages technologie umožňuje vývojářům rychle a snadno vytvářet dynamické weby. Díky tomu, že se oddělí statický a dynamický obsah (JSP stránka a JavaBean komponenta), že Java běží na mnoha systémech, a že je velmi bezpečná, se stává v poslední době velmi populární. V závěru tohoto seriálu se naučíme vytvářet vlastní jednoduché JSP stránky, protože Tomcat má v sobě JSP kompilátor i kontejner.

Článek má však pouze informativní charakter. V žádném případě v něm nehledejte základy programování JSP, protože spoustu důležitých vlastností zde nebude ani zmíněno.

JSP stránky jsou interpretovány a vytvářejí nějaký výstup (obvykle HTML, ale může se jednat i o XML nebo WML). Zapisují se do textových souboru v XML formátu (podobnému HTML). Využívá se zde značek (atributů), které oddělují statické informace od vlastních výkonných. Příklad:

<BODY>
<P>Hello JSP!</P>

<%
  Date date = new Date();
  String today = DateFormat.getDateInstance().format(date);
%>

<P>Today is <%= today %>
</BODY>

JSP rozlišuje několik značek

  • <%! – deklarace se používají pro definování proměnných a metod, které jsou platné pro celou stránku
  • <%= – výrazy se vyhodnotí a výsledek se vloží přímo na stránku
  • <% – scriplety (scripplets) slouží k vlastnímu zadávání kódu Javy
  • <%– – komentáře jsou ignorovány již na straně serveru

JSP nabízí v základní výbavě například přesměrování výjimek na jinou JSP stránku, která je zpracuje a výborný session management, který si nyní předvedeme:

<%
myObject mo = new myObject();
session.putValue("mo",mo);
%>
...
<%
myObject mo2 = (myObject) session.getValue("mo");
%>

Do session lze ukládat pouze platné objekty. Pokud chcete vložit některý z primitivních typů Javy, musíte použít obalovacích tříd z Java Core API (Integer, Float…). Tolik k úplným základům, nyní se vrhneme na JavaBeans komponenty.

JavaBeans komponenty umožňují znovu použít již napsaný kód. Můžete samozřejmě celou aplikaci napsat pomocí scripletu, ale to je nevýhodné. Vzhledem k tomu, že se webové projekty obvykle sestávají z mnoha JSP souborů, museli byste kód pořád dokola opisovat. Jelikož ale vše probíhá v Javě, která je objektově orientovaná, problém řeší právě JavaBeans. Stačí napsat komponentu, která bude dělat konkrétní akci (tahat data z databáze, komunikovat po TCP nebo pouze zapouzdřovat počítadlo přístupů – jako v našem příkladě níže) a pomocí speciálních atributů ji v JSP stránce použít. Říká se, že příklad je nadevšechnu teorii, takže si nadefinujeme jednoduchý JavaBean s proměnnou counter, geter/seter metodami getCounter a setCounter (jen pro ukázku – v praktickém případě by to mohl být atribut udávající zda uložit či neuložit počítadlo do databáze) a metodou count:

package jsptest;

public class CounterBean {
  private long counter = 0;

  public CounterBean() {
  }

  public long getCounter() {
    return counter;
  }

  public void setCounter(long counter) {
    this.counter = counter;
  }

  public long count() {
    return ++counter;
  }
}

Nyní komponentu vložíme do stránky a zprovozníme. K tomu slouží atribut <jsp:useBean, který vytvoří instanci objektu v daném kontextu (application, session, request nebo page). Pokud je instance již vytvořena, vrátí odkaz na ni.

<%@ page import="java.text.*, java.util.*" %>
<%@ page contentType="text/html; charset=iso-8859-1" %>
<HTML>
<HEAD>
<jsp:useBean id="CounterBeanId"
scope="application" class="jsptest.CounterBean" />
<TITLE>Jsp Test</TITLE>
</HEAD>

<BODY>
<P>Hello JSP!</P>

<P>This page has been visited
<%= CounterBeanId.count() %>
times.
</BODY>
</HTML>

Jednotlivé get/set metody Beansů se dají „namapovat“ na proměnné získané z formulářů, a tak usnadnit jejich zpracování. Velkou výhodou JavaBensů je také to, že se jejich instance sdílí ve svém kontextu (session, application nebo request). Jedna stránka může například zpracovat formulář, vytvořit instanci JavaBeansu a přesměrovat požadavek na jinou JSP stránku, která může provést s instancí Beansu nějakou akci a znovu přesměrovat požadavek nebo vyprodukovat výstup. Toto se velmi často používá zejména v session kontextech, kdy se takto požadavky řetězí (request chaining).

Myslím, že jsem osvětlil základní pojmy týkající se Java Server Pages. Po přečtení článku sice nebudete ještě schopni produkovat plnohodnotné a robustní JSP úlohy (musí se dbát také na synchronizaci vláken při mnoha požadavcích zároveň), ale máte celkový přehled o problematice.

Miniseriál o Tomcatu sice končí, můžete se však těšit na nový článek „Enterprise Java na Linuxu“, který přiblíží open source aplikační servery (JBoss, Enhydra…), jak se instalují a co nabízejí.

Našli jste v článku chybu?

4. 7. 2001 13:27

lzap (neregistrovaný)

Ad. Serializable - je to jen priklad :)

Ad. Databaze - nejjednodussi bude pouzit JDBC, ne? Nezapominejte, ze na serveru muzete pouzit vsechny knihovny javy.

lzap





28. 3. 2001 14:30

Martin (neregistrovaný)

Muj dotaz se netýká úplně přímo článku,ale potřeboval bych poradit jak se pomocí jsp připojit do databáze, jsem začátečník a nejak mi to nejde. Předem děkuju

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Vitalia.cz: Jste stále nemocní? Chybí vám zinek

Jste stále nemocní? Chybí vám zinek

Vitalia.cz: Manželka je bio, ale na sex moc není

Manželka je bio, ale na sex moc není

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Podnikatel.cz: Na poslední chvíli šokuje výjimkami v EET

Na poslední chvíli šokuje výjimkami v EET

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

Lupa.cz: Avast po spojení s AVG propustí 700 lidí

Avast po spojení s AVG propustí 700 lidí

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky