ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp...

62
1 iTec web client (browser) web server _____.html request URL (get, post) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA EJB Ausgangslage (HTML-Seiten, Applets) ührung Web-basierte Anwendungsarchitektu H T T P

Transcript of ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp...

Page 1: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

1

iTec

web client(browser)

web server

_____.html

request URL (get, post)

response HTML_____.jsp

_____.class

application

DBMS

JDBC

RMISocketsCORBAEJB

Ausgangslage

(HTML-Seiten, Applets)

Einführung Web-basierte Anwendungsarchitekturen

HT

TP

Page 2: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

2

iTec

Einführung Web-basierte Anwendungsarchitekturen

verteilte Präsentation

entfernte Präsentation

verteilte Anwendung

fat client

Page 3: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

3

iTec

Präsentation

Einführung Web-basierte Anwendungsarchitekturen

Browser PresentationLayer

Web-Server

Domain LogicLayer

Application Server

DB Server

DB

Web-Client(z.B. HTTP) (RPC,

CORBA)

(z.B. JDBC)

. . .

Web-basierte Anwendungen haben eineverteilte Präsentationsschicht

die Richtung der Kontrolle geht nur ineine Richtung

Page 4: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

4

iTec

Model

was darstellen?

Controller(Maus, Tastatur,..)

View(Window)

Model-unabhängigeFunktionalität

Änderung!

Änderung!

Applikation

MVC - Model View Controller Architektur: in GUI-Anwendungen

GUI Schicht Domänen Schichtdies ist KEIN Controller für UseCases, sondern ein GUI Event-Handling

dies ist KEIN Controller für UseCases, sondern ein GUI Event-Handling

Ziel: mache dasModell unabhängigvom GUI

Einführung Web-basierte Anwendungsarchitekturen

Page 5: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

5

iTec

ProcessSaleHandler

...

endSale()enterItem(...)makeNewSale()makeCashPayment(...)

GUI-basierte Präsentation mit Controller-Klassen (UseCase Controller)

actionPerformed( actionEvent )

:ProcessSaleHandler

: Cashier

:SaleJFrame

presses button

1: enterItem(itemID, qty)

End sale

actionPerformed( actionEvent )

:ProcessSaleHandler

:SaleJFrame

1: endSale()

EnterPayment

actionPerformed( actionEvent )

:ProcessSaleHandler

:SaleJFrame

1: MakeCashPayment (amount)

...

... ...UseCase Controller

Einführung Web-basierte Anwendungsarchitekturen

Page 6: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

6

iTec

Einführung Web-basierte Anwendungsarchitekturen

actionPerformed( ActionEvent )

:Register

: Cashier

:SaleJFrame

drückt Knopf

1: enterItem(itemID, qty)

1. textValueChanged( TextEvent )

:SaleJFrame

valueChanged(ListSelectionEvent)

:SaleJFrame ...

item-Id 925AE

€ 1.15

1

productSpec Erdnuss Riesenpack

price

quantity

addItem endOfSale

category GetränkeLebensmittelDrogeriewarenHaushaltswaren

Lebensmittel

gibt Text ein

wählt aus Liste

1.1: spec := find(itemId, category)

spec:ProductSpecification

GUI-Schicht

Domänen-Schicht

implementierenEventListeners

diese Art von Interaktionist in HTTP nicht möglich

1.2 productSpec

Page 7: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

7

iTec

web browser

web server

_____.html

request URL (get, post)

response HTML(HTML-Seiten,

Applets)

_____.jsp

_____.classnur ein Servletfür alle Clients

Ausgangslage:eigentlich traurig H

TT

P

Einführung Web-basierte Anwendungsarchitekturen

nur eine Operationnur eine Operation

nur einen Datentyp (String) ohne jedeinnere Struktur (flach!)

nur einen Datentyp (String) ohne jedeinnere Struktur (flach!)

nur formatierterHypertext

nur formatierterHypertext

Objektorientierung ade?

Page 8: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

8

iTec

Einführung Web-basierte Anwendungsarchitekturen

Web-basierte Anwendungen müssen unbedingteine gut strukturierte Server-seitige Architektur erhalten.

Die Praxis sieht leider anders aus.

Daran ist auch die Technologie schuld.

Page 9: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

9

iTec

der Seiten-zentrierte Ansatz

Web-App = Sammlung von JSPs

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

database

request

response

JSP

+ einfach zu Beginn (wenn es nicht weiterwächst)- Code ist eine Mischung aus Präsentation, Domänenlogik,

Datenzugriffstechniken: ein Wartungsalptraum- nicht skalierbar- vieles doppelt und dreifach

Eingabenprüfen

JSP

Ausgabenauswählen

Page 10: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

10

iTec

database

request

response

JSPJSP

+ Auslagerung einiger Teile der Anwendungslogik in Beans- zuviel Steuerlogik in den JSPs

bean

Web-App = Sammlung von JSPs + Beans

der Seiten-mit-Beans Ansatz

Eingabenprüfen

bean

DB-Mapping

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Page 11: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

11

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Beispiel: Lotterie (aus Bergsten2001)

Page 12: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

12

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Page 13: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

13

iTec

. . . . .<body bgcolor="white"> <jsp:useBean id="userInfo" class="com.ora.jsp.beans.userinfo.UserInfoBean" scope="request" />

<%-- Output list of values with invalid format, if any --%> <font color="red"> <jsp:getProperty name="userInfo" property="propertyStatusMsg" /> </font>

<%-- Output form with submitted valid values --%> <form action="userinfovalidate.jsp" method="post"> <table> <tr> <td>Name:</td> <td><input type="text" name="userName" value="<%= StringFormat.toHTMLString(userInfo.getUserName()) %>" > </td> </tr> . . . . .

userinfoinput.jspuserinfoinput.jsp

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Page 14: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

14

iTec

<%@ page language="java" %><jsp:useBean id="userInfo" scope="request" class="com.ora.jsp.beans.userinfo.UserInfoBean" > <jsp:setProperty name="userInfo" property="*" /></jsp:useBean>

<% if (userInfo.isValid()) { %>

<jsp:forward page="userinfovalid.jsp" />

<% } else { %>

<jsp:forward page="userinfoinput.jsp" />

<% } %>

userinfovalidate.jsp:reine Kontrolllogik-JSP(kein HTML)

userinfovalidate.jsp:reine Kontrolllogik-JSP(kein HTML)

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Page 15: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

15

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Page 16: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

16

iTec

<html> <head> <title>User Info Validated</title> </head> <body bgcolor="white"> <font color=green size=+3> Thanks for entering valid information! </font> </body></html>

userinfovalid.jsp:reines HTML – trotzdem gleich als JSP anlegen für zukünftige Erweiterungen

userinfovalid.jsp:reines HTML – trotzdem gleich als JSP anlegen für zukünftige Erweiterungen

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Page 17: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

17

iTec session scope

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Page 18: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

18

iTec

CatalogBean ProductBeans CartBeans

application scope session scope

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Page 19: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

19

iTec

modelview

controller

database

Client Web Server Data

request

State changeeventForward

event

data

response

servletservlet

JSPJSP beanbean

der Servlet-Controller Ansatz

+ MVC Trennung der Belange: JSP als reiner View+ skalierbar- etwas aufwendig bei sehr kleinen Anwendungen

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Page 20: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

20

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Servlets:damit könnteman eigentlichalles machen

Page 21: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

21

iTec

modelview

controllerrequest

State changeeventForward

event

data

response

servletservlet

JSPJSP beanbean

Event dispatcherSecurity gatewayModel preparationError handlingResponse triggeringlogging

Aufgaben des Controller Servlets

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Page 22: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

22

iTec

modelview

controllerrequest

State change event

Forwardevent

data

response

servletservlet

JSPJSP beanbean

business logicdata stateread/writeutilities

Aufgaben des Model Beans

database

validation, security

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Page 23: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

23

iTec

presentation logicread-only

modelview

controllerrequest

State change event

Forwardevent

data

response

servletservlet

JSPJSP beanbeandatabase

validation, security

Aufgaben des View JSPs

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Page 24: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

24

iTec

beanbeanmodel2

page2

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

page1

controller

request

Forwardevents

servletservlet

JSPJSP

<form action= “process?action=a2” method="post">

post(..)

action

(action == “a1”)

doA1(..)

JSPJSP

(action == “a2”)

doA2(..)

(action == “a3”)

doA3(..)

page3JSPJSP

response

auf “process” imweb.xml abgebildet

+doPost(..)-doA1(..)-doA2(..)-doA3(..)

model1beanbean

“url rewriting”

Alternative: “hidden fields”

“url rewriting”

Alternative: “hidden fields”

Page 25: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

25

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

der Servlet Life Cycle

- init(): einmalig aufgerufen bei Instanzierung des Servletsinstanziiert entweder bei erstem Request auf Servlet, oder beim Starten der Servlet Engine

- service(..): (doPost, doGet) bei jedem Request des Servlets

- destroy(..): einmalig vor dem Löschen aus der VM wann das geschieht, entscheidet Servlet Engine

Merke: es gibt zu jedem Servlet nur immer höchstens ein Objekt!

Page 26: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

26

iTec

in init(): – in die Methode direkt hineinimplementiert:

• private Attribute. Servlet-Scope: werden geteilt von allen Requests

• Attribute mit Applikations-Scope: ServletContext.set/getAttribute(..) für jede Applikation gibt es genau ein ServletContext Objekt. Also: alle Servlets und JSPs einer Applikation teilen dieses Objekt

– über web.xml Parameter: werden im <init-param>-Tag gesetzt

servlet-spezifisch: über ein ServletConfig Objekt wird aus den Parametereinträgen (<init-param>-Tag innerhalb <servlet>-Tag) in web.xml erzeugt und in init() mit getInitParameter(..) gelesen

applikationsspezifisch: über ServletContext Objekt, aus (<context-param>-Tag innerhalb <web-app>-Tag) in web.xml. oder aus ServletContext.setAttribute(..)in anderen Servlets oder JSPs erzeugt

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Servlet Initialisierung

Page 27: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

27

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

<servlet>

<servlet-name> pbController </servlet-name>

<servlet-class> com.ora.jsp.servlets.PBControllerServlet1 </servlet-class> <init-param> <param-name>maxNews</param-name> <param-value>100</param-value> </init-param>

</servlet>

web.xml

Page 28: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

28

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

login.jsp

Anwendung “Project Billboard” (Bergsten2001)

Page 29: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

29

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

main.jsp

Page 30: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

30

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

entermsg.jsp

Page 31: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

31

iTec

Anwendung “Project Billboard” (Bergsten2001)

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

action=“storeMsg”

action=authenticate

action=updateprofile oder =showPage&page=entermsg.jsp

action= showPage &page= . . .

Page 32: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

32

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

public void init() throws ServletException { DataSource ds = null; try { ds = new DataSourceWrapper("sun.jdbc.odbc.JdbcOdbcDriver", "jdbc:odbc:example", null, null); } catch (Exception e) {} // Ignore all in this example EmployeeRegistryBean empReg = new EmployeeRegistryBean(); empReg.setDataSource(ds); getServletContext().setAttribute("empReg", empReg);

NewsBean news = new NewsBean(); getServletContext().setAttribute("news", news); }

die init-Methode des Controller Servlets

Zugriff auf news-Bean von anderen Servlets: NewsBeans newsBeans = (NewsBeans) getServletContext.getAttribute(“news”);

<jsp:useBean id=“news” scope=“application” class=“com.ora.jsp.beans.news.NewsBean”/>

Zugriff auf news-Bean von JSPs dieser Anwendung:

Page 33: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

33

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

String action = request.getParameter("action");

// Check if the user is authenticated if (!isAuthenticated(request) && !("authenticate".equals(action) || "logout".equals(action))) { doForwardToLogin(request, response); } else { if ("authenticate".equals(action)) { doAuthenticate(request, response); } else if ("logout".equals(action)) { doLogout(request, response); } else if ("storeMsg".equals(action)) { doStoreMsg(request, response); } else if ("updateProfile".equals(action)) { doUpdateProfile(request, response); } else if ("showPage".equals(action)) { doShowPage(request, response); } else { response.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED); } } }

Controller Servlet: zentralisierte Request Bearbeitung

Controller Servlet: zentralisierte Request Bearbeitung

Besonderheit: jeder Request dieser Anwendung bedarf einer Authentifizierung

Besonderheit: jeder Request dieser Anwendung bedarf einer Authentifizierung

Page 34: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

34

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

doPost(request, response);

}

private boolean isAuthenticated(HttpServletRequest request) { boolean isAuthenticated = false; HttpSession session = request.getSession();

if (session.getAttribute("validUser") != null) { isAuthenticated = true; } return isAuthenticated; }

Page 35: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

35

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

private void doForwardToLogin(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

String origURL = HttpUtils.getRequestURL(request).toString();

String queryString = request.getQueryString();

if (queryString != null) { origURL += "?" + queryString; }

String loginURL = "login.jsp" + "?origURL=" + URLEncoder.encode(origURL) + "&errorMsg=" + URLEncoder.encode("Please log in first");

forward(loginURL, request, response); }

der Parameter origURL dient dazu, die ursprüngliche URL des Requestszu speichern – was man natürlich auch in dem Session Objekt hättetun können

Besonderheit: der ursprüngliche, nicht authentifizierte Requestwird “gespeichert”, damitder Benutzer ihn nicht nochmals eingeben muss

Besonderheit: der ursprüngliche, nicht authentifizierte Requestwird “gespeichert”, damitder Benutzer ihn nicht nochmals eingeben muss

Page 36: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

36

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Request “xyz?abc=123”

Servlet

[nicht authentifiziert] doForwardToLogin

login.jspforward

origUrl=“xyz?abc=123”origUrl(hidden)

action=authenticate hidden:origURLname, password

doAuthenticate

userNameCookie, passwordCookie

origUrlredirect

Request “xyz?abc=123” [authentifiziert] doXYZ

Authentifizieren eines Requests

Page 37: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

37

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

<form action="process?action=authenticate" method="post">

<% String origURL = request.getParameter("origURL"); %> <input type="hidden" name="origURL" value="<%= origURL == null ? "" : origURL %>">

Please enter your User Name and Password, and click Enter. <p> Name: <input name="userName" value="<ora:getCookieValue name="userName" />" size="10"> Password: <input type="password" name="password" value="<ora:getCookieValue name="password" />" size="10"> <input type="submit" value="Enter"> <p> Remember my name and password: <input type="checkbox" name="remember" <%= CookieUtils.isCookieSet("userName", request) ? "checked" : "" %> > <br> (This feature requires cookies to be enabled in your browser) </form>

login.jsp(Ausschnitt)

login.jsp(Ausschnitt)

Page 38: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

38

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

private void doAuthenticate(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

String userName = request.getParameter("userName");

if (userName == null) { throw new ServletException("Missing User Name"); } String password = request.getParameter("password"); if (password == null) { throw new ServletException("Missing Password"); }

try { EmployeeRegistryBean empReg = (EmployeeRegistryBean) getServletContext().getAttribute("empReg"); boolean isRegistered = empReg.authenticate(userName, password);

if (isRegistered) { EmployeeBean emp = empReg.getEmployee(userName); HttpSession session = request.getSession(); session.setAttribute("validUser", emp);

. . .

Page 39: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

39

iTec

. . . Cookie userNameCookie = new Cookie("userName", userName); Cookie passwordCookie = new Cookie("password", password); int maxAge = MAXUSERCOOKIEAGE; if (request.getParameter("remember") == null) { maxAge = 0; } userNameCookie.setMaxAge(maxAge); passwordCookie.setMaxAge(maxAge); response.addCookie(userNameCookie); response.addCookie(passwordCookie); // Redirect to the originally requested URL or main String next = request.getParameter("origURL"); if (next == null || next.length() == 0) { next = getShowPageURL(request) + "main.jsp"; } response.sendRedirect(next); } else { String loginURL = "login.jsp" + "?errorMsg=" + URLEncoder.encode("Invalid User Name or Password"); response.sendRedirect(loginURL); }

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Unterschied zu forward:-Umleitung geschieht Client-seitig-Aktivierung wieder über Servlet

Unterschied zu forward:-Umleitung geschieht Client-seitig-Aktivierung wieder über Servlet

Page 40: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

40

iTec

die einzelnen Schritte eines UseCases in einer Web-Architektur sind voneinander entkoppelt: es gibt keine zentrale Steuerinstanz eines UseCases

damit kann der Client (Browser) jeden Schritt potentiell selber aktivieren, wann er will (sofern er den Request schon einmal ausgeführt hat, ihn also kennt)

eine strenge Kontrolle über den UseCase Ablauf bedarf einer besonderen Steuerlogik, die anders ist als eine GUI-Steuerlogik

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

warum reicht es nicht, “am Anfang” zu authentifizieren?

wichtige Besonderheit von Web-Anwendungen:

Page 41: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

41

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

<head> <title>Project Billboard</title> </head> <body bgcolor="white">

<jsp:useBean id="validUser" scope="session" class="com.ora.jsp.beans.emp.EmployeeBean" />

<h1>Welcome <%= validUser.getFirstName() %></h1>. . . <form action="process?action=updateProfile" method="post">

<input type="checkbox" name="projects" value="JSP". . . <input type="checkbox" name="projects" value="Servlet“. . .

main.jsp(Ausschnitt)

main.jsp(Ausschnitt)

Informationsver-arbeitung auf Server

Informationsver-arbeitung auf Server

Page 42: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

42

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

. . . <a href=process?action=showPage&page=entermsg.jsp>Post a new message</a> <p> <jsp:useBean id="news" scope="application" class="com.ora.jsp.beans.news.NewsBean" /> <% NewsItemBean[] newsItems = news.getNewsItems(validUser.getProjects()); pageContext.setAttribute("newsItems", newsItems); %> <table> <ora:loop name="newsItems" loopId="newsItem" className="NewsItemBean" > <tr> <td colspan="2"> Project: <jsp:getProperty name="newsItem" property="category" /> </td> . . .

main.jsp(Ausschnitt)

main.jsp(Ausschnitt)

keine Informationsver-arbeitung auf Server, reiner Seitenwechsel

keine Informationsver-arbeitung auf Server, reiner Seitenwechsel

Page 43: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

43

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

private void doShowPage(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String url = request.getParameter("page"); if (url == null) { throw new ServletException("Missing page info"); } forward(url, request, response); }

private String getShowPageURL(HttpServletRequest request) { return request.getContextPath() + request.getServletPath() + "?action=showPage&page="; } private void forward(String url, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { RequestDispatcher rd = request.getRequestDispatcher(url); rd.forward(request, response); }

Im Unterschied zu den anderen Aktionen soll hier nur auf eine andere Seite verzweigt werden.Anstatt von einer Seite direkt auf eine andere Seite zu verweisen, wird hier immer ein Durchlauf durch das Servlet erzwungen (Authentifizierung).

Im Unterschied zu den anderen Aktionen soll hier nur auf eine andere Seite verzweigt werden.Anstatt von einer Seite direkt auf eine andere Seite zu verweisen, wird hier immer ein Durchlauf durch das Servlet erzwungen (Authentifizierung).

gibt eine absolute URL zurück, um den nächsten Request wieder über das gleiche Servlet auf die nächste Seite zu lenken. Ist besser als diese URL direkt hineinzukodieren!

gibt eine absolute URL zurück, um den nächsten Request wieder über das gleiche Servlet auf die nächste Seite zu lenken. Ist besser als diese URL direkt hineinzukodieren!

Page 44: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

44

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Request “action=showPage&page=xyz.jsp”

Servlet

[authentifiziert] doShowPage

xyz.jspforward

[page existiert]

anstatt

Request “xyz.jsp”xyz.jsp

Page 45: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

45

iTec

Einführung Web-basierte Anwendungsarchitekturen

EnteringItems

enterItem

WaitingForPayment

makeNewSale

makeCashPayment

endSale

AuthorizingPayment makeCheckPayment

makeCreditPayment

authorized

Beispiel: ProcessSale

wie sind in diesem Beispiel die Zustandsübergänge der Session kodiert?

wie macht man dies bei komplexeren Sessions?

Page 46: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

46

iTec

1. beginne mit einem Satz verlinkter, statischer HTML-Seiten als Frontend-Prototyp. Es gibt hauptsächlich zwei Hyperlink-Typen:a) Dateneingabe (HTTP Parameter) verarbeiten, Resultat

anzeigeni. data entry (neue Entität), Resultat über Erfolg, evtl. Daten-Echoii. Resultat sind Daten, die mit Dateneingabe identifiziert werden

b) verzweigen zu anderem “Menu” (nächster Arbeitsschritt)manchmal können a) und b) in einem Link zusammenfallen

2. gehe zu dynamischen Seiten (JSP) über, und bilde die Links auf Zustandsübergangslogik eines oder mehrerer Servlet-Controller ab, mit “forwards” auf die JSPs

3. definiere das Domänenmodell (Beans)

4. verbinde Servlets und JSPs mit dem Domänenmodell

zwei Ansätze zur Spezifikation einer WEB-Anwendung

A) Frontend-basiert

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Page 47: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

47

iTec

1. schreibe wie im Unified Process mit UML UseCases mit Arbeits-schritten, und definiere für jeden UseCase ein Controller Servlet

2. schreibe für jeden Arbeitsschritt des UseCases eine Operation des Controllers

3. definiere in einem State-Diagramm Zustandsübergänge eines Controllers (UseCase), um Arbeitsschrittsequenzen einzuschränken

4. definiere für jeden Arbeitsschritt eines UseCases das Interaktionsereignis auf einer Web-Seite (samt Eingabedaten)

5. organisiere diese Ereignisse in eine Reihe von Web-Seiten (JSPs), unter Berücksichtigung von 3

6. definiere das Domänenmodell (Beans)

7. verbinde Servlets und JSPs mit dem Domänenmodell

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

zwei Ansätze zur Spezifikation einer WEB-Anwendung

B) UseCase-basiert

Page 48: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

48

iTec

in beiden Ansätzen: gehe nach den Normalfällen das Ganze nochmal durch für die Spezialfälle/Fehlerfälle

am besten: immer beide Ansätze durchgehen

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

zwei Ansätze zur Spezifikation einer WEB-Anwendung

A) Frontend-basiertB) UseCase-basiert

Page 49: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

49

iTec

Problem: Jedes Servlet ist ein Controller für einen UseCase.

Dann aber sollte man innerhalb einer Session eventuell mehrere Servlets (Use Cases) laufen lassen können: parallel/verschachtelt Problem damit: Session Management für mehrere UseCases/Servlets – es gibt nur globalen Bereich pro Session, aber nicht pro Session-Servlet!

Lösungen1. verschachtelte/parallele UseCases nur über jeweils neue

Sessions. 2. verschachtelte/parallele UseCases in einem Session-Objekt,

in dem man “per Hand” Servlet-spezifische Zustände führt

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

zwei Ansätze zur Spezifikation einer WEB-Anwendung

Page 50: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

50

iTec

Basisausnahme: ServletException wenn diese Exception nicht aufgefangen wird: unschöne Fehlermeldung im Browser

deshalb: Exception im Servlet auffangen und verzweigen (mit forward) auf spezielle Fehler JSP

wo auffangen? so spät (so ”weit oben”) wie möglich: in der service-Methode des Servlets

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Erqweiterungen

1. Fehlerbehandlung

Page 51: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

51

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

BaseServlet

service(request,response)

handle(exception, request,response)

HttpServlet

MyServlet

handle(exception, request,response)doPost(request,response)doGet(request,response). . .

public final void service ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { try { super.service( request, response ); } catch( Throwable aThrowable ) { handle( aThrowable, request, response ); } }

protected void handle (Throwable aThrowable, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {. RequestDispatcher dispatcher = getServletContext().getRequestDispatcher( "error.jsp" ); dispatcher.forward( request, response ); }

Page 52: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

52

iTec

Idee: pro Aktion ein spezielles Aktionenobjekt definieren

Abbildung des Aktionsnamens (Request Parameter) auf ein Objekt entweder dynamisch mittels Class.forName während des Request Services, oder in einer Hashtable während der Initialsierung des Servlets anlegen, am besten über Servlet Initialisierungsparameter

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Erqweiterungen

2. das Servlet unabhängig von den spezifischen Aktionen machen

Page 53: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

53

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

beanbeanmodel2

page2page1

controller

request

Forwardevents

servletservlet

JSPJSP

<form action= "process?action=a2" method="post">

post(..)

action[action == a1]

A1

JSPJSP

[action == a2]

A2

[action == a3]

A3

page3JSPJSP

response

auf “process” imweb.xml abgebildet

+doPost(..)

model1beanbean

“url rewriting”

Alternative: “hidden fields”

“url rewriting”

Alternative: “hidden fields”

process(req,res)

process(req,res)

process(req,res)

Page 54: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

54

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

BaseServlet

service(request,response)

handle(exception, request,response)

MyServlet

handle(exception, request,response)doPost(request,response)doGet(request,response). . .

Page 55: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

55

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Page 56: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

56

iTec

Beans as

x00-x000 sehr kurzlebig

x0 kurzlebig

x0 längerlebigvon mehrerenAnwendungen geteilt

Problem: Skalierbarkeit

Lösung: untersage privateVerbindungen zwischen Clients und kostspieligenRessourcen. Benutze statt dessen Ressourcen-Pools

langlebig

Anzahl Dauer

Einführung Web-basierte Anwendungsarchitekturen

Page 57: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

57

iTec

Beans as

Dynamic content creation and delivery

Input collection; validation?

Screen flow

State management?

Support for multiple clients

Business logic?

Einführung Web-basierte Anwendungsarchitekturen

Page 58: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

58

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Page 59: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

59

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Page 60: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

60

iTec

die 3 Architekturtypen Web-basierte Anwendungsarchitekturen

Page 61: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

61

iTec

1. für jeden „Go-Button“ (HTML buttons mit submit, links auf servlets) mit eigener Funktion: ein eigenes Servlet

2. ein einziges Servlet als Controller, das auf Supportklassen verzweigt, die die speziellen Funktionen ausführen (z.B. mit dem Command-Pattern)

Page 62: ITec 1 web client (browser) web server _____.html request URL ( get, post ) response HTML _____.jsp _____.class application DBMS JDBC RMI Sockets CORBA.

62

iTec

BaseServlet

HttpMethodServlet

+doGet( req, res )+doPost( req, res )+handle( exception, req, res )-processRequest( req, res )-getHttpController( req, res )

{ processRequest(req, res);}

{ HttpController controller = getHttpController( req, res ); controller.process();}

«interface»HttpController+ forward(String aPage)