2010. őszi félév. A WEB programozása -JSP3 dr.gál Tibor. // Kötelező csomagbeli elhelyezés package customtags;

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "2010. őszi félév. A WEB programozása -JSP3 dr.gál Tibor. // Kötelező csomagbeli elhelyezés package customtags;"

Átírás

1 JavaServer Pages (JSP) (folytatás) Felhasználó-definiált akcióelemek A szabványos JSTL elemei mellett a felhasználó maga is létrehozhat akcióelemeket, ún. custom tag-eket Ezt már a JSTL megjelenése előtt is megtehette a JSP 1.1 változatától kezdve Egy custom tag használatához a következők szükségesek tag handler Java class, amely implementálja a custom tag által megvalósítandó viselkedést tagkönyvtár leíró (tag library descriptor) a JSP konténerrel való együttműködéshez tartalmazza a custom tag nevét, az implementáló osztály nevét, a jellemzők leírását, stb. több tagkönyvtár leíró egy ún. tagkönyvtár leíró fájlban helyezendő el az alkalmazás telepítési leírójában (WEB-INF/web.xml) egy elemnek tartalmazni kell a tagkönyvtár leíró fájl helyét a JSP oldalon a használat előtt azonosítani kell a használandó custom tag-et Tag handlerek: megfelelő interfészeket implementálnak vagy az ezeket implementáló osztályokat bővítik JSP 1.1 : Tag és BodyTag interfész, TagSupport, BodyTagSupport, BodyContent és TagExtraInfo osztályok JSP 1.2 : IterationTag interfész és TagSupport osztály JSP 2.0 : SimpleTag és JspFragment interfész, SimpletagSupport osztály JSP 1.1 és 1.2 tag handlerek használata igen összetett a handler és a törzs szkripting elemei együttműködésének biztosításához több metódus szükségszerű használata: dostarttag(), doafterbody(), doendtag() stb. JSP 2.0 használata egyszerű egyetlen metódust kell csak implementálni, akár feldolgozandó a törzs akár nem de a törzs szkript elemeket (<%, <%!, <%@) nem tartalmazhat, HTML elemeket, EL kifejezéseket, akciós elemeket viszont igen Bevezető példa: Fix üzenetet generáló akcióelem a tag handler // Kötelező csomagbeli elhelyezés package customtags; // A szükséges csomagok importálása import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; // A SimpleTagSupport osztály bővítése public class EgyszeruUzenet extends SimpleTagSupport { // A dotag() metódus felüldefiniálása public void dotag() throws JspException, IOException { // Referencia a kimeneti folyamba író objektumra JspWriter out = getjspcontext().getout(); // Írás a kimeneti folyamba out.println("jó napot, Hölgyeim és Uraim"); 1

2 a tagkönyvtár leíró fájl, s benne az akcióselemünket leírótag elem <?xml version="1.0" encoding="utf-8"?> <taglib xmlns=" xmlns:xsi=" xsi:schemalocation=" version="2.0"> <tlib-version>1.2</tlib-version> <short-name>eloadasjsp</short-name> <name>udvozlet</name> <tag-class>customtags.egyszeruuzenet</tag-class> <body-content>empty</body-content> <!-- egyéb akcióelemek tagkönyvtár leírói --> </taglib> a tagkönyvtár leíró fájl azonosítása az alkalmazás WEB-INF/web.xml -ben <?xml version="1.0" encoding="iso "?> <web-app xmlns=" xmlns:xsi=" xsi:schemalocation=" version="2.4"> <jsp-config> <taglib> <taglib-uri> </taglib-uri> <taglib-location> /WEB-INF/eloadasJSP.tld </taglib-location> </taglib> </jsp-config> a jsp-config elem azonosít egy tagkönyvtár leíró fájlt az azonosítás a taglib-uri elemmel történik - erre kell majd hivatkozni az akcióelemünket használó JSP oldalon a taglib-location elem pedig a tagkönyvtár helyét adja meg az akcióelem használata a JSP oldalon prefix="msg" %> A következő üzenetet saját akcióelemmel írjuk ki:<br> <center style="font-size:24; color:red"> <msg:udvozlet /> </center> a használandó akcióelemet leíróját tartalmazó tld importálása a taglib direktívával az uri jellemzővel azonosítjuk a tld-t, ugyanez az uri szerepel a WEB-INF/web.xml telepítési leíróban a prefix jellemzővel adjuk meg, hogy milyen előtaggal használjuk a hivatkozott tagkönyvtár elemeit az előtag most msg az elem neve padig a tld-ben megadott udvozlet Jellemzőt tartalmazó akcióelem: a jellemzőben megadott adatokkal táblázat generálása a JSP oldal prefix="tb" %> A következõ táblázatot saját akcióelemmel generáltuk: <center> <tb:table1 adatok="elso oszlop;masodik oszlop;harmadik oszlop;;1;2;3;;a;b;c;;a;b;c" /> </center> az adatok jellemző értéke tartalmazza a megjelenítendő táblázat elemeit a sorokat ;; választja el, a cellákat pegi; table1 az akcióelem neve a tld-ben az újabb akcióelemünk tagkönyvtár leíróját ugyanabban a tld-ben helyezzük el, mint a korábbiét, ezért az alkalmazás telepítés leírójában újabb bejegyzésre nincs szükség 2

3 a tag handler // Kötelező csomagbeli elhelyezés package customtags; // A szükséges csomagok importálása import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; // A SimpleTagSupport osztály bővítése public class Tablazat1 extends SimpleTagSupport { // A jellemző értékét tároló privát stringobjektum private String adatok; // A jellemző értékét beolvasó metódus - mint JavaBeans // esetén public void setadatok(string adatok) { this.adatok = adatok; // A tényleges viselkedést specifikáló dotag() metódus // felüldefiniálása public void dotag() throws JspException, IOException { // Referencia a kimeneti folyamba író objektumra JspWriter out = getjspcontext().getout(); // Az adatok jellemző értékének szétválasztása a ;; // határolók mentén String[] t = adatok.split(";;"); out.println("<table border='1'>"); for(int i=0; i<t.length; i++){ out.println("<tr>"); // Egy sor celláinak szétválasztása a ; határoló mentén String[] tt = t[i].split(";"); // A táblázat egy sorának generálása a kimeneten for(int j=0; j<tt.length; j++) out.println("<td>"+ tt[j] + "</td>"); out.println("</tr>"); out.println("</table>"); a tagkönyvtár leíró fájban a korábbi akcióelem leírója mellett az új akcióelem leírója, az újabb tag elem <name>udvozlet</name> <tag-class>customtags.egyszeruuzenet</tag-class> <body-content>empty</body-content> <name>table1</name> <tag-class>customtags.tablazat1</tag-class> <body-content>empty</body-content> <attribute> <name>adatok</name> <required>yes</required> <rtexprvalue>true</rtexprvalue> </attribute> a tag új gyermekeleme az attribute elem, amely a jellemzőt írja le, ebben name a jellemző neve requiredyes vagy no értéke a kötelező használatra vonatkozik rtexprvaluetrue vagy false azt specifikálja, hogy értékeként futásidőben kiértékelendő kifejezés használható-e Törzset tartalmazó akcióelem: a törzsben megadott adatokkal táblázat generálása a JSP oldal prefix="tb" %> A következő táblázatot saját akcióelemmel generáltuk: <center> <tb:table2> Elso oszlop;masodik oszlop; Harmadik oszlop;; 1;2;3;;a;b;c;; A;B;C;; x;y;z </tb:table2> </center> az adatokat most az akcióelem törzse tartalmazza 3

4 a tag handler // Kötelező csomagbeli elhelyezés package customtags; // A szükséges csomagok importálása import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; // Ettől kezdve a program azonos a Table1 programmal, // hiszen az adatok most már az adatok objektumban // vannak // Egyetlen eltérés, hogy az adatok most StringWriter // típusú, ami a tostring() metódussal String típusba // alakítandó JspWriter out = getjspcontext().getout(); // A SimpleTagSupport osztály bővítése public class Tablazat2 extends SimpleTagSupport { public void dotag() throws JspException, IOException { // Refrenecia az elem törzsére JspFragment body = getjspbody(); // Egy StringWriter objektum létrehozása StringWriter adatok = new StringWriter(); // A törzs tartalmának beolvasása a létrehozott // StringWriter objektumba // Ha az argumentum null lenne, akkor a törzs tartalma // közvetlenül, feldolgozás nélkül kerülne a kimenetre body.invoke(adatok); String[] t = (adatok.tostring()).split(";;"); out.println("<table border='1'>"); for(int i=0; i<t.length; i++){ out.println("<tr>"); String[] tt = t[i].split(";"); for(int j=0; j<tt.length; j++) out.println("<td>"+ tt[j] + "</td>"); out.println("</tr>"); out.println("</table>"); a tagkönyvtár leíró fájban a korábbi akcióelemek leírói mellett az új akcióelem leírója, az újabb tag elem <name>udvozlet</name> <tag-class>customtags.egyszeruuzenet</tag-class> <body-content>empty</body-content> <name>table1</name> <tag-class>customtags.tablazat1</tag-class> <body-content>empty</body-content> <attribute> <name>adatok</name> <required>yes</required> <rtexprvalue>true</rtexprvalue> </attribute> <name>table2</name> <tag-class>customtags.tablazat2</tag-class> <body-content>scriptless</body-content> a body-content tartalma most nem empty, hanem scriptless, azaz Java szkripteken kívül mindent tartalmazhat A törzs számára hozzáférhető, változót exportáló akcióelem: szövegfájl olvasása, s az olvasott sorokhoz hozzáférés a törzsben akcióelemekkel vagy EL kifejezésekkel a JSP oldal prefix="k" %> <k:readline realfilepath= '<%=application.getrealpath("data/1.txt")%>'> ${line<br> </k:readline> a readline akcióelem soronként olvassa a realfilepath jellemzőjében specifikált fájlt, s az egyes sorokat a törsz számára egy line változóban exportálja a törzsben ennek a line változónak a tartalmát kivisszük a kimenetre a ${line EL kifejezéssel a fájl valóságos elérési útját, melyet az alkalmazás gyökeréhez képest ad meg a data/1.txt, a pagecontext.getservletcontext().getrealpath() állítja elő 4

5 a tag handler package customtags; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class ReadFile extends SimpleTagSupport { private String realfilepath; public void setrealfilepath(string realfilepath) {this.realfilepath = realfilepath; public void dotag() throws JspException, IOException { try { FileReader fr = new FileReader(realFilePath); BufferedReader br = new BufferedReader(fr); String s; while((s=br.readline())!=null) { // Az aktuális olvasott sor beírása line // változónéven a pagecontext objektumba, hogy az // hozzáférhető legyen a JSP oldalon getjspcontext().setattribute("line",s+"\n"); a tag handler (folytatás) // Az akcióelem törzsét végrehajtó utasítás // végrehajtása getjspbody().invoke(null); fr.close(); catch (IOException e) { Megjegyzés: a setattribute() metódusnak lehet egy harmadik argumentuma, amellyel a hatáskör állítható be. Ezek a következők lehetnek: PageContext.APPLICATION_SCOPE PageContext.SESSION_SCOPE PageContext.REQUEST_SCOPE PageContext.PAGE_SCOPE (ez a default). A fentiek az exportált változóhoz való hozzáférést rendre az alkalmazásban, a munkafolyamatban, a kérelem oldalain és végül magán az aktuális oldalon teszik lehetővé. a tagkönyvtár leíró fájban a korábbi akcióelemek leírói mellett az új akcióelem leírója, az újabb tag elem <name>readline</name> <tag-class>customtags.readfile</tag-class> <body-content>scriptless</body-content> <attribute> <name>realfilepath</name> <required>yes</required> <rtexprvalue>true</rtexprvalue> </attribute> Kiegészítés A tag handlerben közvetlenül nem férhetők hozzá a pagecontext, request, session, application objektumok metódusai. Ha mégis szeretnénk ezeket használni, akkor ezt a következőképpen megtehetjük: // a JSP oldalon <% pagecontext.setattribute("pc",pagecontext); %> <% pagecontext.setattribute("sc",application); %> // a tag handlerben PageContext pagecontext = (PageContext)getJspContext().getAttribute("pC"); ServletContext servletcontext = (ServletContext)getJspContext().getAttribute("sC"); Az előzőek valamelyikét használva, már elegendő lenne a fájl alkalmazásbeli útjának a megadása, s a tag handlerben előállítható lenne a valóságos elérési út a következőképpen: pagecontext.getservletcontext().getrealpath() // vagy servletcontext.getrealpath() 5

6 Fájl írása a jellemzőben megadott tartalommal a JSP oldal prefix="k" %> <%@ taglib uri=" prefix="c" %> <c:set var="s" value=""/> <k:readline realfilepath= '<%=application.getrealpath("data/1.txt")%>'> <c:set var="s" value="${s${line"/> </k:readline> <k:writefile realfilepath= '<%=application.getrealpath("data/2.txt")%>' text='${s' /> Az 1.txt fájlból rendre beolvasott sorokat hozzáfűzzük a kinullázotts EL változóhoz, majd az s változó tartalmát beírjuk a 2.txt fájlba. a tag handler package customtags; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class WriteFile extends SimpleTagSupport { private String realfilepath; private String text; public void setrealfilepath( String realfilepath){this.realfilepath = realfilepath; public void settext(string text){this.text = text; public void dotag() throws JspException, IOException { try { FileWriter fw = new FileWriter(realFilePath,false); BufferedWriter bw = new BufferedWriter(fw); bw.write(text); bw.close(); fw.close(); catch (IOException e) { a tagkönyvtár leíró fájban a korábbi akcióelemek leírói mellett az új akcióelem leírója, az újabb tag elem <name>writefile</name> <tag-class>customtags.writefile</tag-class> <body-content>scriptless</body-content> <attribute> <name>realfilepath</name> <required>yes</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>text</name> <required>yes</required> <rtexprvalue>true</rtexprvalue> </attribute> Fájl írása hozzáfűzéssel (append) a jellemzőben megadott tartalommal <%@ a taglib JSP oldal uri=" prefix="k" %> <%@ taglib uri=" prefix="c" %> <c:set var="apppath" value='<%=application.getrealpath("/")%>' /> <k:readline realfilepath='${apppathdata/1.txt'> <k:appendfile realfilepath='${apppathdata/3.txt' text='${line'/> </k:readline> A valóságos utat most kétszer is elő kellene állítani, ezért először előállítottuk az alkalmazás valóságos útját, majd ehhez rendre hozzáfűztük a relatív utakat A tag handler csak annyiban különbözik a előzőekben megadottól, hogy a FileWriter konstruktorban a második argumentum nem false, hanem true 6

7 Fájl olvasása és írása hozzáférési zárolással a JSP oldal <c:set var="s" value=""/> <c:set var="d" value='<%=new java.util.date()+"\n"%>' /> <c:set var="text" value=""/> <c:set var="apppath" value='<%=application.getrealpath("/")%>'/> <k:readwritefile realfilepath='${apppathdata/4.txt'> <c:choose> <c:when test="${readready!='yes'" > <c:set var="s" value="${s${line"/> </c:when> <c:otherwise> <c:set var="text" value='${s${d'/> </c:otherwise> </c:choose> </k:readwritefile> a tag handler package customtags; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class ReadWriteFile extends SimpleTagSupport { private String realfilepath; private String readready = "no"; public void setrealfilepath( String realfilepath){this.realfilepath=realfilepath; public synchronized void dotag() throws JspException, IOException { try { FileReader fr = new FileReader(realFilePath); BufferedReader br = new BufferedReader(fr); String s; a tag handler (folytatás) while((s=br.readline())!=null) { getjspcontext().setattribute("line",s+"\n"); getjspbody().invoke(null); fr.close(); catch (IOException e) { getjspcontext().setattribute("readready","yes"); getjspbody().invoke(null); try{ FileWriter fw = new FileWriter(realFilePath,false); BufferedWriter bw = new BufferedWriter(fw); String text = (String)getJspContext().getAttribute("text"); bw.write(text); bw.close(); fw.close(); catch (IOException e) { Megjegyzés: A tag handlerek class fájljait egyetlen jar fájlba tömörítve az alkalmazás lib könyvtárában is tárolhatjuk. A jar fájl előállítása - Hozzunk létre egy tmp/customtags nevű üres mappát - Töltsük be a handlerek class fájljait a customtags mappába - A tmp mappában hajtsuk végre a következő parancsot jar cf k.jar customtags/*.class - A keletkezett k.jar fájlt másoljuk be az alkalmazás lib könyvtárába 7

8 Az értékelés webalkalmazás megoldása fájl alapon az űrlapot megjelenítő oldal változatlan, csak az action jellemző értéke változtatandó meg ertekeles1filejstl.jsp -re az adatokat fogadó jsp oldal (ertekeles1filejstl.jsp) prefix="k" %> taglib uri=" prefix="c" %> <html> <body> <head> <style type=text/css> td{font-size:18pt;color:white; font-weight:bold; </style> </head> // '\n' nem írható be közvetlenül egy EL kifjezésbe <% pagecontext.setattribute("lf","\n"); %> <c:set var="apppath" value= '<%=application.getrealpath("/")%>'/> <k:appendfile realfilepath='${apppathdata/ertekeles.txt' text='${param.t1${param.t2${param.t3${lf'/> <h2>köszönjük, hogy értékelte az oktatót!</h2> Ha megkivánja tekinteni az eddigi értékelések átlagát, akkor <a href="ertekeles2filejstl.jsp">kattintsonide.</a> </html> Az átlagot megjelenítő oldal prefix="k" %> taglib uri=" prefix="c" %> taglib uri=" prefix="fn" %> taglib uri=" prefix="fmt" %> <html> <body> <head> <style type=text/css> td{font-size:18pt;color:white; font-weight:bold; </style> </head> <c:set var="sum1" value="${0" /> <c:set var="sum2" value="${0" /> <c:set var="sum3" value="${0" /> <c:set var="n" value="${0" /> <c:set var="apppath" value= '<%=application.getrealpath("/")%>'/> <k:readline realfilepath='${apppathdata/ertekeles.txt'> <c:set var="x" value="${line" /> <c:set var="sum1" value="${sum1+fn:substring(x,0,1)" /> <c:set var="sum2" value="${sum2+fn:substring(x,1,2)" /> <c:set var="sum3" value="${sum3+fn:substring(x,2,3)" /> <c:set var="n" value="${n+1" /> </k:readline> <fmt:setlocale value="hu" /> <center> <table bgcolor=black> <tr> <td colspan=2> <h2 style='background-color:red;color:white; font-weight:bold'> Az eddigi eredmények értékelése </h2> </td> </tr> 8

9 <tr> <td>a beküldött értékelések száma:</td> <td><c:out value="${n" /></td> </tr> <tr> <td>az eloadó felkészültsége:</td> <td><fmt:formatnumber value="${sum1/n" pattern="#.##" var="s1"/> <c:out value="${s1" /> </td> </tr> <tr> <td>az eloadó tárgyi tudása:</td> <td><c:out value="${sum2/n" /></td> </tr> <tr> <td>az eloadás érthetosége:</td> <td><c:out value="${k:format(sum3/n,2)" /></td> </tr> </table> </center> </html> Felhasználó-definiált EL függvények Lehetővé teszik felhasználó-definiált statikus metódusok hívását EL kifejezésekben. A statikus metódusokat definiáló osztály vagy osztályokat a tag handler osztályokkal azonos módon lehet tárolni Egy osztály akárhány metódust definiálhat A tld-ben minden metódust egy <function> bejegyzéssel azonosítunk Példa konverziós függvényekre package customtags; public class Conversions { //számot jelentő stringben a tizedspont helyettesítése //tizedesvesszővel, s max. n tizedesjegy meghagyása public static String format(string x, int n) { String y = x.replace('.',','); int i = y.indexof(','); if(i == -1) return y; return y.substring(0,i+n+1); // string átalakítása lebegőpontos számmá public static float stringtofloat(string x){ float y = 0; try{ y = Float.parseFloat(x); catch(exception e){ return y; Használat a JSP oldalon prefix="mf" %> <br> ${mf:format(" ",1)<br> ${mf:format(" ",3) Bejegyzés a tld-ben <function> <description>fixing decimal numbers</description> <name>format</name> <function-class>customtags.conversions</function-class> <function-signature> java.lang.string format(java.lang.string, int) </function-signature> </function> <function> <description>string to float</description> <name>stringtofloat</name> <function-class>customtags.conversions</function-class> <function-signature> float stringtofloat(java.lang.string) 9

10 Tag fájlok Tag fájlok Forrásfájl, amely egy JSP kódrészletet tartalmaz, s mint felhasználó definiált tag újrafelhasználható Lehetővé teszi felhasználó definiált tag-ok definiálását JSP szintaxissal Az eddigieknél hatékonyabb eszköz az oldalak szerzői számára Gyorsabbá teszi a fejlesztést Tag handlerbe transzformálódnak, s azután lefordítódnak Nem igényelnek TLD-t Egyszerűbb, mégis rugalmas becsomagolás A.tag fájlt egyszerűen a /WEB-INF/tags könyvtárban kell tárolni Az implicit tag könyvtár automatikusan generálódik De egy.tld is megírható a rugalmasság növelésére Vagy egy JAR fájlba is csomagolható egy.tld-vel Egy tag könyvtár deklarálása a JSP oldalon: a taglib direktívában a tagdir jellemzővel A taglib direktíva: A tagkönyvtárat azonosítja és specifikálja a JSP oldalon használandó prefixet. Kötelező jellemzői: tagdir= /WEB-INF/tags[/subdir]+ prefix= mytagfile Példák: <%@ taglib prefix="t1" tagdir=/web-inf/tags %> <%@ taglib prefix="t2" tagdir=/web-inf/tags/dir %> Tag fájl direktívák tag A felhasználói tag tulajdonságait deklarálja. Hasonló a JSP page direktívájához, de csak tag fájlokban használható Szintaxisa (piros színnel a default jellemzőértékek): <%@ tag [display-name="name of tag the file display-name"] [body-content="scriptless tagdependent empty"] [dynamic-attributes="page-scoped attribute"] [small-icon="relativeurl"] [large-icon="relativeurl"] [decription="text"] [example="text"] [language="java"] [import="{package.class package.*,"] [pageeencoding="{characterset ISO "] iselignored="true false"] %> 10

11 A tag direktíva fontosabb jellemzői: body-content scriptless: default érték, ekkor a hívó oldalon az elem tartalma sablon szöveg, EL kifejezések szabványos akciók felhasználó definiált akciók lehet (tehát csak szkript elemek nem!) Az elem tartalmát a tag fájl a <jsp:dobody /> hatására értékeli ki, s küldi a kimenetre vagy tárolja egy EL változóban empty: a hívó oldalon az elem tartalma üres kell legyen tagdependent: az elem tartalomban mindent sablon szövegnek tekint a fordító dynamic-attributes: Ha jelen van, akkor elfogad járulékos jellemzőket dinamikus nevekkel. Lásd később. Attributum: hívó tag file communikáció Az attribute direktíva lehetővé teszi, hogy a hívó JSP oldal adatokat adjon át a tag fájlnak. Az adat vagy normális (hívás előtt a konténer által kiértékelendő nemprimitív típusú adat) vagy fragment (a tag fájl által kiértékelendő kódrészlet) lehet. Az utóbbi esetben a tag fájlban a <jsp:invoke> hatására értékelődik ki a fragment attributum. Szintaxis a tag oldalon: <%@ attribute name="attribute-name" [required="true false"] [fragment="true false"] [rtexprvalue="true false"] [type="java.lang.string a non-primitive type"] [decription="text"] %> Ha fragment="true", akkor rtexprvalue és type nem adandó meg, ezek értékét a konténer true és javax.servlet.jsp.tagext.jspfragment értékre állítja be. 1.példa: normál attribútumok használata <!-- tag file, melynek neve szinvaltas.tag --> <%@ attribute name="szin" required="true" %> <font color="${szin"> <jsp:dobody /> </font> <!-- hívó jsp fájl --> <%@ taglib prefix="t1" tagdir="/web-inf/tags" %> <t1:szinvaltas szin="red" > Ez a szöveg vörös színnel fog megjelenni. </t1:szinvaltas> <t1:szinvaltas szin="${request.preferaltszin" > Ez a szöveg a felhasználó által megadott, preferált színnel fog megjelenni. </t1:szinvaltas> 2.példa: fragment attributum használata - a tag fájl <%@ attribute name="bookdb" required="true" type="database.bookdb" %> <%@ attribute name="color" required="true" %> <%@ attribute name="normalprice" fragment="true" %> <%@ attribute name="onsale" fragment="true" %> <%@ variable name-given="price" %> <%@ variable name-given="saleprice" %> <center><table> <c:foreach var="book" begin="0" items="${bookdb.books"> </c:foreach> <c:set var="saleprice" value="${book.price *.85" /> <c:set var="price" value="${book.price" /> <c:choose> <c:when test="${book.onsale" > <jsp:invoke fragment="onsale" /> </c:when> <c:otherwise> <jsp:invoke fragment="normalprice" /> </c:otherwise> </c:choose> </table></center> 11

12 2.példa (folyt.) - a hívó jsp oldal <sc:catalog bookdb="${bookdb" color="#cccccc"> <jsp:attribute name="normalprice"> <fmt:formatnumber value="${price" type="currency"/> </jsp:attribute> <jsp:attribute name="onsale"> <strike> <fmt:formatnumber value="${price" type="currency"/> </stike> <br/> <font color="red"> <fmt:formatnumber value="${saleprice" type="currency"/> </font> </jsp:attribute> </sc>catalog> A tag direktíva dynamic-attributes jellemzője lehetővé teszi járulékos jellemzők elfogadását dinamikus nevekkel. Példa: <!-- a tag file melynek neve szinteszt.tag --> <%@ taglib uri=" prefix="c" %> <%@ tag dynamic-attributes="szinek"%> <ul> <c:foreach var="szin" begin="0" items="${szinek"> <li> ${szin.key = <font color="${szin.value">${szin.value</font> </li> </c:foreach> </ul> <!-- a hívó JSP oldal --> <%@ taglib prefix="t1" tagdir=/web-inf/tags %> <t1:szinteszt szin1="red" szin2="yellow" szin3="green"/> Variable: tag file hívó communikáció A variable direktíva lehetővé teszi, hogy a tag fájlban beállított EL változó értékéhez a hívó JSP oldal hozzáférjen. Szintaxis: <%@ variable {name-given="scripting variable" (name-from-attribute="scripting variable" alias="(locally-scoped attribute") [variable-class="java.lang.string var. class name"] [declare="true false"] [scope="at_begin AT_END NESTED"] [decription="text"] %> A scope értelmezése AT_BEGIN a változó hozzáférhető a hívó oldalon a tag nyitóelemétől kezdve AT_END a változó hozzáférhető a hívó oldalon a tag záróelemétől kezdve NESTED esetén a változó csak az elem törzsében férhető hozzá Példa <!-- a.tag --> <%@ taglib prefix="c" uri=" %> <%@ variable name-given="x" scope="at_end" %> <c:set var="x" value="hello" /> <!-- b.jsp --> <%@ taglib prefix="tags" tagdir="/web-inf/tags" %> ${x <tags:a /> ${x A fenti példában az első hivatkozás az x változóra undefined értéket ad, mivel a változó még nincs deklarálva. Miután azonban a tag fájl meghívása megtörtént és a változó így értéket kapott, a második hivatkozás már a Hello stringet írja ki. 12

13 Példa: fájl olvasása <!-- readfile.tag file hivasa --> taglib prefix="tag1" tagdir="/web-inf/tags" %> <tag1:readfile fname='<%=application.getrealpath("data/1.txt")%>' > ${line<br> </tag1:readfile > <!-- readfile.tag file --> tag import="javax.servlet.jsp.*,java.io.*" %> attribute name="fname" required="true" %> variable name-given="line" %> <% int i = 1; try { FileReader fr = new FileReader(fname); BufferedReader br = new BufferedReader(fr); String s; while((s=br.readline())!=null) { session.setattribute("line", "<font color=red><b>"+i++ +":</b></font> " + s + "\n"); %> <jsp:dobody /> <% fr.close(); catch (IOException e) { %> Fontosabb elemek részletei <jsp:dobody> Ez az elem a tag fájlban kiértékeli a hívó jsp oldalon az elem tartalmát, s azt vagy a kimenetnek adja át, vagy egy EL változóban tárolja. Szintaxis: <jsp:dobody ({var="scopedattributename" varreader="scopedatributename" [scope="page request session application"]>) /> Ha a var jellemző jelen van, akkor az elem tartalma ebben tárolódik String formájában Ha a varreader jellemző jelen van, akkor az elem tartalma ebben tárolódik java.io.reader objektum formájában A fenti két jellemző közül legfeljebb az egyik lehet jelen Ha egyik sincs jelen, akkor az elem tartalma a kimenetnek (JspWriter) adódik át A scope értéke a var vagy varreader hatáskörét állítja be <jsp:invoke> Ez az elem kiértékeli a fragment attributumot. Szintaxisa: <jsp:invoke fragment="fragmentname" ({var="scopedattributename" varreader="scopedatributename" [scope="page request session application"]>) /> A fragment attribútum értéke azonosítja a kiértékelendő attribútumot Ha a var jellemző jelen van, akkor a kiértékelés eredménye ebben tárolódik String formájában Ha a varreader jellemző jelen van, akkor a kiértékelés eredménye ebben tárolódik java.io.reader objektum formájában A fenti két jellemző közül legfeljebb az egyik lehet jelen Ha egyik sincs jelen, akkor az elem tartalma a kimenetnek (JspWriter) adódik át A scope értéke a var vagy varreader hatáskörét állítja be 13

14 Tag fájlok becsomagolása Egy vagy több tag fájl becsomagolgató egy jar fájlba, de ekkor már egy tagkönyvtár leírót is létre kell hozni. Ebben az uri elem az egyértelmű azonosításra szolgál Minden tag számára most a tag elem helyett egy tag-file elemnek kell szerepelni a leíróban. Minden tag-file elemnek két gyermekeleme van: name és path. name: a tag nevét specifikálja, egyedi kell legyen az alkalmazásban path: a teljes elérési út, amely /META-INF/tags sztringgel kezdődik Példa: egy encode.tag tag fájl becsomagolása Legyen a tagkönyvtár leíró neve mytld2.tld, ennek alakja <?xml version="1.0" encoding="utf-8"?> <taglib xmlns=" xmlns:xsi= " xsi:schemalocation= " web-jsptaglibrary_2_0.xsd" version="2.0"> <description>jsp 2.0 tag files</description> <tlib-version>1.0</tlib-version> <short-name>my Tag Files</short-name> <uri> <tag-file> <name>encode</name> <path>/meta-inf/tags/encode.tag</path> </tag-file> </taglib> Hozzuk létre az alábbi könyvtárstruktúrát Lépjünk be a deploy könyvtárba, és hajtsuk végre az alábbi parancsot jar cvf mytagfiles.jar * Ez létrehozza a maytagfiles.jar fájlt. Másoljuk be ezt a fájlt az alkalmazás WEB-INF/lib könyvtárába Indítsuk újra a web konténert. Ekkor a következő JSP oldal hozzá fog férni az encode tag fájlhoz: <%@ taglib prefix="easy" uri=" %> <easy:encode input="<br/> hatása soremelés" /> 14

Szerver oldali Java programozás 2007-08/II. 1. óra. Elemkönyvtárak. Elemkönyvtárak használata Saját elemkönyvtár készítése. szenasi.sandor@nik.bmf.

Szerver oldali Java programozás 2007-08/II. 1. óra. Elemkönyvtárak. Elemkönyvtárak használata Saját elemkönyvtár készítése. szenasi.sandor@nik.bmf. Szerver oldali Java programozás 2007-08/II. 1. óra Elemkönyvtárak Elemkönyvtárak használata Saját elemkönyvtár készítése szenasi.sandor@nik.bmf.hu Adatbázisok elérése Témakörök Elemkönyvtárak használata

Részletesebben

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

A WEB programozása - JSP1 dr.gál Tibor. 2010. őszi félév Általános jellemzők JavaServer Pages (JSP) Java utasításokat helyezetünk el a HTML lapon Ezket a Java utasításokat a kiszolgáló végrehajtja Az ügyfél felé generált tartalom: statikus HTML kód + Java utasítások

Részletesebben

JavaServer Pages (JSP) (folytatás)

JavaServer Pages (JSP) (folytatás) JavaServer Pages (JSP) (folytatás) MVC architektúra a Java kiszolgálón Ügyfél (Böngésző) 5 View elküldi az oldal az ügyfélez View (JSP) Ügyfél üzenet küldése a vezérlőnek 1 3 4 Kérelem továbbítása a megjelenítőnek

Részletesebben

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

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa Web Technológiák Java Server Pages - JSP Répási Tibor egyetemi tanársegéd Miskolc Egyetem Infomatikai és Villamosmérnöki Tanszékcsoport (IVM) Általános Informatikai Tanszék Iroda: Inf.Int. 108. Tel: 2101

Részletesebben

A JavaServer Pages (JSP)

A JavaServer Pages (JSP) A JavaServer Pages (JSP) Fabók Zsolt Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2008. 03. 27. JSP Harmadik generáci ciós s WEB szerver A dinamikus lap a tipikus Dinamikus

Részletesebben

A JavaServer Pages (JSP)

A JavaServer Pages (JSP) A JavaServer Pages (JSP) Fabók Zsolt Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2008. 03. 27. JSP Harmadik generáci ciós s WEB szerver A dinamikus lap a tipikus Dinamikus

Részletesebben

A JavaServer Pages (JSP)

A JavaServer Pages (JSP) A JavaServer Pages (JSP) Fabók Zsolt Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem JSP WEB-es alkalmazások fejlődéstörténete A WEB-es alkalmazások fejlődését nyomon követve három nagy korszakot

Részletesebben

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

A Java Server Pages technológia. JSP és JSP elemkönyvtárak, JSTL alapok A Java Server Pages technológia JSP és JSP elemkönyvtárak, JSTL alapok JSP Statikus és dinamikus részekkel egyaránt rendelkező webes tartalmak készítése megjelenítés JSP: szöveges dokumentum, amely statikus

Részletesebben

JSP standard elemkönyvtár JSTL. alap elemkönyvtár (core) nemzetköziesítés (internationalization) Saját elemkönyvtárak (Custom Tags)

JSP standard elemkönyvtár JSTL. alap elemkönyvtár (core) nemzetköziesítés (internationalization) Saját elemkönyvtárak (Custom Tags) JSP elemkönyvtárak Áttekintés Bevezetés JSP standard elemkönyvtár JSTL alap elemkönyvtár (core) nemzetköziesítés (internationalization) Saját elemkönyvtárak (Custom Tags) Elemkönyvtárak A JSP technológia

Részletesebben

A saját elemek. JSP standard elemkönyvtár JSTL alap elemkönyvtár (core) nemzetköziesítés (internationalization) Saját elemkönyvtárak (Custom Tags)

A saját elemek. JSP standard elemkönyvtár JSTL alap elemkönyvtár (core) nemzetköziesítés (internationalization) Saját elemkönyvtárak (Custom Tags) Áttekintés JSP elemkönyvtárak Bevezetés JSP standard elemkönyvtár JSTL alap elemkönyvtár (core) nemzetköziesítés (internationalization) Saját elemkönyvtárak (Custom Tags) 1 / 46 2 / 46 Elemkönyvtárak A

Részletesebben

JavaServer Pages JSTL, EL

JavaServer Pages JSTL, EL JavaServer Pages JSTL, EL Krizsán Zoltán 1 [2014. május 19.] 1 Általános Informatikai Tanszék Miskolci Egyetem Webalkalmazások fejlesztése tananyag Tartalom Tag library (TL) Általános információk JSP Tagok

Részletesebben

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

Szervlet-JSP együttműködés Java programozási nyelv 2007-2008/ősz 10. óra Szervlet-JSP együttműködés Kérés továbbítás technikái legradi.gabor@nik.bmf.hu szenasi.sandor@nik.bmf.hu Szervlet-JSP együttműködés Témakörök Osztálykönyvtár

Részletesebben

Web-fejlesztés NGM_IN002_1

Web-fejlesztés NGM_IN002_1 Web-fejlesztés NGM_IN002_1 Dinamikus tartalom 3. Template feldolgozás Template feldolgozás Statikus (HTML) fájlok dinamikus tartalom beszúrással (speciális tagek) Template processzor PHP Cold Fusion ASP

Részletesebben

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?

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? A "java Villa -v" parancs jelentése: A java interpreter elindítja a Villa osztály statikus main metódusát, és átadja neki paraméterként a "-v" stringet. A java interpreter elindítja először a Villa osztály

Részletesebben

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

OOP: Java 8.Gy: Abstract osztályok, interfészek OOP: Java 8.Gy: Abstract osztályok, interfészek 26/1 B ITv: MAN 2019.04.03 Abszrakt metódus és absztrakt osztály. Gyakran előfordul a tervezés során, hogy egy osztály szintjén tudjuk, hogy valamilyen metódus

Részletesebben

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o Miért Java? széleskörben elterjedt Micro Edition - beágyazott rendszerek, régi telefonok Standard Edition - PC, android ezen alapul Enterprise Edition - vállalati programok, web service-ek multiplatform

Részletesebben

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.

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. 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. Hozzunk létre egy Dynamic Web projectet File New Other itt a következőket

Részletesebben

Multimédia 2017/2018 II.

Multimédia 2017/2018 II. Multimédia 2017/2018 II. 1. gyakorlat HTML5, CSS3 alapok Alapvető HTML5 elemek Egyszerű HTML dokumentum Oldal cime

Részletesebben

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

Java programozási nyelv 2007-2008/ősz 9. óra. Java Server Pages. JSP technika alapjai 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

Részletesebben

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

Java programozási nyelv 4. rész Osztályok II. Java programozási nyelv 4. rész Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/17 Tartalomjegyzék

Részletesebben

Java Programozás 11. Ea: MVC modell

Java Programozás 11. Ea: MVC modell Java Programozás 11. Ea: MVC modell 20/1 B ITv: MAN 2018.03.02 MVC Model-View-Controller A modell-nézet-vezérlő a szoftvertervezésben használatos szerkezeti minta. Az MVC célja elválasztani az üzleti logikát

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 13. előadás Throwable Error Exception RuntimeException IOException Saját (általában) Nem ellenörzött kivételek (Unchecked

Részletesebben

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

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java Függvények, csomagok Csomagok Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges számú osztályt tartalmazhat Pl.: java.util.scanner Könyvtárhierarhiát fed: Pl.: java/util/scanner.java Célja:

Részletesebben

Bevezető. Servlet alapgondolatok

Bevezető. Servlet alapgondolatok A Java servlet technológia Fabók Zsolt Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2008. 03. 06. Servlet Bevezető Igény a dinamikus WEB tartalmakra Előzmény: CGI Sokáig

Részletesebben

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

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor Java Programozás 4. Gy: Java GUI Tipper, MVC kalkulátor 15/1 B ITv: MAN 2018.03.10 1. Feladat: Tipper Készítsük el a tippelős programunk grafikus változatát. Az üzleti logika kódja megvan, a felület pedig

Részletesebben

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

Java programozási nyelv 5. rész Osztályok III. Java programozási nyelv 5. rész Osztályok III. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

Osztályok. 4. gyakorlat

Osztályok. 4. gyakorlat Osztályok 4. gyakorlat Az osztály fogalma Az objektumok formai leírása, melyek azonos tulajdonsággal és operációkkal rendelkeznek. Osztályból objektum készítését példányosításnak nevezzük. Minden objektum

Részletesebben

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

A JSP életciklusa Szkript elemek Dinamikus tartalom létrehozása Kifejezés nyelv Tartalom újrafelhasználása Vezérlés átadása Visszatekintés JSP technológia Áttekintés Bevezetés JSP életciklusa Szkript elemek, implicit objektumok, bean-ek, EL include, (forward) Visszatekintés MVC Áttekintés Bevezetés JSP életciklusa Szkript elemek, implicit

Részletesebben

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

JSP életciklusa Szkript elemek, implicit objektumok, bean-ek, EL include, (forward) Visszatekintés MVC JSP technológia Áttekintés Bevezetés JSP életciklusa Szkript elemek, implicit objektumok, bean-ek, EL include, (forward) Visszatekintés MVC JSP technológia A JSP technológiával könnyen készíthető olyan

Részletesebben

JEE tutorial. Zsíros Levente, 2012

JEE tutorial. Zsíros Levente, 2012 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

Részletesebben

és az instanceof operátor

és az instanceof operátor Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

Stateless Session Bean

Stateless Session Bean Stateless Session Bean Készítsünk egy stateless session bean-t, amellyel összeadhatunk két számot. Hozzunk létre egy Dynamic Web projectet File New Other itt a következőket kell választani: Web Dynamic

Részletesebben

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi. Függvények 1.Függvények...1 1.1.A függvény deníció szintaxisa... 1..Függvények érték visszatérítése...3 1.3.Környezettel kapcsolatos kérdések...4 1.4.Lokális változók használata...4 1.5.Rekurzív hívások...5.kód

Részletesebben

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

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

OOP #14 (referencia-elv)

OOP #14 (referencia-elv) OOP #14 (referencia-elv) v1.0 2003.03.19. 21:22:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_14-1 - E jegyzet

Részletesebben

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

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés Kivételek kezelése (exception handling) Hibakezelés old style class Szamolo { void szamol( String s, int i ) { int d; if (i!= 0) d = (i+1)/i; else if (s!= null) d = s.length(); else if (i > 10) // applikációs

Részletesebben

Segédanyag: Java alkalmazások gyakorlat

Segédanyag: Java alkalmazások gyakorlat Segédanyag: Java alkalmazások gyakorlat Készítette: Szabó Attila 2009/2010-2 félév, 2. gyakorlat 1 Osztályok és objektumok default, public, protected, private láthatóság a metódusokra és adattagokra (első

Részletesebben

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

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN Objektum Orientált Programozás 11. Kivételkezelés 44/1B IT MAN B IT v: 2016.05.03 MAN Pici elmélet A Java kivételkezelésének célja a programfutás során keletkezett hibák kiszűrése és megfelelő kezelése.

Részletesebben

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

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK Horváth Győző Egyetemi adjunktus 1117 Budapest, Pázmány Péter sétány 1/C, 2.420 Tel: (1) 372-2500/1816 2 Ismétlés Ismétlés 3 Fájl/Adatbázis 3 4 Szerver 2 CGI

Részletesebben

Informatika terméktervezőknek

Informatika terméktervezőknek Informatika terméktervezőknek C# alapok Névterület (namespace) using Osztály (class) és Obejtumok Metódus (function, procedure, method) main() static void string[] arg Szintaxis // /* */ \n \t Névadások

Részletesebben

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

Webshop készítése ASP.NET 3.5 ben I. Webshop készítése ASP.NET 3.5 ben I. - Portál kialakíása - Mesteroldal létrehozása - Témák létrehozása Site létrehozása 1. File / New Web site 2. A Template k közül válasszuk az ASP.NEt et, nyelvnek (Language)

Részletesebben

Abstract osztályok és interface-ek. 7-dik gyakorlat

Abstract osztályok és interface-ek. 7-dik gyakorlat Abstract osztályok és interface-ek 7-dik gyakorlat Abstract metódusok és osztályok Az OO fejlesztés során olyan osztályokat is kialakíthatunk, melyeket csak továbbfejlesztésre, származtatásra lehet használni,

Részletesebben

JavaServer Pages programozóknak

JavaServer Pages programozóknak JavaServer Pages programozóknak Írta: Mika Péter 2000. szeptember. Minden jog fenntartva. Tartalomjegyzék 1. BEVEZETÉS... 1 2. A JSP ÉS ELŐNYEI... 2 3. A JSP ELEMEI... 5 3.1 DIREKTÍVÁK... 5 3.1.1 A page

Részletesebben

JSP (Java Server Pages) technológia

JSP (Java Server Pages) technológia JSP (Java Server Pages) technológia JSP technológia A JSP technológiával könnyen készíthető olyan web-tartalom, melynek statikus és dinamikus része van. A JSP rendelkezésre bocsátja a szervletek dinamikus

Részletesebben

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

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat Kivételkezelés, beágyazott osztályok Nyolcadik gyakorlat Kivételkezelés Nem minden hibát lehet fordítási időben megtalálni Korábban (pl. C-ben) a hibakezelést úgy oldották meg, hogy a függvény hibakódot

Részletesebben

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

A JSP életciklusa Szkript elemek Dinamikus tartalom létrehozása Kifejezés nyelv Tartalom újrafelhasználása Vezérlés átadása Visszatekintés JSP technológia 1 / 39 Áttekintés Bevezetés JSP életciklusa Szkript elemek, implicit objektumok, bean-ek, EL include, (forward) Visszatekintés MVC 2 / 39 Áttekintés Bevezetés JSP életciklusa Szkript elemek,

Részletesebben

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

JSP technológia. A JSP elemek kétféle szintaxissal használhatók: A JSP Áttekintés JSP technológia Bevezetés JSP életciklusa Szkript elemek, implicit objektumok, bean-ek, EL include, (forward) Visszatekintés MVC 1 / 35 2 / 35 JSP technológia A JSP technológiával könnyen készíthető

Részletesebben

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

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans Enterprise JavaBeans Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Az Enterprise JavaBeans Az Enterprise Javabeans Az Enterprise JavaBeans (EJB) server oldali komponens, amely Az üzleti

Részletesebben

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar Programozás I. 3. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Antal Gábor 1 Primitív típusok Típus neve Érték Alap érték Foglalt tár Intervallum byte Előjeles egész 0 8 bit

Részletesebben

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

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT alapjai, bevezetés Vincze Dávid Miskolci Egyetem, IIT vincze.david@iit.uni-miskolc.hu PHP Personal Home Page (Tools) Script nyelv -> interpretált Elsősorban weboldal (dinamikus) tartalmak előállítására

Részletesebben

Programozási nyelvek II.: JAVA

Programozási nyelvek II.: JAVA Programozási nyelvek II.: JAVA 5. gyakorlat 2017. október 9-13. 5. gyakorlat Programozási nyelvek II.: JAVA 1 / 34 Az 5. gyakorlat tematikája Kivételkezelés alapjai Be és kimenet BufferedReader, Scanner

Részletesebben

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Enterprise JavaBeans 1.4 platform (EJB 2.0) Enterprise JavaBeans 1.4 platform (EJB 2.0) Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2007. 11.13. Az Enterprise JavaBeans Az Enterprise Javabeans Az Enterprise JavaBeans

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java statikus programszerkezet Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 2. előadás csomag könyvtárak könyvtárak forrásfájlok bájtkódok (.java) (.class) primitív osztály

Részletesebben

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni: Excel objektumok Az excelben az osztályokat úgynevezett class modulokként hozzuk létre. Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni: View-ba

Részletesebben

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

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN vizsgatételek 1. Az objektumorientált programozás szemlélete, az objektum fogalma 2. Az objektumorientált programozás alapelvei 3. A Java nyelv története, alapvető

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak

Részletesebben

Szkriptnyelvek. 1. UNIX shell

Szkriptnyelvek. 1. UNIX shell Szkriptnyelvek 1. UNIX shell Szkriptek futtatása Parancsértelmez ő shell script neve paraméterek shell script neve paraméterek Ebben az esetben a szkript tartalmazza a parancsértelmezőt: #!/bin/bash Szkriptek

Részletesebben

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

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title; PHP5 objektumok 1 Osztályok class, new book.php: construct () destruct() $b=new Book(); törlés: $b=null; vagy unset ($b); -elnevezési konvenciók private $isbn; public $title; function

Részletesebben

Szoftvertechnológia alapjai Java előadások

Szoftvertechnológia alapjai Java előadások Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz e-mail: fandrew@mit.bme.hu tárgy honlap: http://home.mit.bme.hu/~fandrew/szofttech_hu.html A mai előadás tartalma: Miért pont Java?

Részletesebben

Webfejlesztés alapjai

Webfejlesztés alapjai Webfejlesztés alapjai Óbudai Egyetem, Java Programozás Mérnök-informatikai kar Labor 7 Bedők Dávid 2017.10.30. v1.0 Webfejlesztés A mai világban szinte minden "programozás iránt érdeklődő" 14 éves "webprogramozó".

Részletesebben

Programozás I. Első ZH segédlet

Programozás I. Első ZH segédlet Programozás I. Első ZH segédlet Ezen az oldalon: kiírás az alapértelmezett (hiba) kimenetre, sztring konkatenáció, primitív típusok, osztály létrehozás, példányosítás, adattagok, metódusok Kiíratás alapértelmezett

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 8. előadás Öröklődés - megnyitunk egy osztályt egy másik előtt zárt egységeket szeretünk készíteni (láthatósági kérdés:

Részletesebben

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*; Java osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. ( Előfeltétel 12. Tétel ) Az osztály egy olyan típus leíró struktúra, amely

Részletesebben

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN OOP: Java 11.Gy: Enumok, beágyazott osztályok 13/1 B ITv: MAN 2019.04.24 ArrayList Rugalmas tömb A tömbök korlátai Fix méret, nem lehet menet közben megnövelni Ha túl nagyra választjuk, fölösleges helyfoglalás

Részletesebben

Segédanyag: Java alkalmazások gyakorlat

Segédanyag: Java alkalmazások gyakorlat Segédanyag: Java alkalmazások gyakorlat Készítette: Szabó Attila 2010/2011-2 félév, 11. gyakorlat (az előző 2 gyak közül az egyiken ZH volt, a másik szünet miatt elmaradt) 1 JAR fájl készítés A JAR (Java

Részletesebben

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész Java Programozás 6. Gy: Java alapok Adatkezelő 2.rész 25/1 B ITv: MAN 2018.04.13 A feladat Feladat: folytassuk a panel életre keltését! - Alakítsuk ki a Lista panelt - Betöltéskor olvassuk be az adatokat

Részletesebben

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1 Java VI. Öröklődés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI.: Öröklődés JAVA6 / 1 Egy kis kitérő: az UML UML: Unified Modelling Language Grafikus eszköz objektum

Részletesebben

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

Java Programozás 1. Gy: Java alapok. Ismétlés ++ Java Programozás 1. Gy: Java alapok Ismétlés ++ 24/1 B ITv: MAN 2018.02.18 Feladat Készítsünk egy komplett konzolos alkalmazást, mely generál egy számot 0 és 100 között (mindkét határt beleértve), feladatunk

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java 2. gyakorlat Függvények Általános prototípus Módosítószavak Láthatóság: public, protected, private. Ha nem definiált, akkor úgynevezett package-private láthatóság. Lehet abstract

Részletesebben

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07.

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI. Öröklődés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI.: Öröklődés JAVA6 / 1 Egy kis kitérő: az UML UML: Unified Modelling Language Grafikus eszköz objektum

Részletesebben

Kifejezések. Kozsik Tamás. December 11, 2016

Kifejezések. Kozsik Tamás. December 11, 2016 Kifejezések Kozsik Tamás December 11, 2016 Kifejezések Lexika Szintaktika Szemantika Lexika azonosítók (változó-, metódus-, típus- és csomagnevek) literálok operátorok, pl. + zárójelek: (), [], {},

Részletesebben

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

Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez Székely István Debreceni Egyetem, Informatikai Intézet A rendszer felépítése szerver a komponenseket szolgáltatja Java nyelvű implementáció

Részletesebben

Java gyakorlat feladatai e s megolda sai (2014.04.10)

Java gyakorlat feladatai e s megolda sai (2014.04.10) Java gyakorlat feladatai e s megolda sai (2014.04.10) 1. Feladat Számítsuk ki a Fibonacci sorozat első 20 tagját! / Fibonacci számsorozat tagjait kiszámoló, egyetlen osztályból álló program @author Bence

Részletesebben

Programozás II. 2. Dr. Iványi Péter

Programozás II. 2. Dr. Iványi Péter Programozás II. 2. Dr. Iványi Péter 1 C++ Bjarne Stroustrup, Bell Laboratórium Első implementáció, 1983 Kezdetben csak precompiler volt C++ konstrukciót C-re fordította A kiterjesztés alapján ismerte fel:.cpp.cc.c

Részletesebben

Globális operátor overloading

Globális operátor overloading Programozás II. 9. gyakorlat Operátor overloading 2: Unáris operátorok, globálisan megvalósított operátorok, > operátorok Kivételkezelés, IO library Globális operátor overloading Előző alkalommal

Részletesebben

Programozás C++ -ban 2007/7

Programozás C++ -ban 2007/7 Programozás C++ -ban 2007/7 1. Másoló konstruktor Az egyik legnehezebben érthető fogalom C++ -ban a másoló konstruktor, vagy angolul "copy-constructor". Ez a konstruktor fontos szerepet játszik az argumentum

Részletesebben

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés Tartalom D Szoftvertechnológia elıadás Architektúra D vs CORBA Példá 2 1987 Dynamic Data Exchange (DDE) Windows 2.0-ban Windows alkalmazások közötti adatcsere Ma is használatos (pl. vágólap) NetDDE NetBIOS

Részletesebben

JAVA PROGRAMOZÁS 3.ELŐADÁS

JAVA PROGRAMOZÁS 3.ELŐADÁS Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 3.ELŐADÁS 2014-2015 tavasz Polimorfizmus, absztrakt osztályok, interfészek 2 Példa - Hengerprogram 3 Példa - Hengerprogram 4 Példa - Hengerprogram

Részletesebben

Java programozási nyelv

Java programozási nyelv Szoftvertechnológia sáv Java programozási nyelv Dirk Louis-Peter Müller: Java (Belépés az internet világába) Panem kiadó, Budapest, 2002. Webvilág sorozat Készítette: Gregorics Tibor Vázlatos áttekintés

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java 9. gyakorlat Fájlkezelés A fájlkezelés Java-ban különböző osztályok összekapcsolásával történik. Minden egyes osztály valamilyen minimális szolgáltatást tesz hozzá a többihez.

Részletesebben

HTML és CSS. Horváth Árpád május 6. Óbudai Egyetem Alba Regia M szaki Kar (AMK) Székesfehérvár

HTML és CSS. Horváth Árpád május 6. Óbudai Egyetem Alba Regia M szaki Kar (AMK) Székesfehérvár Óbudai Egyetem Alba Regia M szaki Kar (AMK) Székesfehérvár 2015. május 6. Vázlat 1 2 A világháló Története statikus és dinamikus oldal URL DNS-feloldás IP-cím ügyfél (kliens, böngész ) és szerver (kiszolgáló)

Részletesebben

1. Alapok. Programozás II

1. Alapok. Programozás II 1. Alapok Programozás II Elérhetőség Név: Smidla József Elérhetőség: smidla dcs.uni-pannon.hu Szoba: I916 2 Irodalom Bjarne Stroustrup: A C++ programozási nyelv 3 Irodalom Erich Gamma, Richard Helm, Ralph

Részletesebben

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás Számítástechnika II. BMEKOKAA153 5. Előadás Dr. Bécsi Tamás Kivételkezelés try Azon utasítások kerülnek ide, melyek hibát okozhatnak, kivételkezelést igényelnek catch( típus [név]) Adott kivételtípus esetén

Részletesebben

Szoftvertechnolo gia gyakorlat

Szoftvertechnolo gia gyakorlat Szoftvertechnolo gia gyakorlat Dr. Johanyák Zsolt Csaba http://johanyak.hu 1. Dependency Injection (függőség befecskendezés) tervezési minta A tervezési minta alapgondolata az, hogy egy konkrét feladatot

Részletesebben

1. Egyszerű (primitív) típusok. 2. Referencia típusok

1. Egyszerű (primitív) típusok. 2. Referencia típusok II. A Java nyelv eszközei 1. Milyen eszközöket nyújt a Java a programozóknak Korábban már említettük, hogy a Java a C nyelvből alakult ki, ezért a C, C++ nyelvben járatos programozóknak nem fog nehézséget

Részletesebben

Kivételkezelés, naplózás. Exception handling, logging

Kivételkezelés, naplózás. Exception handling, logging Kivételkezelés, naplózás Exception handling, logging Try-catch try { // Kódrészlet, amely kivételt eredményezhet catch (Exception1 object1 ) { // Az Exception1 kivétel kezelésének megfelelő kód catch (Exception2

Részletesebben

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

AWK programozás, minták, vezérlési szerkezetek 10 AWK programozás, minták, vezérlési szerkezetek AWK adatvezérelt szkriptnyelv text processing, adat kiterjesztés, tagolt adatok automatizált soronkénti feldolgozása a forrásállományt soronként beolvassa

Részletesebben

C#, OOP. Osztályok tervezése C#-ban

C#, OOP. Osztályok tervezése C#-ban C#, OOP Osztályok tervezése C#-ban OOP Létrehozás (creating) Megszüntetés (destroying) Túlterhelés (overlading) Felsorolás típus (enumerated types) 2 Hajó osztály Sailboat class using System; class Sailboat

Részletesebben

Java és web programozás

Java és web programozás Budapesti M szaki Egyetem 2013. szeptember 25. 3. El adás User public class User { private String realname_; private String nickname_; private String password_; public User(String realname, String nickname)

Részletesebben

OOP: Java 8.Gy: Gyakorlás

OOP: Java 8.Gy: Gyakorlás OOP: Java 8.Gy: Gyakorlás 43/1 B ITv: MAN 2019.04.10 43/2 Egy régebbi beszámoló anyaga 1. Feladat: Készítsen egy Szemely nevű osztályt a szokásos konvenciók betartásával, amely tárolja egy ember nevét

Részletesebben

Készítette: Nagy Tibor István

Készítette: Nagy Tibor István Készítette: Nagy Tibor István A változó Egy memóriában elhelyezkedő rekesz Egy értéket tárol Van azonosítója (vagyis neve) Van típusa (milyen értéket tárolhat) Az értéke értékadással módosítható Az értéke

Részletesebben

A C# programozási nyelv alapjai

A C# programozási nyelv alapjai A C# programozási nyelv alapjai Tisztán objektum-orientált Kis- és nagybetűket megkülönbözteti Ötvözi a C++, Delphi, Java programozási nyelvek pozitívumait.net futtatókörnyezet Visual Studio fejlesztőkörnyezet

Részletesebben

Segédanyag: Java alkalmazások gyakorlat

Segédanyag: Java alkalmazások gyakorlat Segédanyag: Java alkalmazások gyakorlat Készítette: Szabó Attila 2009/2010-2 félév, 12. gyakorlat 1 Távoli metódushívás Java-ban (RMI) Java-ban a távoli metódushívás ( Remote Method Invocation, RMI) egy

Részletesebben

Java és web programozás

Java és web programozás Budapesti Műszaki Egyetem 2015. 04. 08. 10. Előadás Ami kimearad múlthéten Ha már megvan a KeyListener vagy MouseListener osztályunk a következõ módon tudjuk hozzárendelni egy JFrame vagy JPanel-hez: Ami

Részletesebben

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens Hozzunk létre egy ASP.NET Empty Web Site projektet! A projekt neve legyen WCFAPP1. Ez

Részletesebben

Programozási nyelvek és módszerek Java Thread-ek

Programozási nyelvek és módszerek Java Thread-ek Programozási nyelvek és módszerek Java Thread-ek Laki Sándor lakis@inf.elte.hu 2006. május 3. 0-0 Szálak (Threads) Ahhoz, hogy egy mai rendszer m ködhessen több 10-100 folyamatnak kell futnia. A folyamatok

Részletesebben

3. Osztályok II. Programozás II

3. Osztályok II. Programozás II 3. Osztályok II. Programozás II Bevezető feladat Írj egy Nevsor osztályt, amely legfeljebb adott mennyiségű nevet képes eltárolni. A maximálisan tárolható nevek számát a konstruktorban adjuk meg. Az osztályt

Részletesebben

Alprogramok, paraméterátadás

Alprogramok, paraméterátadás ELTE Informatikai Kar, Programozási Nyelvek és Fordítóprogramok Tanszék October 24, 2016 Programozási nyelvek Alprogramok Függvények, eljárások Metódusok Korutinok stb. Alprogramok Alprogram: olyan nyelvi

Részletesebben

XML adatkezelés I. Az SAX szabvány. Dr. Kovács László Miskolci Egyetem Általános Informatikai Tanszék. XML adatok kezelési lehetőségei

XML adatkezelés I. Az SAX szabvány. Dr. Kovács László Miskolci Egyetem Általános Informatikai Tanszék. XML adatok kezelési lehetőségei XML adatkezelés I. Az szabvány Dr. Kovács László Miskolci Egyetem Általános Informatikai Tanszék XML adatok kezelési lehetőségei szövegszerkesztő API XML DOM API XSL XQUERY Az XML dokumentumok feldolgozó

Részletesebben

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) közönséges felhasználók SQL*Plus Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP dolgozó), DEPT osztály) "közönséges" felhasználók Adatszótár: metaadatokat tartalmazó, csak olvasható táblák táblanév-prefixek:

Részletesebben