Fejlett Programoz ási Technikák 2.

67
1 Fejlett Programozási Technikák 2. 15/9

description

Fejlett Programoz ási Technikák 2. 15 / 9. Az előző mai előadás tartalma:. Számítógépes biztonság Jáva és a biztonság Biztonsági architektúra Titkosító architektúra JCE JAAS JSSE GSSE. Források. http://java.sun.com/products/servlet/docs.html - PowerPoint PPT Presentation

Transcript of Fejlett Programoz ási Technikák 2.

Page 1: Fejlett Programoz ási Technikák 2.

1

Fejlett Programozási Technikák 2.

15/9

Page 2: Fejlett Programoz ási Technikák 2.

2

Fejlett Programozási Technológiák 2.

Az előző mai előadás tartalma: Számítógépes biztonság Jáva és a biztonság

Biztonsági architektúra Titkosító architektúra

JCE JAAS JSSE GSSE

Page 3: Fejlett Programoz ási Technikák 2.

3

Fejlett Programozási Technológiák 2.

Források http://java.sun.com/products/servlet/docs.html http://java.sun.com/developer/onlineTraining/Servlets/Fundamentals/contents.html http://www.onjava.com/pub/a/onjava/2002/07/31/tomcat.html

Page 4: Fejlett Programoz ási Technikák 2.

4

Fejlett Programozási Technológiák 2.

A mai előadás tartalma Java Servlet

Servlet InterfészServlet ContextRequestResponseFilterSessionWeb Application

Page 5: Fejlett Programoz ási Technikák 2.

5

Fejlett Programozási Technológiák 2.

Webes szolgáltatások Java Servlet Környezet

Tomcat 4.0 server.xml web.xml

Page 6: Fejlett Programoz ási Technikák 2.

6

Fejlett Programozási Technológiák 2.

Webes szolgáltatások Java WSDP fejlesztői csomag

JSPJava ServletJava XML packTomcatAnt

Tomcat + J2SDK

Page 7: Fejlett Programoz ási Technikák 2.

7

Fejlett Programozási Technológiák 2.

Java Servlet Java technológiára épülő web komponens

platform független, bytecode dinamikusan betölthető dinamikus tartalom előá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) lekezelhetőek tartalmazza és menedzseli a servlet-eket egész

életfolyamatuk alatt

Page 8: Fejlett Programoz ási Technikák 2.

8

Fejlett Programozási Technológiák 2.

Példa1. A kliens kapcsolatba lép a web szerverrel és elküld egy HTTP kérést2. 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

3. A servlet tároló a kérés paraméterei alapján meghívja a megfelelő servlet-et (URL)

4. A servlet a kérés paraméterei alapján megállapítja mit szeretne a kliens ennek megfelelően végrehajtja a megfelelő műveleteket. Válaszol a kliensnek a válasz objektum segítségével

5. Miután a servlet tároló megállapította, hogy a servlet befejezte a feladatot átadja a vezérlést a web szervernek

Page 9: Fejlett Programoz ási Technikák 2.

9

Fejlett Programozási Technológiák 2.

A servlet-ek előnyei hatékony

hagyományos CGI: n hívás n process kényelmes

hatékony eszköztár a HTML űrlap 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 szűrni a speciális karaktereket …)

buffer túlcsordulás nem léphet fel JVM (hibakezelés, …)

olcsó Tomcat - ingyenes

Page 10: Fejlett Programoz ási Technikák 2.

10

Fejlett Programozási Technológiák 2.

A servlet interfész a servlet interfész megvalósítása vagy öröklése teszi a servlet-et

servlet-té (javax.servlet.Servlet) GenericServlet absztrakt osztály

service HttpServlet absztrakt osztály

HttpServletRequest HttpServletResponse

kérés kezelő metódusok: service

minden kérésnél meghívódik HTTP specifikus kérés kezelő metódusok:

doGet doPost doPut doDelete doHead doOptions doTrace getLastModified

leggyakrabban használtak

Page 11: Fejlett Programoz ási Technikák 2.

11

Fejlett Programozási Technológiák 2.

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 =

"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n";out.println(docType +"<HTML>\n<HEAD><TITLE>Hello</TITLE></HEAD>\n" +"<BODY>\n<H1>Hello WWW</H1>\n</BODY></HTML>");}}

Page 12: Fejlett Programoz ási Technikák 2.

12

Fejlett Programozási Technológiák 2.

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

Page 13: Fejlett Programoz ási Technikák 2.

13

Fejlett Programozási Technológiák 2.

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 első sorban kötelező 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 megfelelő doXXX metódust (Request, Response) nem célszerű ezt felülírni (használjuk a megfelelő 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, …

Page 14: Fejlett Programoz ási Technikák 2.

14

Fejlett Programozási Technológiák 2.

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) {}}

1. rész

Page 15: Fejlett Programoz ási Technikák 2.

15

Fejlett Programozási Technológiák 2. 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) +

"<BODY BGCOLOR=\"#FDF5E6\">\n" +"<H1 ALIGN=CENTER>" + title + "</H1>");

for(int i=0; i<repeats; i++) {out.println(message + "<BR>");

}out.println("</BODY></HTML>");}

}

2. rész

Page 16: Fejlett Programoz ási Technikák 2.

16

Fejlett Programozási Technológiák 2.

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 megfelelő erőforrá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

működését !

Page 17: Fejlett Programoz ási Technikák 2.

17

Fejlett Programozási Technológiák 2.

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

Page 18: Fejlett Programoz ási Technikák 2.

18

Fejlett Programozási Technológiák 2.

Hasznos metódusok

inicializáló paraméterek: getInitParameter getInitParameterNames

környezeti paraméterek (JavaBean-ek használata): setAttribute getAttribute getAttributeNames removeAttribute

erőforrások (HTML, GIF,JPEG) (nem alkalmasak dinamikus tartalom kezelésére pl.: index.jsp): getResource getResourceAsStream

ideiglenes könyvtár: File tempdir=(File)getServletContext().getAttribute("javax.servlet.context.tempdir");

Page 19: Fejlett Programoz ási Technikák 2.

19

Fejlett Programozási Technológiák 2.

Kérés objektum HttpServletRequest

Minden információ a HTTP kérésbőlPOST paraméterek

getParameter getParameterNames getParameterValues getParameterMap

HTTP fejléc

Page 20: Fejlett Programoz ási Technikák 2.

20

Fejlett Programozási Technológiák 2.

A HTML űrlap által küldött adatok kezelése GET metódus esetén az URL-ben kódolva jelennek meg az adatok:

http://host/path?user=Marty+Hall&origin=bwi&dest=lax POST metódus esetén a fejlécben vagy a törzsben helyezkednek el getParameter metódussal a POST kezelhető ! 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 betűre getParameterNames - a használható paraméterek listáját adja vissza

(Enumeration)

Page 21: Fejlett Programoz ási Technikák 2.

21

Fejlett Programozási Technológiák 2.

Perl script példaread(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer);

foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FORM{$name} = $value; }

Page 22: Fejlett Programoz ási Technikák 2.

22

Fejlett Programozási Technológiák 2.

Példa: (HTML)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE>Collecting Three Parameters</TITLE></HEAD><BODY BGCOLOR="#FDF5E6"><H1 ALIGN="CENTER">Collecting Three Parameters</H1><FORM ACTION="servlet/ThreeParams” METHOD=”POST”>

First Parameter: <INPUT TYPE="TEXT" NAME="param1"><BR>Second Parameter: <INPUT TYPE="TEXT" NAME="param2"><BR>Third Parameter: <INPUT TYPE="TEXT" NAME="param3"><BR>

<CENTER><INPUT TYPE="SUBMIT"></CENTER></FORM></BODY></HTML>

Page 23: Fejlett Programoz ási Technikák 2.

23

Fejlett Programozási Technológiák 2.

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) +"<BODY BGCOLOR=\"#FDF5E6\">\

n<H1 ALIGN=CENTER>" + title + "</H1>\n<UL>\n <LI><B>param1</B>: "+ request.getParameter("param1") + "\n" +

" <LI><B>param2</B>: "+ request.getParameter("param2") + "\n" +" <LI><B>param3</B>: "+ request.getParameter("param3") + "\n" +"</UL>\n" +"</BODY></HTML>");}public void doPost(HttpServletRequest request,HttpServletResponse response) throws

ServletException, IOException { doGet(request, response); }}

Page 24: Fejlett Programoz ási Technikák 2.

24

Fejlett Programozási Technológiák 2.

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

Page 25: Fejlett Programoz ási Technikák 2.

25

Fejlett Programozási Technológiák 2.

Minden fejléc kiíratásaimport 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.nextElement();out.println("<TR><TD>" + headerName);out.println(" <TD>" + request.getHeader(headerName));}out.println("</TABLE>\n</BODY></HTML>");}public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

Minden paraméter kiíratása

Page 26: Fejlett Programoz ási Technikák 2.

26

Fejlett Programozási Technológiák 2.

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

Page 27: Fejlett Programoz ási Technikák 2.

27

Fejlett Programozási Technológiák 2.

Státusz kezelése

response.setStatus(int), public void sendError(int code, String

message) public void sendRedirect(String url)

response.sendRedirect(response.encodeURL(url))

Page 28: Fejlett Programoz ási Technikák 2.

28

Fejlett Programozási Technológiák 2.

Képek létrehozása1. Kép létrehozása:

Frame f = new Frame();f.addNotify(); // nem kell az ablakot megnyitni csak egy ilyen objektumot

hozunk létreImage img = f.createImage(width, height);,

2. Rajzoljunk a képbe:Graphics g = img.getGraphics();g.fillRect(...);g.drawString(...);

3. A Content-Type válasz fejléc beállításaresponse.setContentType("image/gif");

4. Egy válasz stream-et nyitunkOutputStream out = response.getOutputStream();

5. 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) {}

Page 29: Fejlett Programoz ási Technikák 2.

29

Fejlett Programozási Technológiák 2.

Példa alkalmazás

Page 30: Fejlett Programoz ási Technikák 2.

30

Fejlett Programozási Technológiák 2.

Eredmény

Page 31: Fejlett Programoz ási Technikák 2.

31

Fejlett Programozási Technológiák 2.

Tömörített oldal…import java.util.zip.*;public class EncodedPage extends HttpServlet {public void doGet(HttpServletRequest request,HttpServletResponse response) throws

ServletException, IOException {response.setContentType("text/html");String encodings = request.getHeader("Accept-Encoding");String encodeFlag = request.getParameter("encoding");PrintWriter out; String title;if ((encodings != null) &&(encodings.indexOf("gzip") != -1) &&!"none".equals(encodeFlag)) { title = "Page Encoded with GZip"; OutputStream out1 =

response.getOutputStream();out = new PrintWriter(new GZIPOutputStream(out1), false);response.setHeader("Content-Encoding", "gzip");} else { title = "Unencoded Page"; out = response.getWriter(); }out.println("<head></head><BODY BGCOLOR=\"#FDF5E6\">\n" +"<H1 ALIGN=CENTER>" + title + "</H1>\n");String line = "Blah, blah, blah, blah, blah. " +"Yadda, yadda, yadda, yadda.";for(int i=0; i<10000; i++) {out.println(line); }out.println("</BODY></HTML>");out.close();}}

Weboldalak tömörítése

Page 32: Fejlett Programoz ási Technikák 2.

32

Fejlett Programozási Technológiák 2.

Viszony követés a HTTP állapotmentes fontos az állapotkövetés:

bevásárló kosár … négy megoldás:

sütikURL átírásHTTPS viszony követésrejtett HTML mezők

Page 33: Fejlett Programoz ási Technikák 2.

33

Fejlett Programozási Technológiák 2.

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ülhető 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)

Page 34: Fejlett Programoz ási Technikák 2.

34

Fejlett Programozási Technológiák 2.

Problémák 4 kbyte, 20 cookie/site, 300 süti összesen az emberek nem szeretik, ha a kereső 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

Page 35: Fejlett Programoz ási Technikák 2.

35

Fejlett Programozási Technológiák 2.

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

Page 36: Fejlett Programoz ási Technikák 2.

36

Fejlett Programozási Technológiák 2.

Sütik létrehozása sem a neve sem az értéke nem tartalmazhatja a következő karaktereket:

[ ] ( ) = , " / ? @ : ; a következő 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észő többek között ez alapján állapítja meg kinek mit adhat vissza) setMaxAge() – a süti érvényességének időtartamá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 vihető át setValue() – az értékét adhatjuk meg

Page 37: Fejlett Programoz ási Technikák 2.

37

Fejlett Programozási Technológiák 2. 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 i=0; i<3; 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(”<head></head><BODY BGCOLOR=\"#FDF5E6\">\n" +"<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" +"</BODY></HTML>");}}

Sütik létrehozása

Page 38: Fejlett Programoz ási Technikák 2.

38

Fejlett Programozási Technológiák 2. 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 i=0; i<cookies.length; i++) {cookie = cookies[i];out.println("<TR>\n" +" <TD>" + cookie.getName() + "\n" +" <TD>" + cookie.getValue());}out.println("</TABLE></BODY></HTML>");}}

Sütik kiolvasása

Page 39: Fejlett Programoz ási Technikák 2.

39

Fejlett Programozási Technológiák 2.

URL átírás http://host/path/file.html;jsessionid=1234, nem tiltható le

Page 40: Fejlett Programoz ási Technikák 2.

40

Fejlett Programozási Technológiák 2.

HTML rejtett mező

<INPUT TYPE="HIDDEN" NAME="session" VALUE="...">

csak akkor működik ha minden oldal dinamikusan generált

Page 41: Fejlett Programoz ási Technikák 2.

41

Fejlett Programozási Technológiák 2.

Egy teljesebb megoldás HttpSession API magas szintű 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

Page 42: Fejlett Programoz ási Technikák 2.

42

Fejlett Programozási Technológiák 2.

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

Page 43: Fejlett Programoz ási Technikák 2.

43

Fejlett Programozási Technológiák 2.

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);

Page 44: Fejlett Programoz ási Technikák 2.

44

Fejlett Programozási Technológiák 2.

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()

Page 45: Fejlett Programoz ási Technikák 2.

45

Fejlett Programozási Technológiák 2.

A kérés továbbadása RequestDispatcher interfész a ServletContext objektumból tudjuk előállítani:

getRequestDispatcher – a servlet elérési útvonalát adhatjuk meg (a futási környezeten belül /-el kezdődik)

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 mezőit, forward – csak akkor használhatjuk, ha még nem válaszoltunk a

kliensnek (nincs adat a bufferben, ezt előbb törölni kell) az esetleges paraméterek elsőbbséget élveznek

Page 46: Fejlett Programoz ási Technikák 2.

46

Fejlett Programozási Technológiák 2.

Példa

String path = “/raisons.jsp?orderno=5”;RequestDispatcher rd = context.getRequestDispatcher(path);rd.include(request, response);

Page 47: Fejlett Programoz ási Technikák 2.

47

Fejlett Programozási Technológiák 2.

Tomcat könyvtár hierarchia bin -> itt helyezkednek el az indító, leállító

szkriptek fájlok log -> log fájlok lib -> jar fájlok conf -> server.xml

itt tudunk új környezetet létrehozni webapps -> webes alkalmazások könyvtára

Page 48: Fejlett Programoz ási Technikák 2.

48

Fejlett Programozási Technológiák 2.

server.xml server elem – egy lehet belőle

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.

Page 49: Fejlett Programoz ási Technikák 2.

49

Fejlett Programozási Technológiák 2.

Példa<Server port="8005" shutdown="SHUTDOWN" debug="0"> <Service name="Tomcat-Standalone"> <Connector className="org.apache.catalina.connector.http.HttpConnector" port="8080" minProcessors="5" maxProcessors="75" enableLookups="true" redirectPort="8443" acceptCount="10" debug="0" connectionTimeout="60000"/> <Engine name="Standalone" defaultHost="localhost" debug="0"> <Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt" timestamp="true"/> <Realm className="org.apache.catalina.realm.MemoryRealm" /> <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="common"/> <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="localhost_log." suffix=".txt"

timestamp="true"/> <Context path="/teszt" docBase="teszt" debug="0" privileged="true"> <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_examples_log." suffix=".txt" timestamp="true"/> </Context> </Host> </Engine> </Service></Server>

Page 50: Fejlett Programoz ási Technikák 2.

50

Fejlett Programozási Technológiák 2.

Alkalmazás környezet

html, jsp, … WEB-INF

classes – itt helyezkednek el a class fájlaink (jó esetben csomagokban)com.mycompany.mypackage.MyServlet /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

Page 51: Fejlett Programoz ási Technikák 2.

51

Fejlett Programozási Technológiák 2.

web.xml URL-ek testreszabása URL-ek kikapcsolása Servler-ek inicializálása Servler-ek betöltése előre Szűrők definiálása Hiba, és köszöntő oldalak definiálása

Page 52: Fejlett Programoz ási Technikák 2.

52

Fejlett Programozási Technológiák 2.

URL-ek testreszabása a leggyakrabban használt szolgáltatása servlet elem

servlet-nameservlet-class, jsp-file (/ !!!!)

servlet-mapping elemservlet-nameurl-pattern (/valami, /*.asp)

Page 53: Fejlett Programoz ási Technikák 2.

53

Fejlett Programozási Technológiák 2.

Példa

<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd"><web-app><!-- ... -->

<servlet><servlet-name>Test</servlet-name><servlet-class>moreservlets.TestServlet</servlet-class>

</servlet><servlet-mapping>

<servlet-name>Test</servlet-name><url-pattern>/UrlTest</url-pattern>

</servlet-mapping><!-- ... --></web-app>

Page 54: Fejlett Programoz ási Technikák 2.

54

Fejlett Programozási Technológiák 2.

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 <!--<servlet-mapping><servlet-name>invoker</servlet-name><url-pattern>/servlet/*</url-pattern></servlet-mapping>-->

Page 55: Fejlett Programoz ási Technikák 2.

55

Fejlett Programozási Technológiák 2.

Példa

<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd"><web-app><servlet>

<servlet-name>Sorry</servlet-name><servlet-class>moreservlets.SorryServlet</servlet-class>

</servlet><!-- ... --><servlet-mapping>

<servlet-name>Sorry</servlet-name><url-pattern>/servlet/*</url-pattern>

</servlet-mapping><!-- ... --></web-app>

Page 56: Fejlett Programoz ási Technikák 2.

56

Fejlett Programozási Technológiák 2.

Servlet-ek inicializálása init-param elem

param-name ,param-valuepublic void init() {ServletConfig config = getServletConfig();firstName = config.getInitParameter("firstName");emailAddress = config.getInitParameter("emailAddress");}

alkalmazás szintű kezdeti paraméterekcontext-param elem

param-name, paramvalue

Page 57: Fejlett Programoz ási Technikák 2.

57

Fejlett Programozási Technológiák 2.

Példa

<context-param><param-name>support-email</param-name><param-value>[email protected]</param-value>

</context-param><servlet>

<servlet-name>InitTest</servlet-name><servlet-class>myPackage.InitServlet</servlet-class><init-param>

<param-name>param1</param-name><param-value>Value 1</param-value>

</init-param><init-param>

<param-name>param2</param-name><param-value>2</param-value>

</init-param></servlet>

Page 58: Fejlett Programoz ási Technikák 2.

58

Fejlett Programozási Technológiák 2.

Servlet-ek betöltése servlet elem

load-on-startup<servlet>

<servlet-name>Search</servlet-name><servlet-class>myPackage.SearchServlet</servlet-class><load-on-startup>1</load-on-startup>

</servlet><servlet>

<servlet-name>Results</servlet-name><jsp-file>/results/index.jsp</jsp-file><load-on-startup>2</load-on-startup>

</servlet>

Page 59: Fejlett Programoz ási Technikák 2.

59

Fejlett Programozási Technológiák 2.

Szűrők definiálása a szűrők módosíthatják a kérés és válasz objektumot mielőtt egy JSP vagy servlet oldal a kérés

objektumhoz jutna az első szűrő 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 szűrőnek vagy a megfelelő servlet-nek

Page 60: Fejlett Programoz ási Technikák 2.

60

Fejlett Programozási Technológiák 2.

Szűrők 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ó …

Page 61: Fejlett Programoz ási Technikák 2.

61

Fejlett Programozási Technológiák 2.

Szűrő példaimport 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)request;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() {}}

Szűrő

Page 62: Fejlett Programoz ási Technikák 2.

62

Fejlett Programozási Technológiák 2.

Szűrő definiálása a web.xml fájlban a servlet elemek előtt kell lennie filter elem

filter-name, filter-class filter-mapping

filter-nameservlet-name

Page 63: Fejlett Programoz ási Technikák 2.

63

Fejlett Programozási Technológiák 2.

Példa

<filter><filter-name>Reporter</filter-name><filter-class>moreservlets.ReportFilter</filter-class>

</filter><filter-mapping>

<filter-name>Reporter</filter-name><servlet-name>SomeServletName</servlet-name>

</filter-mapping><filter-mapping>

<filter-name>Reporter</filter-name><url-pattern>/*</url-pattern>

</filter-mapping><servlet>

<servlet-name>SomeServletName</servlet-name><jsp-file>/TestPage.jsp</jsp-file>

</servlet>

Page 64: Fejlett Programoz ási Technikák 2.

64

Fejlett Programozási Technológiák 2.

Üdvözlő 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

<welcome-file-list><welcome-file>index.jsp</welcome-file><welcome-file>index.html</welcome-file>

</welcome-file-list>

Page 65: Fejlett Programoz ási Technikák 2.

65

Fejlett Programozási Technológiák 2.

Hiba oldalak error-page elem

error-code, exception-type

<error-page><error-code>404</error-code><location>/NotFound.jsp</location>

</error-page><error-page>

<exception-type>packageName.className</exception-type><location>/SomeURL</location>

</error-page>

Page 66: Fejlett Programoz ási Technikák 2.

66

Fejlett Programozási Technológiák 2.

A mai előadás tartalma Java Servlet

Servlet InterfészServlet ContextRequestResponseFilterSessionWeb Application

Page 67: Fejlett Programoz ási Technikák 2.

67

Fejlett Programozási Technológiák 2.

A következő előadás tartalma Java Server Pages