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("\n" + "\n" + "<TITLE>Hello WWW\n" + "\n" + "
Hello WWW
\n" + ""); } }
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("\n" + "\n" + "<TITLE>Hello WWW\n" + "\n" + "
Hello WWW
\n" + ""); } }
A request.getPararameter(String) metódussal ki lehet nyerni egy űrlap paramétereit.
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("\n" + "\n" + "<TITLE>Hello WWW\n" + "\n" + "
Hello WWW
\n" + ""); } }
Mivel elég körülményes HTML oldalt ilyen módon generálni, kitalálták a JSP oldalakat.
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) <% // 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 )); Tetszőleges Java kód elhelyezhető a <% és %> a %> tag-ek közé.
Hello world JSP(2) Hello! The time is now <%= new java.util.Date() %>
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.)