Programrendszerek Fejleszt - PowerPoint PPT Presentation

About This Presentation
Title:

Programrendszerek Fejleszt

Description:

Programrendszerek Fejleszt se 7/6 * A k vetkez alkalmaz s tartalma Alkalmaz s szerverek s ezek szolg ltat sai EAR llom nyok JMX P ld k: Jboss ... – PowerPoint PPT presentation

Number of Views:46
Avg rating:3.0/5.0
Slides: 99
Provided by: Van9158
Category:

less

Transcript and Presenter's Notes

Title: Programrendszerek Fejleszt


1
Programrendszerek Fejlesztése
  • 7/6

2
A mai eloadás tartalma
  • Java Servlet
  • Servlet Interfész
  • Servlet Context
  • Request
  • Response
  • Filter
  • Session
  • Web Application
  • Probléma a Java Servlettel
  • Template eszközök
  • Java Server Pages
  • Áttekintés
  • Elemei
  • Életciklusa
  • Objektumok
  • Java Beanek használata
  • Java Standard Tag Library
  • Custom Tag Library
  • Java Server Faces
  • Feladata
  • Elemei
  • Navigáció
  • Támogató Bean

3
Források
  • http//java.sun.com/products/servlet/docs.html
  • http//java.sun.com/developer/onlineTraining/Servl
    ets/Fundamentals/contents.html
  • http//www.onjava.com/pub/a/onjava/2002/07/31/tomc
    at.html

4
Webes szolgáltatások
  • Java Servlet
  • Környezet
  • Tomcat 4.0
  • server.xml
  • web.xml

5
Java Servlet
  • Java technológiára épülo web komponens
  • platform független, bytecode
  • dinamikusan betöltheto
  • dinamikus tartalom eloállítására alkalmas
  • egy tároló menedzseli (servlet engine)
  • a web szerver vagy az alkalmazásszerver része,
    vagy önálló alkalmazás saját web szerverrel
    (Tomcat)
  • biztosítja azt a környezetet amelyen keresztül a
    kérések és a válaszok (request, response)
    lekezelhetoek
  • tartalmazza és menedzseli a servlet-eket egész
    életfolyamatuk alatt

6
Példa
  • A kliens kapcsolatba lép a web szerverrel és
    elküld egy HTTP kérést
  • A kérést a web szerver átadja a servlet tárolónak
    amely futhat
  • ugyanabban a process-ben
  • ugyanazon a gépen másik process-ben
  • másik gépen
  • A servlet tároló a kérés paraméterei alapján
    meghívja a megfelelo servlet-et (URL)
  • A servlet a kérés paraméterei alapján
    megállapítja mit szeretne a kliens ennek
    megfeleloen végrehajtja a megfelelo muveleteket.
    Válaszol a kliensnek a válasz objektum
    segítségével
  • Miután a servlet tároló megállapította, hogy a
    servlet befejezte a feladatot átadja a vezérlést
    a web szervernek

7
A servlet-ek elonyei
  • hatékony
  • hagyományos CGI n hívás n process
  • kényelmes
  • hatékony eszköztár a HTML urlap adatok
    értelmezésére (http fejléc, süti, viszony)
  • platform független
  • biztonságos
  • nem általános shell program környezetben fut (itt
    ki kell szurni a speciális karaktereket )
  • buffer túlcsordulás nem léphet fel
  • JVM (hibakezelés, )
  • olcsó
  • Tomcat - ingyenes

8
A servlet interfész
  • a servlet interfész megvalósítása vagy öröklése
    teszi a servlet-et servlet-té (javax.servlet.Servl
    et)
  • GenericServlet absztrakt osztály
  • service
  • HttpServlet absztrakt osztály
  • HttpServletRequest
  • HttpServletResponse
  • kérés kezelo metódusok
  • service
  • minden kérésnél meghívódik
  • HTTP specifikus kérés kezelo metódusok
  • doGet
  • doPost
  • doPut
  • doDelete
  • doHead
  • doOptions
  • doTrace
  • getLastModified

leggyakrabban használtak
9
Példa
  • 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()
  • String docType
  • "lt!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0
    Transitional//EN\"gt\n"
  • out.println(docType "ltHTMLgt\nltHEADgtltTITLEgtHellolt/
    TITLEgtlt/HEADgt\n"
  • "ltBODYgt\nltH1gtHello WWWlt/H1gt\nlt/BODYgtlt/HTMLgt")

10
Servlet-ek csomagolása
  • többen is fejleszthetnek egy web portált
  • egy könyvtár használata nem célszeru
  • külön könyvtárat célszeru használni
  • csomagok használata (package)
  • csomagnév.servlet

11
A servlet életciklusa
  • betöltés, példányosítás
  • a tároló indításakor
  • amikor szükség van az adott servlet-re
  • inicializálás csak a betöltéskor
  • init metódus
  • argumentum nélküli nem olvas semmilyen
    beállítást
  • ServletConfig object az elso sorban kötelezo
    meghívnia super.init(config) metódust
  • betöltéskor pl. JDBC kapcsolat felépítése
  • kérés feldolgozás minden egyes kérésre új szál
  • service
  • meghívja a megfelelo doXXX metódust (Request,
    Response)
  • nem célszeru ezt felülírni (használjuk a
    megfelelo doXXX metódusokat)
  • doXXX
  • a szolgáltatás befejezése régóta nem aktív,
    server leálítása,
  • destroy adatbázis kapcsolat bezárása,
    háttérszálak leállítása,

12
1. rész
  • import java.io.
  • import javax.servlet.
  • import javax.servlet.http.
  • public class ShowMessage extends HttpServlet
  • private String message
  • private String defaultMessage "No message."
  • private int repeats 1
  • public void init(ServletConfig config) throws
    ServletException
  • super.init(config)
  • message config.getInitParameter("message")
  • if (message null)
  • message defaultMessage
  • try
  • String repeatString config.getInitParameter("
    repeats")
  • repeats Integer.parseInt(repeatString)
  • catch(NumberFormatException nfe)

13
  • public void doGet(HttpServletRequest
    request,HttpServletResponse response)
  • throws ServletException, IOException
  • response.setContentType("text/html")
  • PrintWriter out response.getWriter()
  • String title "The ShowMessage Servlet"
  • out.println(ServletUtilities.headWithTitle(title)
  • "ltBODY BGCOLOR\"FDF5E6\"gt\n"
  • "ltH1 ALIGNCENTERgt" title "lt/H1gt")
  • for(int i0 iltrepeats i)
  • out.println(message "ltBRgt")
  • out.println("lt/BODYgtlt/HTMLgt")

2. rész
14
Egy-szál modell
  • alap esetben a servlet egy példánya található meg
    a memóriában
  • minden egyes kérés teljesítésére egy új szál
    indul
  • figyelnünk kell a párhuzamos futásra, a megfelelo
    eroforrások zárolására
  • Request, Response objektum csak a servlet futása
    közben használható ! (recycling)
  • megakadályozható a párhuzamos futtatás a
    SingleThreadModel interfész megvalósításával
  • ekkor egyszerre csak egy szál fut (a kérések egy
    várakozási sorban figyelnek ?)
  • ezzel a megoldással nagyon lelassíthatjuk
    rendszerünk muködését !

15
Servlet futási környezet
  • ServletContext interfész
  • ilyennek látja a servlet a környezetét
  • a tárolónak kell megvalósítania az interfészt
  • ServletConfig config getServletConfig()
  • a ServletContext objektum segítségével a servlet
  • eseményeket menthet el (log)
  • megállapíthatja az egyes források URL címét
  • elmenthet és kiolvashat olyan értékeket a
    környezetben melyet más, a környezetben futó
    servlet-ek olvashatnak

16
Hasznos metódusok
  • inicializáló paraméterek
  • getInitParameter
  • getInitParameterNames
  • környezeti paraméterek (JavaBean-ek használata)
  • setAttribute
  • getAttribute
  • getAttributeNames
  • removeAttribute
  • eroforrások (HTML, GIF,JPEG) (nem alkalmasak
    dinamikus tartalom kezelésére pl. index.jsp)
  • getResource
  • getResourceAsStream
  • ideiglenes könyvtár
  • File tempdir(File)getServletContext().getAttribut
    e("javax.servlet.context.tempdir")

17
Kérés objektum
  • HttpServletRequest
  • Minden információ a HTTP kérésbol
  • POST paraméterek
  • getParameter
  • getParameterNames
  • getParameterValues
  • getParameterMap
  • HTTP fejléc

18
A HTML urlap által küldött adatok kezelése
  • GET metódus esetén az URL-ben kódolva jelennek
    meg az adatok
  • http//host/path?userMartyHalloriginbwidestl
    ax
  • POST metódus esetén a fejlécben vagy a törzsben
    helyezkednek el
  • getParameter metódussal a POST kezelheto !
  • karakterlánc (string) a visszatérési érték
  • üres karakterlánc, ha nincs értéke a paraméternek
  • NULL, ha nincs ilyen paraméter
  • getParameterValues egy karaterlánc tömböt ad
    vissza (ekkor egy paraméternek több értéke lehet
    pl. checkbox)
  • a paraméter nevek érzékenyek a kis és a nagy
    beture
  • getParameterNames - a használható paraméterek
    listáját adja vissza (Enumeration)

19
Perl script példa
  • read(STDIN, buffer, ENV'CONTENT_LENGTH')
  • _at_pairs split(//, buffer)
  • foreach pair (_at_pairs)
  • (name, value) split(//, pair)
  • value tr// /
  • value s/(a-fA-F0-9a-fA-F0-9)/pack("C",
    hex(1))/eg FORMname value

20
Példa (HTML)
  • lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
    Transitional//EN"gt
  • ltHTMLgt
  • ltHEADgt
  • ltTITLEgtCollecting Three Parameterslt/TITLEgt
  • lt/HEADgt
  • ltBODY BGCOLOR"FDF5E6"gt
  • ltH1 ALIGN"CENTER"gtCollecting Three
    Parameterslt/H1gt
  • ltFORM ACTION"servlet/ThreeParams METHODPOSTgt
  • First Parameter ltINPUT TYPE"TEXT"
    NAME"param1"gtltBRgt
  • Second Parameter ltINPUT TYPE"TEXT"
    NAME"param2"gtltBRgt
  • Third Parameter ltINPUT TYPE"TEXT"
    NAME"param3"gtltBRgt
  • ltCENTERgt
  • ltINPUT TYPE"SUBMIT"gt
  • lt/CENTERgt
  • lt/FORMgt
  • lt/BODYgt
  • lt/HTMLgt

21
Példa (Servlet)
  • import java.io.
  • import javax.servlet.
  • import javax.servlet.http.
  • public class ThreeParams extends HttpServlet
  • public void doGet(HttpServletRequest
    request,HttpServletResponse response) throws
    ServletException, IOException
  • response.setContentType("text/html") PrintWriter
    out response.getWriter()
  • String title "Reading Three Request
    Parameters"
  • out.println(ServletUtilities.headWithTitle(title)
    "ltBODY BGCOLOR\"FDF5E6\"gt\nltH1 ALIGNCENTERgt"
    title "lt/H1gt\nltULgt\n ltLIgtltBgtparam1lt/Bgt "
    request.getParameter("param1") "\n"
  • " ltLIgtltBgtparam2lt/Bgt " request.getParameter("para
    m2") "\n"
  • " ltLIgtltBgtparam3lt/Bgt " request.getParameter("para
    m3") "\n" "lt/ULgt\n"
  • "lt/BODYgtlt/HTMLgt")
  • public void doPost(HttpServletRequest
    request,HttpServletResponse response) throws
    ServletException, IOException doGet(request,
    response)

22
A HTTP paraméterek kezelése
  • getHeader(paraméter)
  • string ha volt ilyen paramtér
  • NULL ha nem volt ilyen paraméter
  • ezzel elvileg minden típus olvasható azonban
    vannak az egyes speciális paraméterekre külön
    metódusok
  • getCookies egy cookie tömböt kapunk
  • getAuthType, getRemoteUser
  • getContentLength
  • getContentType
  • getDateHeader ,getIntHeader
  • getHeaderNames minden fejléc név egy
    Enumeration objektumban
  • getHeaders ha egy fejléc többször is szerepel
    akkor is visszaadja a fenti módon
  • getMethod
  • getRequestURI
  • getProtocol

23
Minden fejléc kiíratása
  • import java.io.
  • import javax.servlet.
  • import javax.servlet.http.
  • import java.util.
  • public class ShowRequestHeaders extends
    HttpServlet
  • public void doGet(HttpServletRequest request,
    HttpServletResponse response) throws
    ServletException, IOException
  • response.setContentType("text/html")
  • PrintWriter out response.getWriter()
  • String title "Servlet Example Showing Request
    Headers"
  • out.println(
  • Enumeration headerNames request.getHeaderNames()
  • while(headerNames.hasMoreElements())
  • String headerName (String)headerNames.nextElemen
    t()
  • out.println("ltTRgtltTDgt" headerName)
  • out.println(" ltTDgt" request.getHeader(headerName
    ))
  • out.println("lt/TABLEgt\nlt/BODYgtlt/HTMLgt")

Minden paraméter kiíratása
24
Válasz objektum
  • magában foglal minden információt a kliens
    számára
  • használhatunk buffer-t
  • getBufferSize
  • setBufferSize (a tároló nagyobbra is állíthatja)
  • isCommitted
  • reset
  • resetBuffer a fejrészt és a státusz kódot nem
    törli
  • flushBuffer
  • Fejlécek
  • setHeader
  • addHeader
  • setIntHeader
  • setDateHeader
  • addIntHeader
  • addDateHeader
  • Használjuk a X-Powered-By fejlécet
    (X-Powered-By Servlet/2.4 JSP/2.0 (Tomcat/5.0
    JRE/1.4.1))
  • Átirányítás
  • sendRedirect
  • sendError

25
Státusz kezelése
  • response.setStatus(int),
  • public void sendError(int code, String message)
  • public void sendRedirect(String url)
  • response.sendRedirect(response.encodeURL(url))

26
Képek létrehozása
  • Kép létrehozása
  • Frame f new Frame()
  • f.addNotify() // nem kell az ablakot megnyitni
    csak egy ilyen objektumot hozunk létre
  • Image img f.createImage(width, height),
  • Rajzoljunk a képbe
  • Graphics g img.getGraphics()
  • g.fillRect(...)
  • g.drawString(...)
  • A Content-Type válasz fejléc beállítása
  • response.setContentType("image/gif")
  • Egy válasz stream-et nyitunk
  • OutputStream out response.getOutputStream()
  • Küldjük el képünket GIF formátumban, itt egy
    kódolót kell használnunk. Ilyent a
    http//www.acme.com/java/ címen tudunk elérni.
  • try new GifEncoder(img, out).encode()
    catch(IOException ioe)

27
Példa alkalmazás
28
Eredmény
29
Viszony követés
  • a HTTP állapotmentes
  • fontos az állapotkövetés
  • bevásárló kosár
  • négy megoldás
  • sütik
  • URL átírás
  • HTTPS viszony követés
  • rejtett HTML mezok

30
Sütik (Cookies)
  • rövid szöveges információk melyeket a web szerver
    küld a kliensnek
  • segítségével
  • azonosíthatjuk a felhasználót egy e-commerce
    viszony alatt (bevásárló kosár)
  • elkerülheto a felhasználói név és a jelszó
    (alacsony biztonsági szint)
  • személyre szabható az oldal
  • a felhasználói információ értékes (célozott
    reklámok)

31
Problémák
  • 4 kbyte, 20 cookie/site, 300 süti összesen
  • az emberek nem szeretik, ha a kereso gépek
    megjegyzik mit szeretnek keresni
  • a sütikben tárolt információ nem biztonságos (más
    is használhatja a gépet, lemásolható a süti)
  • a fenti okok miatt a felhasználók gyakran
    kikapcsolják a sütiket

32
Sütik használata
  • new Cookie(name, value)
  • cookie.setXxx
  • response.addCookie(cookie)
  • request.getCookies egy tömböt ad vissza melynek
    Cookie objektum elemei vannak, NULL ha nincs süti
  • cookie.getXxx

33
Sütik létrehozása
  • sem a neve sem az értéke nem tartalmazhatja a
    következo karaktereket
  • ( ) , " / ? _at_
  • a következo metódusoknak meg van a getXxx párja
    is
  • setComment() megjegyzést adhatunk a sütihez
  • setDomain() segítségével beállíthatjuk a
    sütihez tartozó tartományt (a böngészo többek
    között ez alapján állapítja meg kinek mit adhat
    vissza)
  • setMaxAge() a süti érvényességének idotartamát
    állíthatjuk be másodpercben (-1 csak a jelenlegi
    viszonyban érvényes)
  • setName() a süti nevét állítja be
  • setPath() a tartományon belüli érvényességet
    adja meg
  • setSecure() csak titkosított kapcsolaton
    keresztül viheto át
  • setValue() az értékét adhatjuk meg

34
  • import java.io.
  • import javax.servlet.
  • import javax.servlet.http.
  • public class SetCookies extends HttpServlet
  • public void doGet(HttpServletRequest
    request,HttpServletResponse response)
  • throws ServletException, IOException
  • for(int i0 ilt3 i)
  • Cookie cookie new Cookie("Session-Cookie "
    i,"Cookie-Value-S" i)
  • response.addCookie(cookie)
  • cookie new Cookie("Persistent-Cookie "
    i,"Cookie-Value-P" i)
  • cookie.setMaxAge(3600)
  • response.addCookie(cookie)
  • response.setContentType("text/html")
  • PrintWriter out response.getWriter()
  • String title "Setting Cookies"
  • out.println
  • (ltheadgtlt/headgtltBODY BGCOLOR\"FDF5E6\"gt\n"
  • "ltH1 ALIGN\"CENTER\"gt" title "lt/H1gt\n"

Sütik létrehozása
35
  • import java.io.
  • import javax.servlet.
  • import javax.servlet.http.
  • public class ShowCookies extends HttpServlet
  • public void doGet(HttpServletRequest
    request,HttpServletResponse response)
  • throws ServletException, IOException
  • response.setContentType("text/html")
  • PrintWriter out response.getWriter()
  • String title "Active Cookies"
  • out.println(ServletUtilities.headWithTitle(title)
  • Cookie cookies request.getCookies()
  • Cookie cookie
  • for(int i0 iltcookies.length i)
  • cookie cookiesi
  • out.println("ltTRgt\n"
  • " ltTDgt" cookie.getName() "\n"
  • " ltTDgt" cookie.getValue())

Sütik kiolvasása
36
URL átírás
  • http//host/path/file.htmljsessionid1234,
  • nem tiltható le

37
HTML rejtett mezo
  • ltINPUT TYPE"HIDDEN" NAME"session" VALUE"..."gt
  • csak akkor muködik ha minden oldal dinamikusan
    generált

38
Egy teljesebb megoldás
  • HttpSession API
  • magas szintu interfész mely sütiken vagy URL
    átíráson alapul
  • sütit használ ha lehetséges, amennyiben nem akkor
    átvált URL átírásra
  • az alsó részeivel nem kell foglalkoznunk

39
Létrehozása
  • HttpSession session request.getSession(true)
  • létrehoz egy viszony objektumot
  • amennyiben már volt egy (valamikor régen, vagy
    most) akkor azt nyitja meg (true)
  • a HttpSession objektum a szerveren tárolódik
  • komoly adatstruktúrával rendelkezhet melyet mi
    adhatunk meg

40
Példa
  • HttpSession session request.getSession(true)
  • ShoppingCart cart (ShoppingCart)session.getValue
    ("shoppingCart")
  • if (cart null)
  • cart new ShoppingCart()
  • session.putValue("shoppingCart", cart)
  • doSomethingWith(cart)

41
Metódusok
  • set/getAttribute()
  • removeAttribute()
  • getAttributeNames() enumeration
  • getId() a viszony azonosítót adja vissza
  • isNew() true ha a kilens még nem látta a
    viszonyt
  • getCreationTime()
  • getLastAccessedTime()
  • getMaxInactiveInterval()
  • invalidate()

42
A kérés továbbadása
  • RequestDispatcher interfész
  • a ServletContext objektumból tudjuk eloállítani
  • getRequestDispatcher a servlet elérési
    útvonalát adhatjuk meg (a futási környezeten
    belül /-el kezdodik)
  • getNamedDispatcher a servlet ServletContext-ben
    ismert nevét adhatjuk meg
  • továbbítás
  • include nem módosíthatja a válsz objektum
    fejléc mezoit,
  • forward csak akkor használhatjuk, ha még nem
    válaszoltunk a kliensnek (nincs adat a bufferben,
    ezt elobb törölni kell)
  • az esetleges paraméterek elsobbséget élveznek

43
Példa
  • String path /raisons.jsp?orderno5
  • RequestDispatcher rd context.getRequestDispatche
    r(path)
  • rd.include(request, response)

44
Tomcat könyvtár hierarchia
  • bin -gt itt helyezkednek el az indító, leállító
    szkriptek fájlok
  • log -gt log fájlok
  • lib -gt jar fájlok
  • conf -gt server.xml
  • itt tudunk új környezetet létrehozni
  • webapps -gt webes alkalmazások könyvtára

45
server.xml
  • server elem egy lehet belole
  • service elem egy vagy több connector elem lehet
    benne de egy engine elem
  • connector HTTP1.1 vagy Warp itt tudjuk például
    a port-ot beállítani
  • engine a Tomcat szolgáltatási pontja, ezen
    belül tudjuk létrehozni például a virtuális
    címeket
  • host itt tudjuk megadni a hozzá tartozó URL-t
    és a gyökér könyvtárat
  • contex az egyes alkalmazások környezetéet
    definiálja a host-on belül.

46
Példa
  • ltServer port"8005" shutdown"SHUTDOWN"
    debug"0"gt
  • ltService name"Tomcat-Standalone"gt
  • ltConnector className"org.apache.catalina.conn
    ector.http.HttpConnector"
  • port"8080" minProcessors"5"
    maxProcessors"75"
  • enableLookups"true"
    redirectPort"8443"
  • acceptCount"10" debug"0"
    connectionTimeout"60000"/gt
  • ltEngine name"Standalone" defaultHost"localho
    st" debug"0"gt
  • ltLogger className"org.apache.catalina.logge
    r.FileLogger"
  • prefix"catalina_log."
    suffix".txt"
  • timestamp"true"/gt
  • ltRealm className"org.apache.catalina.realm.
    MemoryRealm" /gt
  • ltHost name"localhost" debug"0"
    appBase"webapps" unpackWARs"true"gt
  • ltValve className"org.apache.catalina.valv
    es.AccessLogValve"
  • directory"logs"
    prefix"localhost_access_log." suffix".txt"
  • pattern"common"/gt
  • ltLogger className"org.apache.catalina.log
    ger.FileLogger"
  • directory"logs"
    prefix"localhost_log." suffix".txt"
  • timestamp"true"/gt
  • ltContext path"/teszt" docBase"teszt"

47
Alkalmazás környezet
  • html, jsp,
  • WEB-INF
  • classes itt helyezkednek el a class fájlaink
    (jó esetben csomagokban)com.mycompany.mypackage.M
    yServlet /WEB-INF/classes/com/mycompany/mypackage
    /MyServlet.class
  • web.xml leírja az általunk használt
    servlet-eket, , újra kell indítani a Tomcat-et,
    hogy újra értelmezze
  • lib az általunk használt jar fájlokat
    helyezhetjük el itt pl. jdbc fájlok

48
web.xml
  • URL-ek testreszabása
  • URL-ek kikapcsolása
  • Servler-ek inicializálása
  • Servler-ek betöltése elore
  • Szurok definiálása
  • Hiba, és köszönto oldalak definiálása

49
URL-ek testreszabása
  • a leggyakrabban használt szolgáltatása
  • servlet elem
  • servlet-name
  • servlet-class, jsp-file (/ !!!!)
  • servlet-mapping elem
  • servlet-name
  • url-pattern (/valami, /.asp)

50
Példa
  • lt?xml version"1.0" encoding"ISO-8859-1"?gt
  • lt!DOCTYPE web-app PUBLIC
  • "-//Sun Microsystems, Inc.//DTD Web Application
    2.3//EN"
  • "http//java.sun.com/dtd/web-app_2_3.dtd"gt
  • ltweb-appgt
  • lt!-- ... --gt
  • ltservletgt
  • ltservlet-namegtTestlt/servlet-namegt
  • ltservlet-classgtmoreservlets.TestServletlt/servlet
    -classgt
  • lt/servletgt
  • ltservlet-mappinggt
  • ltservlet-namegtTestlt/servlet-namegt
  • lturl-patterngt/UrlTestlt/url-patterngt
  • lt/servlet-mappinggt
  • lt!-- ... --gt
  • lt/web-appgt

51
Servlet meghívó letiltása
  • amennyiben egy másik URL-en keresztül érjük el
    akkor az inicializálás végrehajtódik
  • ha erre számítunk akkor az alapértelmezett URL
    letiltására két módunk van
  • a /servlet/ útvonal átirányítása
  • az Invoker servlet globális kikapcsolása
  • install_dir/conf/web.xml
  • lt!--
  • ltservlet-mappinggt
  • ltservlet-namegtinvokerlt/servlet-namegt
  • lturl-patterngt/servlet/lt/url-patterngt
  • lt/servlet-mappinggt
  • --gt

52
Példa
  • lt?xml version"1.0" encoding"ISO-8859-1"?gt
  • lt!DOCTYPE web-app PUBLIC
  • "-//Sun Microsystems, Inc.//DTD Web Application
    2.3//EN"
  • "http//java.sun.com/dtd/web-app_2_3.dtd"gt
  • ltweb-appgt
  • ltservletgt
  • ltservlet-namegtSorrylt/servlet-namegt
  • ltservlet-classgtmoreservlets.SorryServletlt/servlet
    -classgt
  • lt/servletgt
  • lt!-- ... --gt
  • ltservlet-mappinggt
  • ltservlet-namegtSorrylt/servlet-namegt
  • lturl-patterngt/servlet/lt/url-patterngt
  • lt/servlet-mappinggt
  • lt!-- ... --gt
  • lt/web-appgt

53
Servlet-ek inicializálása
  • init-param elem
  • param-name ,param-value
  • public void init()
  • ServletConfig config getServletConfig()
  • firstName config.getInitParameter("firstName")
  • emailAddress config.getInitParameter("emailAddre
    ss")
  • alkalmazás szintu kezdeti paraméterek
  • context-param elem
  • param-name, paramvalue

54
Példa
  • ltcontext-paramgt
  • ltparam-namegtsupport-emaillt/param-namegt
  • ltparam-valuegtblackhole_at_mycompany.comlt/param-value
    gt
  • lt/context-paramgt
  • ltservletgt
  • ltservlet-namegtInitTestlt/servlet-namegt
  • ltservlet-classgtmyPackage.InitServletlt/servlet-cla
    ssgt
  • ltinit-paramgt
  • ltparam-namegtparam1lt/param-namegt
  • ltparam-valuegtValue 1lt/param-valuegt
  • lt/init-paramgt
  • ltinit-paramgt
  • ltparam-namegtparam2lt/param-namegt
  • ltparam-valuegt2lt/param-valuegt
  • lt/init-paramgt
  • lt/servletgt

55
Servlet-ek betöltése
  • servlet elem
  • load-on-startup
  • ltservletgt
  • ltservlet-namegtSearchlt/servlet-namegt
  • ltservlet-classgtmyPackage.SearchServletlt/servlet-c
    lassgt
  • ltload-on-startupgt1lt/load-on-startupgt
  • lt/servletgt
  • ltservletgt
  • ltservlet-namegtResultslt/servlet-namegt
  • ltjsp-filegt/results/index.jsplt/jsp-filegt
  • ltload-on-startupgt2lt/load-on-startupgt
  • lt/servletgt

56
Szurok definiálása
  • a szurok módosíthatják a kérés és válasz
    objektumot
  • mielott egy JSP vagy servlet oldal a kérés
    objektumhoz jutna az elso szuro doFilter metódusa
    lefut
  • itt kell meghívni a FilterChain objektum doFilter
    metódusát amely továbbadja a kérés objektumot
    vagy egy másik szuronek vagy a megfelelo
    servlet-nek

57
Szurok használata
  • Azonosítás
  • Naplózás
  • Kép konvertálás
  • Tömörítés
  • Titkosítás
  • Darabolás
  • XML konverzió

58
Szuro példa
  • import java.io.
  • import javax.servlet.
  • import javax.servlet.http.
  • import java.util.
  • public class ReportFilter implements Filter
  • public void doFilter(ServletRequest
    request,ServletResponse response,
  • FilterChain chain) throws ServletException,
    IOException
  • HttpServletRequest req (HttpServletRequest)reque
    st
  • System.out.println(req.getRemoteHost() " tried
    to access "
  • req.getRequestURL() " on " new Date() ".")
  • chain.doFilter(request,response)
  • public void init(FilterConfig config)
  • throws ServletException
  • public void destroy()

Szuro
59
Szuro definiálása a web.xml fájlban
  • a servlet elemek elott kell lennie
  • filter elem
  • filter-name, filter-class
  • filter-mapping
  • filter-name
  • servlet-name

60
Példa
  • ltfiltergt
  • ltfilter-namegtReporterlt/filter-namegt
  • ltfilter-classgtmoreservlets.ReportFilterlt/filter-c
    lassgt
  • lt/filtergt
  • ltfilter-mappinggt
  • ltfilter-namegtReporterlt/filter-namegt
  • ltservlet-namegtSomeServletNamelt/servlet-namegt
  • lt/filter-mappinggt
  • ltfilter-mappinggt
  • ltfilter-namegtReporterlt/filter-namegt
  • lturl-patterngt/lt/url-patterngt
  • lt/filter-mappinggt
  • ltservletgt
  • ltservlet-namegtSomeServletNamelt/servlet-namegt
  • ltjsp-filegt/TestPage.jsplt/jsp-filegt
  • lt/servletgt

61
Üdvözlo oldalak beállítása
  • akkor fontos amikor a kliens nem egy pontos
    útvonalat, hanem csak egy könyvtárat ad meg
  • welcome-file-list elem
  • welcome-file
  • ltwelcome-file-listgt
  • ltwelcome-filegtindex.jsplt/welcome-filegt
  • ltwelcome-filegtindex.htmllt/welcome-filegt
  • lt/welcome-file-listgt

62
Hiba oldalak
  • error-page elem
  • error-code, exception-type
  • lterror-pagegt
  • lterror-codegt404lt/error-codegt
  • ltlocationgt/NotFound.jsplt/locationgt
  • lt/error-pagegt
  • lterror-pagegt
  • ltexception-typegtpackageName.classNamelt/exception-
    typegt
  • ltlocationgt/SomeURLlt/locationgt
  • lt/error-pagegt

63
Probléma a Java Servlet-tel
  • MVC ?
  • Println(ltHTMLgtlt/HTMLgt)
  • Nem különülnek el a feladatok
  • HTML tervezo
  • Felhasználói interfész logika fejleszto
  • Üzleti logika fejleszto
  • Komponens fejleszto
  • Alkalmazás tervezo
  • A fejleszto hozzáfér a teljes Servlet API-hoz
    (html programoz is !)
  • Nehézkes RAD eszözöket vagy WYSIWYG eszközöket
    alkalmazni

64
Megoldások
  • Template engine-k használata
  • Magasabb szintu funkciók
  • Bovítheto építoelem készlet
  • Népszerubb template motorok-k
  • JSP
  • Velocity
  • FreeMarker
  • Ezekre épülo keretrendszerek
  • Java Server Faces
  • Struts
  • Turbine

65
JSP 1.0
  • lthtmlgt
  • ltheadgtlttitlegtHellolt/titlegtlt/headgt
  • ltbodygt
  • lth1gt
  • lt
  • if (request.getParameter("name") null)
  • out.println("Hello World")
  • else
  • out.println("Hello, " request.getParameter("n
    ame"))
  • gt
  • lt/h1gt
  • lt/bodygtlt/htmlgt

66
Velocity
  • lthtmlgt
  • ltheadgtlttitlegtHellolt/titlegtlt/headgt
  • ltbodygt
  • lth1gt
  • if (request.getParameter("name") null)
    Hello World
  • else Hello, request.getParameter("name")
  • end lt/h1gt
  • lt/bodygt
  • lt/htmlgt

67
A JSP áttekintése
  • Bármilyen XML oldalon lehet
  • XML szintakszis
  • Elvileg megvalósíthatja az MVC-t vagy Model
    2-architektúrát
  • Model Java Bean
  • View JSP
  • Controler Servlet
  • Azonban tipikusan Model 1 architekúra
  • Az üzleti logika és a megjelenítés nincs
    szeparálva

68
Elemei
  • Oldal direktíva
  • lt_at_ page contentType"text/html charsetUTF-8"
    gt
  • Akció elem direktíva
  • lt_at_ taglib urihttp//java.sun.com/jsp/jstl/core
    prefix"c" gt
  • Akció elemek
  • ltjspuseBean id"locales" scope"application
    class"mypkg.MyLocales"/gt
  • JSP elemek (Expression Language)
  • ltcset var"selectedFlag value"!empty
    selectedLocaleString" /gt
  • Szkript elemek
  • ltjava kódgt

69
Példa
  • Minta fájl

70
A JSP oldal életciklusa
  • Konvertálás Servletté
  • Fordítás
  • Futtatás
  • Bufferelés

71
Objektumok
  • Implicit
  • A tároló hozza létre oket
  • Request,
  • Alkalmazás specifikus
  • Tipikusan Java Bean-ben tárolódnak
  • Megosztott objektumok
  • Szálak között (I/N)
  • Kötodhetnek
  • Laphoz pageContext
  • Alkalmazáshoz - servletContext
  • Viszonyhoz session
  • Kéréshez request
  • Válaszhoz response

72
Java Bean-nek használata
  • ltjspuseBean id" bookDB scope"application
    class"mypkg. bookDB "/gt
  • ltcset var"bid" value"param.bookId"/gt
  • ltjspsetProperty name"bookDB" property"bookId
    value"bid" /gt
  • ltjspsetProperty name"bookDB" property/gt
  • bookDB.bookDetails.title
  • ltjspgetProperty name"beanName"
    property"propName"/gt

73
Java Server Pages Standard Tag Library
  • Standard, gyakran használt elemek összegyujtve
  • Típusai
  • Alap (c)
  • Változó támogatás
  • Folyam vezérlés
  • URL manipulálás
  • Egyéb
  • XML (x)
  • Alap
  • Folyam vezérlés
  • Transzformáció
  • I18n (fmt)
  • Lokalitás
  • Üzenet formázás
  • Szám, dátum formázás
  • Adatbázis (sql)
  • SQL
  • Egyébb (fn)
  • Gyujtemény hossz

74
Példák
  • Core
  • ltcset var"foo" scope"session" value"..."/gt
  • ltcforEach var"item" items"sessionScope.cart.i
    tems"gt
  • ...
  • lttrgt
  • lttd align"right" bgcolor"ffffff"gt
  • item.quantity
  • lt/tdgt
  • ...
  • lt/cforEachgt
  • URL
  • ltacmetransformgt
  • ltjspinclude page"/exec/employeesList"/gt
  • ltacmetransform/gt
  • ltcimport url"/books.xml" var"xml" /gt
  • ltxparse doc"xml" var"booklist"
  • scope"application" /gt
  • SQL
  • ltcset var"bid" value"param.Add"/gt

75
Saját Elem Könyvtár
  • Újrahasznosítható komponensek
  • Felhasználó által definiált JSP komponens
  • Könyvtárakba gyujtik a hasonló funkciókat,
    egy-egy funkciót megvalósító kód az elem kezelo
    (Tag Handler)
  • Logika/Megjelenítés elkülönül
  • Lehetoségek
  • Paraméterek átadása
  • Értékek visszaadása
  • Minden objektumot elér a JSP oldalon
  • Kommunikálhatnak egymással
  • Egymásba ágyazhatóak
  • Két típus
  • Egyszeru (Nem lehet benne szkript elem)
  • Klasszikus
  • Tag fájl JSP vagy Java kód, a tároló fordítja le

76
Attribútumok
  • Elem attribútumok
  • Egyszeru
  • ltpeldap attr érték/gt
  • ltpeldap attr object.Value/gt
  • Darab (Fragment) egy JSP kód darabot kap
    attribútumként
  • ltsccatalog bookDB "bookDB" color"cccccc"gt
  • ltjspattribute name"normalPrice"gt
  • ltfmtformatNumber value"price"
    type"currency"/gt
  • lt/jspattributegt
  • ltjspattribute name"onSale"gt
  • ltstrikegtltfmtformatNumber value"price
    type"currency"/gtlt/strikegtltbr/gt
  • ltfont color"red"gtltfmtformatNumber
    value"salePrice type"currency"/gtlt/fontgt
  • lt/jspattributegt
  • lt/sccataloggt
  • Dinamikus
  • Nincs specifikálva, menet közben derül ki

77
Törzs (Body)
  • Egy elem más elemeket és HTML tartalmat is
    tartalmazhat
  • ltcif test"param.Clear"gt
  • ltfont color"ff0000" size"2"gtltstronggt
  • You just cleared your shopping cart!
  • lt/stronggtltbrgtnbspltbrgtlt/fontgt
  • lt/cifgt
  • jspbody

78
Elemek közötti kommunikáció
  • Megosztott objektumok segítségével kommunikálnak
    (oldal környezet)
  • ltcset var"aVariable" value"aValue" /gt
  • ltttanotherTag attr1"aVariable" /gt
  • Az egymásba ágyazott elemek a privát változókat
    is használhatják

79
Példa
  • Tag fájl
  • JSP kódot tartalmaz (WEB-INF/tags, WEB-INF/lib)
  • lt_at_ attribute name"greeting" required"true" gt
  • lt_at_ attribute name"name" required"true" gt
  • lth2gtltfont color"black"gtgreeting,
    name!lt/fontgtlt/h2gt
  • Használata
  • lt_at_ taglib tagdir"/WEB-INF/tags" prefix"h" gt
  • lthtmlgt
  • ltheadgtlttitlegtHellolt/titlegtlt/headgt
  • ltbody bgcolor"white"gt
  • ltcset var"greeting" value"Hello" /gt
  • ltform method"get"gt
  • ltinput type"text" name"username" size"25"gt
  • ltpgtlt/pgt
  • ltinput type"submit" value"Submit"gt
  • ltinput type"reset" value"Reset"gt
  • lt/formgt
  • lthresponse greeting"greeting
    name"param.username"/gt

80
Tag Library Descriptor
  • Amennyiben Java-ban írjuk meg az elemkészletünket
    akkor szükséges
  • Információt tartalmaz az elem gyujteményrol és az
    elemekrol is
  • lttaggt
  • ltnamegtpresentlt/namegt
  • lttag-classgtcondpkg.IfSimpleTaglt/tag-classgt
  • ltbody-contentgtscriptlesslt/body-contentgt
  • ...
  • ltattributegt
  • ltnamegttestlt/namegt
  • ltrequiredgttruelt/requiredgt
  • ltrtexprvaluegttruelt/rtexprvaluegt
  • lt/attributegt
  • ...
  • lt/taggt

81
Java Tag
  • SimpleTag, interfészt kell megvalósítani
  • doTag
  • get/set
  • javax.servlet.jsp.JspContext
  • getJspBody()
  • public HelloWorldSimpleTag extends
    SimpleTagSupport
  • public void doTag() throws JspException,
    IOException
  • getJspContext().getOut().write("Hello, world.")
  • public class SimpleWriter extends
    SimpleTagSupport
  • public void doTag() throws JspException,
    IOException
  • StringWriter sw new StringWriter()
  • jspBody.invoke(sw)
  • jspContext().
  • getOut().println(sw.toString().toUpperCase())

82
Iterátor Tag
  • lt_at_ taglib uri"/tlt" prefix"tlt" gt
  • lthtmlgt
  • ltheadgt
  • lttitlegtDepartmentslt/titlegt
  • lt/headgt
  • ltbody bgcolor"white"gt
  • ltjspuseBean id"myorg" class"myorg.Organization
    "/gt
  • lttable border2 cellspacing3 cellpadding3gt
  • lttrgt
  • lttdgtltbgtDepartmentslt/bgtlt/tdgt
  • lt/trgt
  • lttltiterator var"departmentName"
    type"java.lang.String"
  • group"myorg.departmentNames"gt
  • lttrgt
  • lttdgtlta href"list.jsp?deptNamedepartmentName
    "gt
  • departmentNamelt/agtlt/tdgt
  • lt/trgt
  • lt/tltiteratorgt
  • lt/tablegt

83
Iterátor Tag
  • public void doTag() throws JspException,
    IOException
  • if (iterator null)
  • return
  • while (iterator.hasNext())
  • getJspContext().setAttribute(var,
    iterator.next())
  • getJspBody().invoke(null)
  • public void setVar(String var)
  • this.var var
  • public void setGroup(Collection group)
  • this.group group
  • if(group.size() gt 0)
  • iterator group.iterator()

84
Szkriptek használata
  • JSP oldalakon Java kódot is használhatunk
  • Nem célszeru használnunk mert eléggé
    átláthatatlan lesz az oldal
  • Biztonsági kockázata is van (a servlet
    kontextushoz is hozzáférhet mindenki)
  • lt!
  • private BookDBAO bookDBAO
  • public void jspInit()
  • bookDBAO
  • (BookDBAO)getServletContext().getAttribute("bookD
    B")
  • if (bookDBAO null)
  • System.out.println("Couldnt get database.")
  • gt
  • lt!
  • public void jspDestroy()
  • bookDBAO null
  • gt

85
Cél
86
Java Server Faces
  • Szerver oldali web komponens felhasználói
    felületek létrehozására
  • Model 2, MVC
  • A logika és a megjelenítés elkülönül
  • Hasonló lehetoségeket biztosít a fejlesztoknek
    mint a Desktop GUI fejlesztése
  • A Servlet API-ra épül -gt független a JSP-tol

87
JSF
  • Elemei
  • API az UI komponensek reprezentálására és
    állapotuk kezelésére, validálásra, navigációra,
  • JSP Elem könyvtárak
  • Segítségével
  • A felhasználói eseményeket a szerver oldali
    kódhoz köthetjük
  • Az UI komponensek adatait szerver oldali
    adattárolókhoz köthetjük
  • UI készítés újrafelhasználható elemekkel
  • UI állapot elmentése és betöltése
  • Folyamatokat definiálhatunk

88
Komponens modell
  • UIComponent-ek (UIComponentBase) melyek leírják
    az UI komponensek állapotát és viselkedését
  • Renderelo modell mely leírja a megjelenését
  • Kódolás, Dekódolás
  • Esemény kezelo (JavaBean tervezési mintát követi)
  • ActionEvent
  • ValueChangedEvent
  • Konverziós modell
  • Validációs modell (egy vagy több üzenetet
    gyártanak)
  • lthinputText id"userNo value"UserNumberBean.u
    serNumber validator_length minimum6
    maximum'10 /gt

89
Hogyan muködik
90
Kérés feldolgozási életciklus
91
Tipikus JSF alkalmazás
  • Java Bean-ek
  • Esménykezelok
  • Validátorok
  • JSP oldalak
  • Szerver oldali segéd osztályok
  • Facesconfig.xml

92
Példa
  • Jsf.jsp

93
Navigáció definiálása
  • ltnavigation-rulegt
  • ltfrom-view-idgt/greeting.jsplt/from-view-idgt
  • ltnavigation-casegt
  • ltfrom-outcomegtsuccesslt/from-outcomegt
  • ltto-view-idgt/response.jsplt/to-view-idgt
  • lt/navigation-casegt
  • lt/navigation-rulegt
  • ltnavigation-rulegt
  • ltfrom-view-idgt/response.jsplt/from-view-idgt
  • ltnavigation-casegt
  • ltfrom-outcomegtsuccesslt/from-outcomegt
  • ltto-view-idgt/greeting.jsplt/to-view-idgt
  • lt/navigation-casegt
  • lt/navigation-rulegt
  • lthcommandButton id"submit" action"success"
  • value"Submit" /gt

94
Támogató Bean
  • Feladata az oldalon lévo elemek adatainak
    tárolása és az eseménykezelok, validálók,
    megvalósítása
  • Integer userNumber null
  • ...
  • public void setUserNumber(Integer user_number)
  • userNumber user_number
  • public Integer getUserNumber()
  • return userNumber
  • public String getResponse()
  • if(userNumber ! null
  • userNumber.compareTo(randomInt) 0)
  • return "Yay! You got it!"
  • else
  • return "Sorry, "userNumber" is incorrect."

95
Menedzselt Bean
  • A támogató babot regisztrálnunk kell
  • ltmanaged-beangt
  • ltmanaged-bean-namegtUserNumberBeanlt/managed-bean-n
    amegt
  • ltmanaged-bean-classgt
  • guessNumber.UserNumberBean
  • lt/managed-bean-classgt
  • ltmanaged-bean-scopegtsessionlt/managed-bean-scopegt
  • ltmanaged-propertygt
  • ltproperty-namegtminimumlt/property-namegt
  • ltproperty-classgtlonglt/property-classgt
  • ltvaluegt0lt/valuegt
  • lt/managed-propertygt
  • ltmanaged-propertygt
  • ltproperty-namegtmaximumlt/property-namegt
  • ltproperty-classgtlonglt/property-classgt
  • ltvaluegt10lt/valuegt
  • lt/managed-propertygt
  • lt/managed-beangt

96
Fejlesztési lépések
  1. Modell objektumok fejlesztése
  2. Ezek hozzárendelése menedzselt babként
  3. Web oldalak létrehozása UI komponensekkel
  4. Navigáció definiálása
  5. Web.xml konfigurálása

97
A mai eloadás tartalma
  • Probléma a Java Serlettel
  • Template eszközök
  • Java Server Pages
  • Áttekintés
  • Elemei
  • Életciklusa
  • Objektumok
  • Java Beanek használata
  • Java Standard Tag Library
  • Custom Tag Library
  • Java Server Faces
  • Feladata
  • Elemei
  • Navigáció
  • Támogató Bean

98
A következo alkalmazás tartalma
  • Alkalmazás szerverek és ezek szolgáltatásai
  • EAR állományok
  • JMX
  • Példák
  • Jboss, WebSphere
Write a Comment
User Comments (0)
About PowerShow.com