JEE tutorial Zsíros Levente, 2012
A J2EE részei Webkonténer Szervletek JSP oldalak EJB (Enterprise Java Bean) konténer Session Bean Entity Bean (Java Persistence API-t használják) A Glassfish és JBoss tartalmaz egy webkonténert és egy EJB konténert is. A Tomcat csak webkonténert tartalmaz.
Hello World szervlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWWW extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n" + "<HTML>\n" + "<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n" + "<BODY>\n" + "<H1>Hello WWW</H1>\n" + "</BODY></HTML>"); } }
Hello World szervlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWWW extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { A request.getpararameter(string) metódussal ki lehet nyerni egy űrlap paramétereit. response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n" + "<HTML>\n" + "<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n" + "<BODY>\n" + "<H1>Hello WWW</H1>\n" + "</BODY></HTML>"); } }
Hello World szervlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWWW extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "<HTML>\n" + "Transitional//EN\">\n" + Mivel elég körülményes HTML oldalt ilyen módon generálni, kitalálták a JSP oldalakat. "<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n" + "<BODY>\n" + "<H1>Hello WWW</H1>\n" + "</BODY></HTML>"); } }
HTTP Session HttpSession session = request.getsession(true); session.setattribute("user_id", userid);
JSP oldalak PHP oldalhoz hasonlít Tetszőleges Java kód lehet benne, de csak megjelenítésre használják (az üzleti logikát hagyományos szervletekbe szokták tenni) Előre definiált változók: request, response, session, out http://www.hscripts.com/tutorials/jsp/variables.php
Hello world JSP(1) <HTML> <BODY> <% // This scriptlet declares and initializes "date" System.out.println( "Evaluating date now" ); java.util.date date = new java.util.date(); %> Hello! The time is now <% // This scriptlet generates HTML output out.println( String.valueOf( date )); %> </BODY> </HTML> Tetszőleges Java kód elhelyezhető a <% és a %> tag-ek közé.
Hello world JSP(2) <HTML> <BODY> Hello! The time is now <%= new java.util.date() %> </BODY> </HTML> Tetszőleges Java kifejezést ide lehet írni, a kapott objektumra meghívódik a tostring metódus, is kiíródik az out stream-re.
Hozzunk létre Netbeans-ben egy WebJPA mintaprojektet és nézzük meg, hogy működik.
Először is cseréljük le az alapértelmezett Derby adatbázist MySql-re. Ezt azért érdemes megtenni, mert a Derby konzol-ban nehéz dolgozni és rosszul is dokumentált. MySql konzolban inicializáljuk az adatbázist. create database webjpa_db; create user webjpa_dbuser; grant all on webjpa_db.* to webjpa_dbuser; SET PASSWORD FOR webjpa_dbuser = PASSWORD('abc123');
Ezután állítsuk be ugyanezeket a paramétereket a persistence.xml-ben.
Hova lettek az adatbázis beállítások?
Ez a régi konfiguráció. Nem kell ezzel törődni.
Most már nyugodtan nyomhatunk egy Run-t a projektünkre.
Nézzük meg, mi történt az adatbázis oldalon.
Hogyan jött létre ez a tábla? Automatikusan. Mivel a persistence.xml-ben Create volt megjelölve, deploy-oláskor létrehozta a glassfish az adatbázis táblákat. Mi alapján? A Person osztály alapján.
Amint látható, a tábla illetve oszlop hozzárendelések annotációban vannak rögzítve.
Fontos, hogy egy entitás osztálynak legyen paraméter nélküli konstruktora is.
Ez csak kényelmi funkciót lát el, a keretrendszer nem használja.
A többi csak getter és setter.
Nézzük meg a szervlet osztályokat is.
Itt mondjuk meg, hogy milyen URL-en lesz elérhető ez a szervlet. Tehettük volna a web.xml-be is ezt az információt. Esetünkben nincs web.xml.
Az adatbázist ezen keresztül fogjuk elérni. A J2EE keretrendszer inicializálja ezt az attribútumot, ezt Dependency Injectection-nek hívjuk.
Nem SQL lekérdezés, hanem EJBQL lekérdezés.
A request.setattribute() segítségével tetszőleges objektumot tárolhatunk. Ezt majd a ListPerson.jsp-ben fogjuk kiolvasni.
Ezt JSTL EL-nek nevezzük. Ha ezt használjuk, a JSP valid XML lesz, nem úgy mint szkriptletekkel, de nyugodtan használhattok szkriptleteket is a házitokban.
Nézzük meg, hogyan írunk az adatbázisba.
Figyeljük meg, hogy nincs.jsp a végén! A /CreatePerson.jsp URL-t már más használja.
Ezt úgy hívjuk, hogy user managed transaction. Ha Session Bean-t használunk, erre nem lesz szükség, a tranzakciókezelés automatikusan fog menni. ( Bean managed transaction )
Ezzel írunk az adatbázisba.
Nézzünk meg egy bonyolultabb esetet EntityBean-re, ahol idegen kulcsokkal is kell dolgozni és bonyolultabb EJBQL lekérdezést kell használni. Ehhez a videoteka5 projektet használjuk. (folyt. köv.)