You are on page 1of 14

A Java Server Pages

(JSP)
bemutatsa s krnyezetnek kialaktsa

WEB szerver oldali fejleszti s futtat krnyezet kialaktsa Linux opercis rendszeren 2001. prilis
Javtott vltozat

Ksztette: Nyiri Imre nyimre@freemail.hu

(0) Bevezets
A ma kszl alkalmazsok jelents rsze az n rteg modell elve alapjn kszl. Ez a paradigma annyira elretrt, hogy mostanban mg a rgi alkalmazsok is e modell kapcsn kapjk meg az 1 rteg, illetve a vastag kliens jelzt. Persze ebben a felfogsban nincs semmi j, hiszen a nagyobb programokat mindig is gy terveztk, hogy azok vertiklis s horizontlis szoftver rtegekbl lljanak. Itt a rteg sz arra is utal, hogy az egymssal kommuniklni tud szoftver komponensek hny klnll futtat krnyezetre bonthatak. Amennyiben alaposan megvizsgljuk a Unix, Windows rendszereket, akkor belthat, hogy ez a koncepci mr nagyon rgi (lsd a *.so s *.dll file-okat, mint szervereket). Egy 3 rteg alkalmazs tipikus kialaktsa a kvetkez: ADATBZISKEZEL (AB) ZLETI LOGIKA (L) USER INTERFACE (UI) rtegek. Itt az L/AB s a UI/L rtegek egymshoz val viszonya akr egy-egy kliens szerver modell alapjn is elkpzelhet. Az L rteg nagyjbl standard rszt megvalst alapszoftvert alkalmazs szervernek nevezzk, aminek taln a legfontosabb rsze egy WEB (HTTP) szerver. A WEB szerver kr pthetjk ki azt a funkcionalitst, amit az alkalmazsunk ignyel. Mirt is alkalmas erre a HTTP protokoll? A vlasz gy gondolom a programozselmlet tpus fogalmban keresend. TCP szlltsi rteg, illetve annak socket vagy TLI (transport layer interface) API-ja csak egy tpusnlkli byte-folyamot bocst rendelkezsnkre, ami mg nagyon alacsonyszint eszkz azoknak, akik pldul egy internetes ruhzat akarnak kialaktani. Ezzel szemben a HTTP s a hozzkapcsold trs protokollok s fogalmak (pl.-ul: MIME) egy tpusos eszkzt bocstanak rendelkezsnkre, azaz a rtegek kztt teljes objektumok is kzlekedhetnek (lsd. CORBA). Ez jelenti az igazi ert. A HTTP azonban nmagban nem jelent teljes megoldst, ezrt ms eszkzkkel egytt (CORBA, RMI, ) rdemes azt hasznlni s gy el is jutottunk az alkalmazs szerver fogalmhoz. Az UI rteg egy html/xml/Java alap (esetleg ActiveX) vkonykliens alkalmazs lehet. Az AB rteg pedig mr mindenki szmra ismert, hiszen az Oracle, DB/2, szoftverek jl rzkeltetik azt, hogy miket is kell e rtegben megvalstani, illetve milyenek azok a hlzati protokollok (pl. Net *8), amelyek az AB szolgltatsok hlzaton keresztli elrst teszik lehetv.

(1) A WEB-es alkalmazsok fejldstrtnete


A Microsoft Visual InterDev dokumentcija (s szerintem is) szerint WEB-es alkalmazsok fejldst nyomon kvetve hrom nagy korszakot vehetnk szre: 1. Az els genercis WEB szerverek korszaka. Ezen megoldsokra a statikus HTML lapok s az azokba begyazott grafikk (*.jpg, *.gif), hangok, ksbb a mozgfilmek voltak a jellemzk. Ezt a vilgot egsztette ki a bngszkbe plug-in-knt megjelen VRML vilg, valamint a bngsz oldali scriptek s a JAVA applet-ek lehetsge. Ksbb az MS kidolgozta az applet-ek alternatvjaknt funkcionl ActiveX technolgit. 2. A msodik genercis WEB-es alkalmazsokra a dinamizmus megjelense volt jellemz. A WEB-en szrfl emberek egyre unalmasabbnak s haszontalanabbnak tartottk azokat a WEB helyeket, amik csak egy knyv mdjra, statikusan kszltek.

Ezen technolgik legfbb kpviseli a CGI programok, az SSI-k (Server Side Include). rdekes kezdemnyezs volt az is, hogy a WEB szervereket - hasonlan ms szerverekhez - egy API-val lssk el, aminek legfbb htrnya az volt, hogy minden WEB szerver ms-ms API-val rendelkezhetett. A CGI programok mra mr nem tekinthetek korszer megoldsnak, aminek a fbb okai a kvetkezk: nehezen lehet benne a HTTP protokoll llapotmentes jellegbl fakad korltokat kikszblni (pl.ul session kezels), a CGI scriptek lassak s sok erforrst ignyelnek, mert minden CGI krsnl egy teljes rtk process indul el. 3. A harmadik genercis WEB szerver alkalmazsok akkor szlettek meg, amikor a fejleszteszkzket kszt cgek rjttek arra, hogy az inter/intranetes helyeket is rdemes lenne hagyomnyos applikci-kszt szemlletben kifejleszteni. A vgcl persze itt is az, hogy dinamikus HTML, jabban XML lapokat generljunk a bngsz kliens rszre. Ennek a felfogsnak nyilvnval elnyei vannak: hasznlhatjuk a mr ismert programozsi nyelveinket s a vizulis fejleszteszkzket. Ennek az irnyzatnak taln az els megvalstsa a Microsoft Active Server Pages-en (ASP) alapul megoldsa volt, amely alkalmazsokat a Visual InterDev nev eszkzvel lehetett elkszteni. Mi ennek a htrnya? Az MS-re oly jellemz megolds: nagyszer tlet, de tbb rszletben is nem szabvnyos megolds: Visual Basic nyelv hasznlata a szabvnyos C++ vagy JAVA nyelvek helyett, a technolgia - vlemnyem szerint csak Windows-os krnyezetben mkdik rendesen, ami az OLE, ActiveX s Windows lehetsgeinek teljes kihasznlsval lehet magyarzni. A hrek szerint az MS jabb stratgija a .net koncepci, ami mindjrt egy j nyelv bevezetsvel indul (neve: C#). Vajon mirt? Ezek utn felmerl a krds, hogy ltezik-e olyan WEB-es fejleszt s futtat krnyezet, ami tudja mindazt, amit az ASP, de platform s szllt fggetlen. A vlasz az, hogy IGEN. A megolds neve hasonlt az ASP nevre: JAVA Server Pages (JSP). Itt szeretnk megjegyezni 2 dolgot: 1. A jelenlegi legelterjedtebb WEB szerver oldali technolgia taln mg most is a PERL script, aminek htrnya a CGI jelleg mkdsben rejlik. Egybknt a PERL valsznleg egy nagyon jl kitallt script nyelv, de szerintem jabb WEB-es alkalmazsokat nem rdemes - a mr ismertetett ok miatt - ebben kszteni. 2. Jelentsen terjed egy msik script nyelves megolds is a PHP (egyesek szerint ez a Personal Home Page, msok szerint a PHP Hipertext Processor rvidtse). A PHP egyszersge s nagyszer tlete pont az, ami a JSP s ASP technolgikat is jellemzi: ksztsnk olyan HTML lapot, amibe begyazva vannak azok a szerveroldali programok (itt PHP script), amik lefutnak egy HTTP krs sorn s az gy dinamikusan kialakult HTML (XML) tartalom kerl t a bngszbe. A PHP htrnya sajnos az, hogy igazbl ez is egy CGI technolgia, lass s sok tekintetben szksgtelenl bonyolult (pl.-ul: ahny adatbzis forrs, annyifle API azok elrshez).

(1.1) A JSP s ASP rvid sszehasonltsa Trjnk vissza a JSP technolgira! Mirt is j ez? Vegyk sorra a prhuzamokat az ASP technolgival: 1. Az ASP szerver oldali ActiveX objektumokat a JAVA nyelv osztly mechanizmusa fedi le. Ezeket az osztlyokat ppen ezrt servlet-eknek is nevezzk. rdemes az zleti logikt JavaBean-ekben vagy az IBM s a SUN kezdemnyezse kapcsn Enterprise JavaBean-ekben (EJB) megfogalmazni. A JavaBean egy ugyanolyan komponens alap technolgit jelent, mint ami a Delphi vagy Visual Basic (rgebben VBX, manapsg ActiveX) fejleszti krnyezeteket is hatkonny tesz. A JSP abban ad nagy segtsget az alkalmazsfejlesztnek, hogy ezeket a JavaBean-eket egyszeren el tudja rni, azaz az alkalmazsrteg "tetejn" a JSP vgzi el a prezentcis s form feldolgoz funkcikat, a JSP biztostja a kommunikcit a kliensrteg s az alkalmazslogika kztt. 2. A Visual Basic script-eknek szintn a JAVA nyelv felel meg. Ki ms is mozgsthatn a *.class file-okban lv servlet-eket mint maga a JAVA nyelv. Ezen a tren az ASP s a JSP kztti hasonlatossg tkletes. A JSP lapok az ASP-hez teljesen hasonl mdon hasznljk a <% ... %>, <%= ... %>, <%@ ... %> tag-eket szerver oldalon. Ezzel a JSP is tkletesen megvalstja az Active Document-nek nevezett megoldst. A klnbsg csak az, hogy a script nyelve maga a JAVA. Itt felhvjuk a figyelmet egy nagyon fontos tnyre: a *.class file-ok dinamikus betltse miatt a teljes JAVA appartust hasznlhatjuk a JSP lapokon. Ez teht azt jelenti, hogy az alkalmazst teljes egszben megrhatjuk JAVA-ban s a HTML/XML alap user interface-t kell a JSP-ben megoldani. A JSP egybknt a servlet technolgia tovbbgondolsa kapcsn szletett. Elszr rgebben az SHTML (szerver oldali HTLM) lapok voltak, amikbe az applet-hez hasonlan a <SERVLET code=.class> paramterek </SERVLET> tag-ok segtsgvel gyazhattunk be egy servlet-et. A kliens oldalon ezt a http://gp/lap.shtml hvssal hasznlhattuk. 3. A kliens oldali ActiveX objektumoknak a JAVA applet-ek felelnek meg. Amint a kliens s a szerver oldali ActiveX objektumok is megvalstnak egy kliens/szerver kommunikcis lehetsget, gy termszetesen itt is megvalsul az applet s a servlet egyttmkdse tjn. 4. Az ASP COM/DCOM technolgijnak a szabvnyos CORBA technolgia felel meg. 5. Az ASP OLE DB, ADO vagy ODBC adatbzis elrsi modellje helyett a teljesen objektumorientlt JDBC-t hasznlhatjuk. Ezen a ponton hagyjuk most abba az ASP-JSP sszehasonltst. A JSP technolgia minden opercis rendszeren rendelkezsnkre ll, st legjobb megvalstsai a GNU liszensz al esnek, azaz radsul a beszerzsk (vigyzat! Nem a TCO!) ingyenesek.

(1.2) A JSP servlet mechanizmus mkdse A JSP lapok els hasznlata sorn azokbl egy-egy servlet, azaz egy class file keletkezik. A JSP technolgia clja teht az, hogy ne kelljen a viszonylag rszletgazdag servlet-ek fejlesztsvel foglalkoznunk, figyelmnket a dokumentumok kialaktsra irnythassuk (hasonlan a begyazott PHP scripthez). Rgebben a servlet-ek meghvsa hasonl volt a kls CGI script-ek hvshoz, azaz az URL gy nzett ki: http://gp/egy_servlet.class. Ksbb kialakult az SHTML technika, aminek hasznlata a begyazott php-hoz hasonl. Itt mr megfigyelhet az, hogy a dokumentum szerkezete van a figyelem kzppontjban s abba vannak begyazva a servlet-ek. A jelenlegi JSP technika tekinthet ezen vonal cscsnak. A gondolat azrt nagyszer, mert a JSP lapok ksztst egy WEB designer is el tudja kszteni ( gy rzkeli a jsp tag-eket, mintha azok extra html tag-ek lennnek), ugyanakkor a httrben tovbbra a jl bevlt servlet technolgia llhat. Itt jegyzem meg, hogy ez a felfogs tkletes sszhangban van a mostanban viharos sebessggel terjed XML technolgival. A kvetkez (2). szakaszban ismertetek egy olyan JSP, servlet fejleszti s futtat architektrt, ami brmelyik opercis rendszeren kialakthat s taln a legkorszerbb megolds ebben a pillanatban. A konkrt kialakts ismertetst a Linux opercis rendszerre rom le, de az alapelvek teljesen hasonlak ms opercis rendszereknl is. A (3). pontban pedig egy pldn keresztl bemutatom ezen krnyezet hasznlatt is.

(2) A futtat, fejleszt krnyezet kialaktsa


Nzzk elszr is az ltalam hasznlt hozzvalkat: Apache 1.3.14 WEB szerver Apache JAKARTA-TOMCAT 3.2.1 SUN JAVA 2 SDK Standard Edition for Linux Borland Interbase v6.0 adatbzis szerver Borland InterClient JDBC driver az Interbase elrshez A fenti szoftverek kzs jellemzje a stabil mkds, nagy cgek gyrtjk ket s a beszerzsk ingyenes. A teljes TCO (Total Cost of Ownership=a tulajdonls teljes kltsge) nem ingyenes, de ezen szoftvereknl igaz a kvetkez: mindig csak akkor kell fizetni, ha valami hozzadott rtk keletkezik (pl.-ul: a szakember zembelltja a szoftvert), ellenttben az MS filozfijval, ahol mg semmi j rtk nem keletkezett csak egy liszensz-et kapunk meglehetsen magas ron. Kezdjk el a WEB-es szervernket kialaktani! A Linux teleptsvel most nem foglalkozunk. (2.1) Az Apache teleptse Az Apache szerver forrskdja a www.apache.org helyrl letlthetek. A letltend file neve: apache_1.3.14.tar.gz. A forrskdbl teleptett rendszereket a file rendszer /opt helyre msoljuk:

cp

apache_1.3.14.tar.gz /opt

Csomagoljuk ki:
tar -xvzf apache_1.3.14.tar.gz

Ennek hatsra a forrskd a /opt/apache_1.3.14 knyvtrba kerl, amire - csupn a knyelem kedvrt - csinljunk egy szimbolikus linket. Lpjnk be a knyvtrba s adjuk ki a kvetkez parancsot:
ln -s /opt/ apache_1.3.14 apache

A Linux rendszeren tbb stratgia ltezik arra, hogy a forrskdbl hogyan ksztsnk futtathat rendszert. A legelterjedtebb az, hogy van egy configure nev script, ami feltrkpezi a Linux rendszernket s elllt egy ahhoz illeszked Makefile-t. Ezt csinlja az apache is. Adjuk ki ennek megfelelen a configure parancsot:
./configure --sysconfigdir=/etc/httpd --datadir=/home/httpd --logfiledir=/var/log/httpd -- disable-rule --enable-shared=max --enable-module=most

Ez a parancs olyan Makefile-t kszt, ami elrja azt is, hogy hol lesz az apache config file helye (/etc/httpd), hol lesz a WEB tartalom gykere (/home/httpd), hol lesz a logfile. Ezenfell engedlyezzk a dinamikusan tltd modulok hasznlatt is. A kvetkez lps a forrskd lefordtsa a "make" parancs kiadsval. A fordts utn a binris kd teleptse a "make install" paranccsal lehetsges. A futtathat apache rendszer a telepts utn a /usr/local/apache knyvtrban helyezkedik el. (2.2) A SUN JAVA 2 teleptse A ...jdk1.2.2...tar.gz file-t msoljuk a /opt knyvtrba, majd az ismert tar -xvzf ...tar.gz paranccsal csomagoljuk ki. Ekkor ltrejn egy /opt/jdk1.2.2 knyvtr, ahol a JAVA 2 rendszer tallhat. Ksztsnk erre is egy linket:
ln -s /opt/jdk1.2.2 jdk

Egy kicsit elretekintve mdostsuk a /etc/profile file-t, mert ez az a hely ami az ltalunk hasznlt bash shell krnyezeti vltozit belltja (Windows-ban erre az autoexec.bat-ot hasznlnnk).
# A /etc/profile vgre ezt irjuk: # A java home knyvtr JAVA_HOME="/opt/jdk" # A programok keressi tvonalnak kiegsztse: PATH=$JAVA_HOME/bin:$PATH # A TOMCAT JSP s servlet szolgltat helye TOMCAT_HOME="/opt/tomcat" # Az apache helye APACHE_HOME="/usr/local/apache" TCJ=/opt/tomcat/lib

JDKJ=/opt/jdk/jre/lib CLASSPATH=.:$JDKJ/rt.jar CLASSPATH=$CLASSPATH:/opt/interclient/interclient.jar CLASSPATH=$CLASSPATH:$TCJ/servlet.jar:$TCJ/jasper.jar:$TCJ/ant.jar CLASSPATH=$CLASSPATH:$TCJ/jaxp.jar:$TCJ/parser.jar CLASSPATH=$CLASSPATH:$TCJ/webserver.jar:$JAVA_HOME/lib/tools.jar export CLASSPATH, JAVA_HOME, TOMCAT_HOME, APACHE_HOME # A /etc/profile vltoztats vge.

Ezekkel a vltoztatsokkal a JAVA fordt s futtat is meg fogja tallni a *.class fileokat. Ezeket a *.class file-okat rgebben a file rendszerbe helyeztk el, majd *.zip fileban troltk (itt is benne volt a knyvtrstruktra). Mostanban a *.jar file-okat hasznlnak, aminek zip a formtuma, de a jar JAVA-ban rdott. A JAVA fordt s futtat a *.class file-okat igny szerint, dinamikusan hasznlja, amihez azonban meg kell tallni ket. A keressi stratgia a kvetkez: A program indt knyvtra, ha itt nincs, akkor a JAVA_HOME ltal kijellt hely. Amennyiben itt sincs, akkor a CLASSPATH ltal megjellt helyeken folytatdik a keress. (2.3) Az Apache Jakarta-Tomcat teleptse Az apache projekt a WEB szervert mr rgta kiegsztette a servlet hvsi modullal, amit a mod_jserv.so (Apache_JSERV csomag) modul valst meg. A JSP technika hasznlatt az erre pl GNU JSP tette elszr lehetv. Ezt a prost vltotta fel az egysges Jakarta-Tomcat csomag, ami a servlet s JSP lehetsgeket is magban foglalja. A csomagot szintn az apache projekt www.apache.org helyrl lehet letlteni. A letltend file neve: jakarta-tomcat-3.2.1.tar.gz (binris), illetve jakarta-tomcat-src3.2.1.tar.gz (forrskd). Msoljuk be mindkt file-t a megszokott /opt helyre, majd csomagoljuk ki a binris csomagot a tar -xvzf ... paranccsal, aminek hatsra ltrejn a /opt/jakarta-tomcat-3.2.1 knyvtr. Ksztsnk r linket:
ln -s /opt/jakarta-tomcat-3.2.1 tomcat

Emlkezznk vissza, hogy a /etc/profile file TOMCAT_HOME vltozja erre a linkre mutat. A tomcat teleptse ezzel a kicsomagolssal lnyegben befejezdtt. Mg annyit kell csinlni, hogy a tomcat rendszer mod_jk.so nev file-jt msoljuk be a /usr/local/apache/libexec helyre. Ez az a hely, ahol az apache a dinamikusan tltd modulokat trolja. A mod_jk.so egy adaptert valst meg az apache szmra. Ez azt jelenti, hogy ha *.JSP vagy servlet krs megy az apache fel, akkor ezt deleglja a mod_jk.so modul hasznlatval a tomcat fel. A tomcat ellltja a dinamikus HTML tartalmat, amit apache szolgltat a kliens fel. Ahhoz, hogy az apache tnyleg gy mkdjn ezt meg kell mondani neki. Ltezik a /opt/tomcat/conf knyvtrban egy "mod_jk.conf-auto" file, amit nem szabad editlni, mert gy j, ahogy van. A teendnk csak annyi, hogy az apache konfigurcis file-jba a /etc/httpd/httpd.conf-ba utols sorknt rjuk be a kvetkezt:
include /opt/tomcat/conf/mod_jk.conf-auto

Ezzel az apache jl fogja hasznlni a kapcsolatot a tomcat fel. A tomcat-ot viszont mg konfigurlni kell, ami a server.xml s a workers.properties file-ok mdostsval tehetnk meg. Mindkett a /opt/tomcat/conf knyvtrban helyezkedik el.

1. A workers.properties mdostsa a kvetkez sorok beirst, kijavtst jelenti: # adjuk meg, hogy hol van a tomcat: workers.tomcat_home=/opt/tomcat # adjuk meg, hogy hol van a JAVA workers.java_home=/opt/jdk # adjuk meg, hogy a Linux-ban ez a path separator jel ps=/ # A JAVA virtulis gp helye worker.inprocess.jvm_lib=/opt/jdk/jre/lib/i386/classic/libjvm.so 1. A server.xml editlsa Ha j neknk, hogy a JSP file-ok s a servlet-ek a /opt/tomcat/webapps/root helyen vannak, akkor ezt a file-t nem szksges trni.

Ezzel a tomcat is mkdkpes lett. Hogyan indtsuk ezek utn a WEB szervernket? 1. lps: A tomcat indtsa: "/opt/tomcat/bin/startup.sh". Ez a script is a kicsomagolt tomcat rsze. 2. lps: Az apache indtsa: "/usr/local/apache/bin/apachectl start" A WEB szerver lelltsa a "/usr/local/apache/bin/apachectl "/opt/tomcat/bin/shutdown.sh" parancsprral lehetsges. stop", majd a

(2.4) A Borland Interbase adatbzis szerver teleptse A Borland szabadd tette az Interbase nven fut adatbzis szervert, ami tudsban kb. az MS SQL szervernek felel meg. WEB-es clokra kivlan alkalmazhat. A csomag teleptse rendkvl egyszer. Az ...Interbase...6.0.tar.gz csomagot msoljuk a /opt helyre s a tar -xvzf ... paranccsal csomagoljuk ki. Ezek utn csak annyi a teend, hogy a /etc/services file-ba berjuk az j TCP/IP szolgltatst, azaz a file-t a kvetkez sorral kell kiegszteni:
gds_db 3050/tcp # hlzatos interbase protokol port

Ebbl azt is ltjuk, hogy az interbase-t hasznl kliensek egy msik szmtgpen is futhatnak s amikor az adatbzis szervert akarjk hasznlni, akkor ezt a 3050-es tcp porton tehetik meg. Ez hasonl az Oracle Net * protokolljhoz. Az Interbase szervert a kvetkez paranccsal lehet elindtani:
# az & hatsra a httben fog futni. /opt/interbase/bin/ibserver &

Az Interbase teleptsekor felkerlt egy isql nev program is, ami az adatbzis fel egy SQL parancsfelletet biztost (hasonlan, mint az Oracle *Plus). Indtsuk el sysdba userknt, masterkey password-del:
isql -u sysdba -p masterkey

Ekkor egy "SQL>" prompt jelenik meg, ahonnan SQL parancsokat adhatunk ki. Hozzunk ltre egy j adatbzist az /opt/interbase/adatok knyvtrba:
SQL> create database "/opt/interbase/adatok/webimi.gdb";

Az Interbase adatbzisok egy-egy gdb kiterjeszts file-ban vannak (itt van minden: tblk, view-k, trolt eljrsok, triggerek, indexek, ...). A kvetkez dbgen.sql script egy tblt hot ltre ebben az adatbzisban:
# dbgen.sql create table TELEFONOK ( azon NUMERIC(10) NOT NULL, nev VARCHAR(50), telefon VARCHAR(20), primary key( azon ) );

Ezt a script-tet az isql input parancsval futtathatjuk:


input /opt/interbase/adatok/dbgen.sql;

Prbaknt szrjunk be egy sort ebbe a tblba:


Insert into TELEFONOK values(1, 'Nyiri Imre', '123456789'); commit;

Lpjnk ki az isql-bl az exit; paranccsal. (2.5) Az Interbase Java JDBC driver teleptse A driver az Interclient...tar.gz file-ban van, amit az eddigiek szerint msoljunk az /opt knyvtrba s csomagoljuk ki. Ekkor ltrejn egy /opt/interclient_install_temp_dir knyvtr, ahova lpjnk be, majd futtassuk le az ott lv "install.sh" scriptet. A script azon krdsre, hogy hova teleptse a JDBC driver, adjuk meg az /opt/interclient knyvtrat. A telepts utn mr csak annyi a teend, hogy az interclient.jar nev file-t hozz appendeljk a CLASSPATH-hot a /etc/profile-ban. Ezzel ksz az Interbase JDBC driver teleptse. Prbljuk ki, hogy mkdik-e! Ehhez rjunk egy JAVA programot.
// // A program az elz pontban ltrehozott adatbzist hasznlja // asz1.java, ahol asz=adat szolgltat // import java.sql.*; public class asz1 { public String ir() { String databaseURL = "jdbc:interbase://localhost/opt/interbase/adatok/webimi.gdb"; String user = "sysdba"; String password = "masterkey"; String driverName = "interbase.interclient.Driver"; Driver d = null; Connection c = null; Statement s = null; ResultSet rs = null; // Driver load try

{ Class.forName ("interbase.interclient.Driver"); } catch ( Exception e) { return "???"; } // Kapcsolat ltrehozs try { c = DriverManager.getConnection (databaseURL, user, password); } catch ( SQLException e) { return "???"; } // auto commit hamisra lltsa try { c.setAutoCommit (false); } catch (java.sql.SQLException e) { return "???"; } // Egy lekrdezse try { s = c.createStatement(); rs = s.executeQuery ("select NEV, TELEFON from TELEFONOK"); ResultSetMetaData rsmd = rs.getMetaData(); int cols = rsmd.getColumnCount(); rs.next(); return rs.getString("NEV"); } catch ( SQLException e ) { return "???"; } } } // end class

Most fordtsuk le a programot: "javac asz1.java" paranccsal, amelynek eredmnyeknt egy asz1.class file keletkezik. Tesztelskppen rjunk egy konzol alap JAVA fprogramot, ami ezt az osztlyt hasznlja:
// imre.java public class imre { public static void main(String[] args) { System.out.print( new asz1().ir() ); } }

A program ltrehoz egy j "asz1" tpus objektumot s meghvja annak az ir() metdust, ami a telefonok tbla els sornak NEV mezjt, teht a "Nyiri Imre" stringet adja vissza. A System.out.print() pedig ezt a stringet kirja a konzolra. Mkdik teht az adatbzis kapcsolat. A programot a java imre paranccsal indthatjuk el, aminek hatsra a Nyiri Imre szveg kirdik a konzolra. Ezzel a fejleszt, futtat krnyezet minden komponense a helyre kerlt, befejeztk a szoftverek teleptst.

(3) Az Apache JSP krnyezet kiprblsa


A krnyzetet kiprblshoz felhasznljuk az eddig ltrehozott teszteredmnyeinket: A webimi.gdb adatbzist (benne a TELEFONOK tblt) A mr elksztett asz1.java s asz1.class file-okat A jobb rthetsg, valamint a servlet-ek s a JSP lapok sszehasonlthatsga rdekben a elksztnk egy olyan dinamikus html lapot generl modult, ami olyan html lapot kld a kliensnek, ami a napszaknak megfelelen kszn, majd kirja a TELEFONOK tbla els sornak telefontulajdonost.

(3.1) A feladat JSP alap megoldsa


Nos, teht az ltalunk kialaktott krnyezet mkdkpessgnek vizsglathoz ksztsnk egy nagyon egyszer JSP lapot, aminek a neve legyen elso.jsp. Ezt a bngszbl a "http://www.hely.hu/elso.jsp" sorral vagy egy erre mutat link-kel hvhatunk meg. Nzzk meg a JSP file tartalmt (a JSP file-ok text file-ok):
--- Itt kezddik az elso.jsp <%@ page import="java.util.Calendar" %> <% if (Calendar.getInstance.get(Calendar.AM_PM) == Calendar.AM ) { %> Kellemes dlelttt kvnok! <br> <% } else { %> Kellemes dlutnt kvnok! <br> <% } %> A telefontulajdonos neve: <%= new asz1().ir() %> <br> --- Itt fejezdik be az elso.jsp

Az elso.jsp-re val hivatkozs utn az apache felmeri, hogy ez egy JSP oldal. A mod_jk adapter segtsgvel megkri a tomcat-et, hogy dolgozza fel ezt a file-t. A tomcat az elso.jsp file-bl a httrben egy JAVA class-t (servlet-et) kszt, majd ezt lefuttatja a JAVA VM-mel. Itt van egy fordtsi fzis, ami csak ez els alkalommal trtnik meg, utna mr mindig a lefordtott class fog futni, ami gyorsabb mint a PERL, PHP megolds, mert azok minden hivatkozsnl interpretldnak. A futs eredmnye a kvetkez dinamikus HTML lesz (csak, amit a bngszbl ltunk):
Kellemes dlutnt kvnok! A telefontulajdonos neve: Nyiri Imre

Ugye milyen nagyszer? Volt egy komplett JAVA alkalmazsunk az asz1.class file-ban

(ezt egy kis tlzssal egy JavaBean-nek is nevezhetnnk), amit csak elegnsan meghvtunk a JSP laprl. Ugyanakkor az is ltszik, hogy tetszleges JAVA programok rhatk be a JSP lapokra. (3.2) A feladat servlet alap megoldsa Termszetesen most csak egy nagyon egyszer megoldst fogunk ltni, gy aki a servletek akarja tanulmnyozni, annak ajnljuk a SUN servlet specifikciit. Nzzk a programot:
// Importok import javax.servlet.http.*; import javax.servlet.*; import java.io.*; import java.net.*; import java.util.Calendar; // // Ennek hvsa a bngszbl: // http://gpnv/elso.class // public class elso extends HttpServlet { // a servlet inicializlsa public void init( ServletConfig conf ) throws ServletException { super.init( conf ); } // Ez a servlet szolgltatsa: html lap elllts // public void service( HttpServletRequest req, // input krs HttpServletResponse res ) // html outputhoz { String sz = (new asz1()).ir(); // a TELEFONOK tblbl String udv; // dvzls if (Calendar.getInstance.get(Calendar.AM_PM) == Calendar.AM ) { udv = Kellemes dlelttt kvnok! <br>; } else { udv = Kellemes dlutnt kvnok! <br>; } res.SetContentType(text/html); ServletOutputStream out = res.getOutpitStream(); out.println(<head><title>Az elso.class</title></head><body>); out.println( udv ); out.println(A telefontulajdonos neve: ); out.println( sz ); out.println(</body>); } // end service } // end elso class

Tekintettel arra, hogy a tomcat is servett fordtja a JSP lapot (a tomcat work knyvtrban mindig megnzhetjk azt is, hogy hogyan is nz ki ennek a JSP-bl ellltott servlet-nek *.java forrsa), azaz a servlet-ek kezelst is nyilvn ismeri, alkalmazhatnnk ezt a servlet-et is a fent bemutatott krnyezetben. Az azonban taln mr mindenki eltt nyilvnval, hogy rdemes kihasznlni azt, ahogy a JSP technolgia a servlet-et automatikusan ellltja.

(4) Zr gondolatok
Ez az rs csak egy rvid ismertet volt arra nzve, hogy mirt is s hogyan hasznlhat a Java nyelv a szerver oldali programozshoz. Van nhny olyan krds mg, amit tisztzni kell, mieltt valaki belevg ezen technolgia mlyebb hasznlatba. Nzzk ket! (4.1) Milyen fejleszteszkz hasznlhat? Az nyilvnval, hogy egy egyszer Java fejleszti krnyezet (Borland Jbuilder, Oracle Jdeveloper, IBM VisualAge for Java) nem elgsges, hiszen a *.java, *.class file-okon kvl mg a kvetkez nyersanyagokra is szksg van: HTML lapszerkeszt JSP lapszerkeszt CGI scriptek rsa, kezelse Applet kszt eszkz HTML script rst tmogat eszkz (JavaScript, VB script) Grafikk, hangok, stb. kezelse Ezenfell ezeket az alapanyagokat egy egysges WEB alkalmazsknt kell tudni menedzselni. Ezt a feladatot az MS Visual InterDev remekl elltja, de ltezik az IBM gondozsban (s ez e-Business jegyben) egy msik eszkz is, ami ugyanilyen magas szinten tud egy WEB-es alkalmazst kialaktani s menedzselni, st a JSP technolgiabeli tmogatottsga egyrtelmen jobb az InterDev-nl: IBM WebSphere Stdi. A JavaBean-eket rdemes az IBM VisualAge for Java vagy brmilyen ms JAVA fejleszti krnyezetben ltrehozni, majd ezeket a Stdi segtsgvel lehet a WEB-es alkalmazsunkba integrlni (a bean-ekkel val kommunikci megszervezse). A VisualAge-ben gy lehet tesztelni a web-es alkalmazst, hogy egyidben egyik ablakban ltjuk a JSP kdot, a mellette lvben a JSP-bl ellltott servlet kdjt, a harmadik ablakban pedig magt a generlt html vagy WAP vagy VoiceXML stb. kdjt. Az gy kialaktott s letesztelt alkalmazs ezutn brmiben krnyezetben futtathat (Oracle Appserver, Apache+tomcat, websphere stb.) Egy tanulsi clra alkalmas fejleszti krnyezet a Sun JSWDK 1.0 eszkz, ami ingyenesen letlthet. (4.2) A html form-ok feldolgozsa A HTML form feldolgozs kihasznlja a Bean/JSP elnyeit. Az mindenkinek tetszhet,

ahogy a PHP egy nev nev beviteli elemet $nev nven r el. A JSP-ben sem bonyolultabb a helyzet. Egy html form "nev" s "lakcim" nev mezjt a bean egy-egy metdusval tudjuk kezelni, amiket clszeren: getNev(), getLakcim() nvre keresztelhetnk, ami utn azt a JSP engine automatikusan kezelni kpes. Ezt a mechanizmust hvjk introspection-nek, s hihetetlen mdon leegyszersti a form feldolgozst. (4.3) A WEB hely design-jnak megvalstsa A JSP lap lnyegben egy html lap, szerkesztse-formzsa gyakorlatilag brmilyen html editorban trtnhet. A servlet-ek baja az volt (hasonlan a CGI scriptek-hez), hogy a prezentcit kd formjban magukban hordozzk. Ha az alkalmazs kinzetn valami nem tetszik, akkor a servlet kdjba kell belenylni, azt jra kell fordtani s deploy-olni, szval a logika s a design egyetlen megbonthatatlan egysget kpez. A valsgban azonban vannak emberek, akik jl tudnak programozni s vannak olyanok, akik szp design-t kpesek csinlni. Ennek megfelelen biztostani kell a kln munkavgzs lehetsgt. Persze gy is fogalmazhatunk, hogy a JSP megkmli a programozt a design beprogramozstl, mert azt ezek utn vizulisan is elksztheti. A programozk elksztik a bean-eket, a designer-ek pedig a JSP lapokat, amit ugyangy tudnak formzni, mintha HTML lapok lennnek. A JSP/Bean szemllet alkalmazs mdostsa egyszer: ha valami rossz a logikban, akkor annak kijavtshoz nem kell a designer s ez fordtva is igaz.

Irodalomjegyzk
(1) (2) (3) (4) (5) (6) http://java.sun.com http://javasite.bme.hu http://www.servlets.com www.javasoft.com/products/jsp http://www.jspin.com http://www.jspinsider.com

You might also like