Designmönster
J2EE
Praktiska tips
Webbservertillämpningsprogrammering
Vladimir Bogodist
Applikationsarkitektur

Verktyg
– Html / Dhtml / Css / JavaScript
– Isapi / Cgi / Perl / Php / Python / J2ee / .Net
– Java / C++ / Delphi / Vb

Modell
– Endast klient – P2P
– Endast server – B2B
– Klient <-> Server
Designmönster / J2EE / Praktiska tips
Webbservert.
2
Applikationslager
DBMS
DBMS
Serverapplikation
DBMS
Serverapplikation
Klientapplikation
Klientapplikation
Applet, soap
Vanlig applikation
Designmönster / J2EE / Praktiska tips
Webbservert.
Asp, php, jsp, cgi, isapi
3
Affärslogiken
DBMS
DBMS
DBMS
DBMS
Server
Server
Server
Server
Klient
Klient
Klient
Klient
Fall 1
Fall 2
Fall 3
Fall 4
Designmönster / J2EE / Praktiska tips
Webbservert.
4
Designmål



Läsbarhet
Underhållbarhet
Återanvändbarhet
Designmönster / J2EE / Praktiska tips
Webbservert.
5
Designmönster
Designmönster / J2EE / Praktiska tips
Webbservert.
6
Designmönster
Designmönster / J2EE / Praktiska tips
Webbservert.
7
Designmönster
Designmönster / J2EE / Praktiska tips
Webbservert.
8
Designmönster

Sidoorienterade
– Page-View
– Page-View + Bean

Förmedlingsorienterade
– Mediator-View
– Mediator-Composite View
– Service-To-Workers
Designmönster / J2EE / Praktiska tips
Webbservert.
9
Ramverket Struts


Komplett ramverk
MVC
– ActionServlet (koordinator)
– Action (anrop)
– ActionBean (anropdata)





Egna JSP tag-bibliotek
Mekanismer för hantering av fel
XML-parsning
Internationalization
http://jakarta.apache.org
Designmönster / J2EE / Praktiska tips
Webbservert.
10
Ramverket Struts
Designmönster / J2EE / Praktiska tips
Webbservert.
11
Struts - flödeshantering
<struts-config>
<form-beans>
<form-bean
name="logonForm"
type="app.LogonForm"/>
</form-beans>
<action-mappings>
<action
path="/Welcome"
forward="/pages/Welcome.jsp"/>
<action
path="/Logon"
forward="/pages/Logon.jsp"/>
<action
path="/LogonSubmit"
type="app.LogonAction"
Designmönster / J2EE / Praktiska tips
Webbservert.
12
Ramverket Struts
name="logonForm"
scope="request"
validate="true"
input="/Logon.do">
<forward
name="success"
path="/Welcome.do"/>
<forward
name="failure"
path="/Logon.do"/>
</action>
<action
path="/Logoff"
type="app.LogoffAction">
<forward
name="success"
path="/Welcome.do"/>
</action>
</action-mappings>
<message-resources parameter="resources.application"/>
</struts-config>
Designmönster / J2EE / Praktiska tips
Webbservert.
13
Nytt i J2EE





Java Server Faces
Java Standard Tag Library
Filters
Expression Language
Java Authentication and Authorization
Service
Designmönster / J2EE / Praktiska tips
Webbservert.
14
J2EE - Uttryck
<html>
<body>
<h1>EL and Template Text</h1>
<table border="1">
<tr>
<td>Hello ${param['name']}</td>
<td> </td>
</tr>
<tr>
<form method="post">
<td><input type="text" name="name"></td>
<td><input type="submit"></td>
</form>
<tr>
</table>
</body>
</html>
Designmönster / J2EE / Praktiska tips
Webbservert.
15
J2EE - Uttryck





Aritmetiska operationer
Jämförelser och logiska operationer
Åtkomst åt javabönor och variabler
Implicita objekt
(applicationScope, cookie, header, headerValues,
initParam, pageContext, pageScope, param,
paramValues, requestScope, sessionScope)
Funktioner
– I tagattribut
– Nästlade funktioner
Designmönster / J2EE / Praktiska tips
Webbservert.
16
J2EE - Uttryck
<%@ taglib uri="/WEB-INF/taglib.tld”
prefix="chapter3" %>
<%@ taglib uri="http://java.sun.com/jstl/core_rt"
prefix="c" %>
<html>
<body>
<c:out value="${chapter3:upper('a string')}" />
</body>
</html>
Designmönster / J2EE / Praktiska tips
Webbservert.
17
J2EE - Java Server Faces









Nykomling, ingår i J2ee sen mars 2004
MVC-tänkande
Icke-utvecklare kan snabbt komma igång
UI-komponenter med händelsehantering på
serversidan
Färdiga valideringsmekanismer
Konfiguration för sidonavigering
I18n
Mer inriktad på att vara språkoberoende,
klientoberoende samt protokolloberoende
Går att kombinera ihop med andra ramverk
Designmönster / J2EE / Praktiska tips
Webbservert.
18
Databaser

Avancerade
–
–
–
–

MS SQL Server
Oracle
IBM DB2
Informix
Medelmåtliga




– Postgre SQL
– MySQL
– Borland Interbase

Enkla
– Borland Paradox
– MS Access




ISO SQL – DML & DDL
SQL-funktioner
Avancerad SQL
Transaktioner
Säkerhet
Backup
Replikering
Klustring
Designmönster / J2EE / Praktiska tips
Webbservert.
19
MS SQL Server i Java
Typ I – ODBC-brygga
SQL Server
ODBC drivers
ODBC Engine
DSN/ODBC Client
ODBC-JDBC
Java
Designmönster / J2EE / Praktiska tips
Webbservert.
20
MySQL i Java
Typ IV – 100% Java
MySQL
JDBC 2.x API
Java
Designmönster / J2EE / Praktiska tips
Webbservert.
21
MS SQL Server i ASP
via ADO
SQL Server
ODBC drivers
ODBC Engine
DSN/ODBC Client
IIS
ISAPI (asp.dll)
AdoDB
ASP
Designmönster / J2EE / Praktiska tips
Webbservert.
22
Praktiska tips - Javabönor


Är inget annat än en klass som endast tillhandahåller data
Ska implementera någon av:
– java.io.Serializable
– java.io.Externalizable






Serialisering via writeExternal()
Deserialisering via readExternal()
Ska innehålla en tom konstruktor
Samtliga attribut måste ha get- och set-metoder samt följa
samma namgivningsmönster
Variabler av typen transient, ex. fil-, socketreferenser
Felscenario: Guess game i replikerad version
Designmönster / J2EE / Praktiska tips
Webbservert.
23
Praktiska tips - Formulär



Ge namn till sumbit-knappen
Skrota Reset
Skydda persondata
– https





Samtliga (även type=”hidden”) formulärfält ska
valideras
Formulär bör ha rutiner för felhantering med
välförklarande felmeddelande
Validera aldrig endast med JavaScript
Reguljära uttryck
Rensa ut html-taggar från imatningen
Designmönster / J2EE / Praktiska tips
Webbservert.
24
Praktiska tips –
E-postformulär











Alla variabler ska valideras med hjälp av reguljära uttryck, speciellt om php
används
Mottagarens adress får aldrig sättas till en url-/formulärvariabel
För en extra logg över data som skickas iväg. E-postserver kan misslyckas,
utan att man får reda på det
Exekveringstid för skriptet bör justeras
HTTP_REFERER kan användas men bör ej räknas som fullständigt skydd
E-postmeddelande ska vara korrekt utformade
Undvik e-post med html-innehåll
Sätt From-adress till avsändaren av e-postformuläret
Glöm inte att avläsa User-Agent samt IP-adress hos avsändaren
Bygg en timingsfunktion som begränsar skriptanrop per tidsenhet per IPadress
Begränsa webbserverns e-posthanterare till att endast skicka e-post till egna
kända domäner
Designmönster / J2EE / Praktiska tips
Webbservert.
25
Praktiska tips - Kakor




Använd inte känslig data i kakor
Kakorna kan enkelt manipuleras,
använd därför kryptering till hjälp
Bygg så att det går att använda utan
kakor
Sessioner via url-omskrivningar
Designmönster / J2EE / Praktiska tips
Webbservert.
26