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>&nbsp;</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