Java programozási nyelv 2007-2008/ősz 9. óra. Java Server Pages. JSP technika alapjai



Hasonló dokumentumok
Szervlet-JSP együttműködés

A WEB programozása - JSP1 dr.gál Tibor őszi félév

JEE tutorial. Zsíros Levente, 2012

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

Web-fejlesztés NGM_IN002_1

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

JavaServer Pages (JSP) (folytatás)

A JavaServer Pages (JSP)

A JavaServer Pages (JSP)

Interaktív weboldalak készítése

A JavaServer Pages (JSP)

Bevezető. Servlet alapgondolatok

Stateless Session Bean

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Webshop készítése ASP.NET 3.5 ben I.

JAVA webes alkalmazások

Szerver oldali Java programozás /II. 1. óra. Elemkönyvtárak. Elemkönyvtárak használata Saját elemkönyvtár készítése.

JavaServer Pages programozóknak

Java és web programozás

Java technológiák - ANTAL Margit. komponensek. A HTTP protokoll. Webkonténerek és szervletek. Egyszerű HTTP. ANTAL Margit.

JSP (Java Server Pages) technológia

Java Servlet technológia

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Java programozási nyelv 4. rész Osztályok II.

JSP életciklusa Szkript elemek, implicit objektumok, bean-ek, EL include, (forward) Visszatekintés MVC

A JSP életciklusa Szkript elemek Dinamikus tartalom létrehozása Kifejezés nyelv Tartalom újrafelhasználása Vezérlés átadása Visszatekintés

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Java Servletek alapjai

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Már megismert fogalmak áttekintése

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Web-fejlesztés NGM_IN002_1

Menetkövetés lehetőségei

OOP: Java 8.Gy: Abstract osztályok, interfészek

Felhasználói leírás a DimNAV Server segédprogramhoz ( )

A Java EE 5 plattform

PHP-MySQL. Adatbázisok gyakorlat

JSP technológia. A JSP elemek kétféle szintaxissal használhatók: A JSP

Java grafikai lehetőségek

A JSP életciklusa Szkript elemek Dinamikus tartalom létrehozása Kifejezés nyelv Tartalom újrafelhasználása Vezérlés átadása Visszatekintés

Az új be- és kimenet könyvtár

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

A Java Server Pages technológia. JSP és JSP elemkönyvtárak, JSTL alapok

Java programozási nyelv 5. rész Osztályok III.

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Programozási technológia

MVC Java EE Java EE Kliensek JavaBeanek Java EE komponensek Web-alkalmazások Fejlesztői környezet. Java Web technológiák

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez

2. rész: JSP-k és szervletek készítése. Bakay Árpád NETvisor kft (30)

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Java programozási nyelv 6. rész Java a gyakorlatban

Imperatív programozás

Programozási nyelvek Java

Web-fejlesztés NGM_IN002_1

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

A WEB programozása - Bevezetés őszi félév Dr. Gál Tibor

JAVA PROGRAMOZÁS 3.ELŐADÁS

Kompozit alkalmazások fejlesztése. IBM WebSphere Portal Server

Segédanyag: Java alkalmazások gyakorlat

OOP és UML Áttekintés

Algoritmus terv 3. Fejezet: Folyamatok meghatározása

SZAKDOLGOZAT. Csete Gábor DEBRECEN 2008.

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Cikktípusok készítése a Xarayában

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

Adatintegritás ellenőrzés Felhasználói dokumentáció verzió 2.0 Budapest, 2008.

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

DAT adatcserefájl AutoCAD MAP DWG mapobject konvertáló program dokumentáció

AWK programozás, minták, vezérlési szerkezetek

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Az Educatio weboldalain elhelyezhető hirdetések technikai paraméterei

Swing GUI készítése NetBeans IDE segítségével

TERC V.I.P. hardverkulcs regisztráció

Tájékoztató. Használható segédeszköz: -

Segédanyag: Java alkalmazások gyakorlat

Objektumorientált programozás C# nyelven

4. Javítás és jegyzetek

Biztonság java web alkalmazásokban

Programozás II gyakorlat. 7. Példák a polimorfizmus alkalmazásaira

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

Java Programozás 11. Ea: MVC modell

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Programozási nyelvek Java

Segédanyag: Java alkalmazások gyakorlat

Programozási nyelvek Java

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

OOP: Java 8.Gy: Gyakorlás

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

PC Connect. Unique ewsletter. program leírás

Java szervlet technológia

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

Átírás:

Java programozási nyelv 2007-2008/ősz 9. óra Java Server Pages JSP technika alapjai legradi.gabor@nik.bmf.hu szenasi.sandor@nik.bmf.hu

Java Server Pages Témakörök JSP architektúra Scriptletek elhelyezése a kódban JSP direktívák JSP működése 2

JSP kialakulásának okai A szervletek egy jól használható technikát jelentenek a dinamikus weboldalak készítése terén, a gyakorlatban azonban számos probléma merült fel: A szervlet kódja már egy közepes méretű weboldal esetén is áttekinthetetlen lett a sok HTML formázási parancstól A szerveroldali programok készítése és a megjelenő weboldalak küllemének kialakítása általában két külön személyt igényel. Amennyiben a szervletből generáljuk a HTML kódot, ez nagyon nehezen oldható meg A szervlet kódja miatt nincs lehetőség külső HTML szerkesztő programok használatára sem Ezekre a megoldást a szerveroldali program és a felhasználó felé küldött HTML oldal kódjának szétválasztása jelenti Ideális esetben az előbbit a már megismert szervletek, az utóbbit pedig JSP oldalak segítségével oldják meg. Ez az úgynevezett Model 2 architektúra 3

JSP architektúra A JSP oldalak felépítése hasonló a gyakorlatban már bevált scriptnyelvek (PHP stb.) működéséhez A JSP felfogható egy kifordított szervletként: Szervlet java kód, amely a kimenetre küld XHTML kódokat JSP egy XHTML oldal, ami a dokumentumba ágyazva tartalmaz Java kódrészleteket is A két technika tehát nem válaszható el egymástól, a programkód HTML tartalom mennyisége alapján célszerű választani közülük Technikailag a különbség elenyésző, a JSP lapok tulajdonképpen ugyanúgy szervletként működnek a konténerben (lásd később részletesebben) A project tervezés során eleve célszerű az üzleti logikát szervletekkel megvalósítani (összetett programozói feladat), a felhasználó felé irányuló megjelenítési szintet pedig JSP oldalak segítségével megoldani (designer feladat, minimális programozással) 4

JSP oldal készítése NetBeans alatt File/New file/web/jsp JSP állomány neve Elhelyezkedése a csomagban Csomagon belül alkönyvtár File/New file/web/jsp 5

JSP oldal telepítése a szerveren Önállóan működő szerver esetén Az elkészített JSP állomány bemásolható a h:\hallgatoweb könyvtárba Ezt követően elérhető az alábbiak szerint: http://localhost/hweb/jspnev.jsp A Tomcat szerver a kiterjesztés alapján tudja, hogy az állományt nem letölteni kell, hanem szervletként futtatni és a kimenetét elküldeni a kliens felé NetBeans beépített szerver esetén Külön telepítésre nincs szükség, a JSP állomány eleve a webalkalmazás könyvtárában jön létre Futtatása hasonló az eddig megismertekhez: http://localhost:8084/jspteszt/jspnev.jsp Töréspontok elhelyezése, soronkénti futtatás az eddig megismertekhez hasonlóan itt is működik 6

Java Server Pages Témakörök JSP architektúra Scriptletek elhelyezése a kódban JSP direktívák JSP működése 7

Scriptletek beágyazása Egy JSP lap felfogható egy XHTML oldalként, amely a dinamikus tartalom generálása érdekében tartalmazhat Java kódrészleteket. Ezeket nevezzük scriptleteknek A scriptletek <% kezdő és a %> lezáró jelek közé kerülhetnek a JSP oldal tetszőleges pontján Az alábbiakat tartalmazhatják: Változó deklaráció Primitív változókkal, objektumokkal végzett műveletek A lokálisan deklarált változókon túl van lehetőség a környezet által biztosított objektumokhoz való hozzáférésre is (következő oldalon részletesebben) Ciklus/elágazás Ebben az esetben nem kötelező a megnyitott blokkot a scriptleten belül lezárni, azonban ügyelni kell arra, hogy a teljes JSP lap tekintetében a blokkok megfeleljenek a Java nyelv szabályainak 8

Scriptletekben előre definiált változók HttpServletRequest request A már megismert, kérési adatokat tartalmazó objektum HttpServletResponse response A már megismert, a válasz adatait tartalmazó objektum JspWriter out Közvetlenül a kimenet írására használható. Működése a PrintWriter objektumokhoz hasonló, csak máshogy pufferel HttpSession session A már megismert menetkövető objektum. A kérésből automatikusan lekérdezésre kerül, azonnal használható (beállítható, hogy ne jöjjön létre, hiszen bizonyos alkalmazásoknál ez felesleges) ServletContext application A webalkalmazást reprezentáló objektum, a konténer paramétereihez enged hozzáférést PageContext pagecontext A kiszolgáló adataihoz enged hozzáférést 9

Egyszerű scriptlet példa Napszaknak megfelelő üdvözlet <html> <head><title>illedelmes JSP</title></head><body> <% int ora = java.util.calendar.getinstance getinstance().get get(java.util.calendar.hour_of_day); if (ora < 7) {%> Jó reggelt! <%} else if (ora > 20) {%> Jó estét! <%} else {%> Jó napot! <% } %> </body> </html> 10

Egyszerű scriptlet példa Listázzuk a tol és ig paraméterek közötti számokat <html> <head><title>lista JSP</title></head> <body> <% for(int i = Integer.parseInt parseint(request.getparameter getparameter("tol")); i <= Integer.parseInt parseint(request.getparameter getparameter("ig")); i++) { } %> </body> </html> out.println println(i); Kimenete: 11

További lehetőségek Ha csak egy kifejezés (változó) értékét kell kiírni az XHTML oldalba, használható a <%= kifejezés %> tag is Változó deklarációjához használható a <%!... %> Pl. írjuk ki 1-től 10-ig a számok kétszeresét és négyzetét <html> <head><title>lista JSP</title></head> <body> <table> <tr><td>szám</td><td>kétszeres</td><td>négyzet</td></tr> <% for(int i = 1; i <= 10; i++) { %> <tr> <td><%= i %></td> <td><%= i*2 %></td> <td><%= i*i %></td> </tr> <% } %> </table> </body> </html> 12

Java Server Pages Témakörök JSP architektúra Scriptletek elhelyezése a kódban JSP direktívák JSP működése 13

JSP direktívák A direktívák segítségével van lehetőség a JSP oldal (illetve a háttérben működő szervlet) működésének befolyásolására Míg a JSP lap a küldendő tartalomról szól, addig a direktívák határozzák meg, hogy milyen tartalomtípust küldjön az oldal, milyen csomagokat importáljon, hogyan pufferelje a kimenetet, miként kezelje a hibákat stb. Direktívák általános alakja az alábbi: <%@direktíva attribútum= érték %> A direktíva nevének megadásán túl tehát értéket lehet adni egy attribútumának is Példa direktíva használatára: <%@page import= java.util.* %> 14

A page direktíva attribútumai contenttype Megadja, hogy milyen legyen a generált lap tartalomtípusa <%@page contenttype= text/plain %> import Megadja, hogy az oldal fordítása során milyen külső csomagokat kell importálni (vesszővel elválasztva többet is meg lehet adni egyszerre) <%@page import= java.util.* %> session Értéke lehet true vagy false, azt határozza meg, hogy az oldalon belül szükség van-e a session változóra (alapértelmezett értéke igen, ez azonban gyakran felesleges) <%@page session= true %> errorpage Megadja, hogy melyik lapot kell megjeleníteni, ha a kiszolgálóhoz ér a lap által dobott kivétel <%@page errorpage= /hibakezelo.jsp %> 15

Egyéb direktívák, tag-ek include Még a fordítás előtt, mint statikus állományt beszúrja a megadott állományt a JSP oldalba. Beszúrható másik JSP oldal(részlet) is, ilyenkor a fordításkor a két kód együtt fordítódik le <%@include file= /fejlec.html %> jsp:include Az előzőhöz hasonló a feladata, azonban ez nem a fordítás közben fűzi be a megadott fájlt, hanem a kérés kiszolgálása során. Ilyenkor a szerver kiértékeli a megadott erőforrást es az eredményét beszúrja az oldalba (a kérésben érkező paraméterek továbbításra kerülnek, és van lehetőség új paraméterek hozzáadására is) <jsp:include page= /szemelyiadatok.jsp > <param name= neptun value= uccg17 /> </jsp:include> jsp:forward A kérés továbbítása egy másik erőforrás irányába <jsp:forward page= /sikertelenbelepes.jsp /> 16

Java Server Pages Témakörök JSP architektúra Scriptletek elhelyezése a kódban JSP direktívák JSP működése 17

JSP működése a háttérben JSP oldal Hogyan működik a valóságban alábbi JSP oldal? <%@page contenttype="text/html"%> <%@page pageencoding="utf-8"%> <%@page import="java.util.calendar"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head><title>illedelmes JSP</title></head><body> <% int ora = Calendar.getInstance getinstance().get get(calendar.hour_of_day); if (ora < 7) {%> Jó reggelt! <%} else if (ora > 20) {%> Jó estét! <%} else {%> Jó napot! <% } %> </body> </html> 18

JSP működése a háttérben Szervlet Az oldal első hozzáférésekor előáll és lefordul az alábbi szervlet: package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; import java.util.calendar; public final class Illedelmes_jsp extends org.apache.jasper.runtime.httpjspbase implements org.apache.jasper.runtime.jspsourcedependent { private static java.util.list _jspx_dependants; public Object getdependants() { return _jspx_dependants; } public void _jspservice(httpservletrequest request, HttpServletResponse response) throws java.io.ioexception, ServletException {... 19

JSP működése a háttérben Szervlet Szervlet kódjának folytatása (változók beállítása): JspFactory _jspxfactory = null; PageContext pagecontext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try { _jspxfactory = JspFactory.getDefaultFactory(); response.setcontenttype("text/html;charset=utf-8"); pagecontext = _jspxfactory.getpagecontext(this, request, response, null, true, 8192, true); _jspx_page_context = pagecontext; application = pagecontext.getservletcontext(); config = pagecontext.getservletconfig(); session = pagecontext.getsession(); out = pagecontext.getout(); _jspx_out = out;... 20

JSP működése a háttérben Szervlet Szervlet kódjának folytatása (ismerős rész): out.write("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n"); out.write(" \"http://www.w3.org/tr/html4/loose.dtd\">\n"); out.write("<html>\n"); out.write("<head><title>illedelmes JSP</title></head><body>\n"); int ora = java.util.calendar.getinstance().get(java.util.calendar.hour_of_day); if (ora < 7) { out.write("\n"); out.write("jó reggelt!\n"); } else if (ora > 20) { out.write("\n"); out.write("jó estét!\n"); } else { } out.write("\n"); out.write("jó napot!\n"); out.write("\n"); out.write("</body>\n"); out.write(" </html>\n");... 21

JSP működése a háttérben Szervlet } } Szervlet kódjának folytatása (hibakezelés stb.): } catch (Throwable t) { if (!(t instanceof SkipPageException)){ out = _jspx_out; } if (out!= null && out.getbuffersize()!= 0) out.clearbuffer(); if (_jspx_page_context!= null) _jspx_page_context.handlepageexception(t); } finally { if (_jspxfactory!= null) _jspxfactory.releasepagecontext(_jspx_page_context); } Az így létrejött szervlet fogja valójában fogadni az összes, a JSP laphoz irányuló kérést. Amennyiben a JSP lap megváltozott, akkor (beállítástól függően) a webkiszolgáló automatikusan újra elkészíti és lefordítja ezt a szervletet 22

Gyakorló feladat Készítse el az alábbi alkalmazást JSP oldalak segítségével: A nyitóképernyőn jelenjenek meg az alábbi táblázatok: az egyik 360 sorban tartalmazza fokonként a megfelelő szinusz értéket koszinusz értéket tangens értéket a másik egy 10x10-es szorzótábla A generált oldal alján legyen egy form, ahol meg lehet adni egy fokot, illetve két szorzandót. A submit gomb lenyomására jelenjen meg ugyanez az oldal (esetleg ennek egy másolata a többlet kóddal kiegészítve), amely a 360 soros táblázatból csak a szükséges sort, a szorzótáblának mind a 100 elemét, de a választott sort és oszlopot más héttérszínnel jeleníti meg. Adjon lehetőséget új számok megadására is! 23

Házi feladat JSP oldal segítségével készítse el az alábbi alkalmazást: Az első oldalon jelenjen meg egy formázott fejlécben a program neve (Szám kitaláló), készítője, a szerver címe és a pontos idő. Még ezen az oldalon legyen lehetőség az alábbi két játék közül választani: A, a gép által kitalált számot kell eltalálnunk A kezdőoldalon erre a linkre kattintva a következő oldalon jelenjen meg két szám, amelyek között a gép választott egy véletlen számot (a minimum 1..100, a maximum 100..200 között legyen, a keresett pedig ezek között) Ez alatt legyen egy szövegbeviteli mező, amelyben a felhasználó egy tippet tud megadni. A szám megadása után az Elküldés gombra kattintva a következő oldalon jelenjenek meg ugyanezek az adatok, kiegészítve azzal, hogy a keresetthez képest kisebb vagy nagyobb az utoljára megadott A program a session objektumba a szükséges paramétereken (min, max, keresett szám, tippek száma stb.) túl folyamatosan tárolja el a felhasználó tippjeit is, egy formázott táblázatban ezeket is jelenítse meg minden lépés után, a legközelebbit más színnel rajzolva. Alatta az összes tipp száma legyen. Amennyiben a felhasználó eltalálta a számot, az oldal alján jelenjen meg egy plusz mező, ahol megadhatja a nevét. Az itt található Elküld gombra kattintva a következő oldalon jelenjen meg egy oklevél a nevével és a játék adataival B, ugyanez a játék, csak a gép tippeljen A felhasználó megad egy számot, majd a gép tippjeire válaszol, hogy kisebb vagy nagyobb. Oklevél nyomtatása nélkülözhető 24

Ajánlott irodalom Az óra anyagához kapcsolódó irodalom Nyékyné Gaizler Judit: J2EE útikalauz Java programozóknak; ELTE TTK Hallgatói alapítvány, Budapest 115 135. o. Jason Hunter: Java szervletek programozása; O Really-Kossuth, Budapest, 2002 546 577. o. The J2EE 1.4 Tutorial Chapter 12: JavaServer Pages Technology http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html http://java.sun.com/j2ee/1.4/docs/tutorial/doc/j2eetutorial.pdf 25