5. JavaServer Faces (JSF)

Größe: px
Ab Seite anzeigen:

Download "5. JavaServer Faces (JSF)"

Transkript

1 5. JavaServer Faces (JSF) 5.1 Grundlagen 5.2 Einführendes nulltes Beispiel 5.3 Validierung 5.4 JSF mit JPA und JNDI 5.5 Kompakt: EJB-SessionBeansund CDI 5.6 Funktionale Erweiterung 5.7 Sicherheit 5.8 Weitere JSF-Möglichkeiten 5.9 JSF-Lebenszyklus 5.10 Templates und Komponenten 5.11 Nutzung von Ajax 5.12 Testen von Web-Applikationen - Selenium 5.13 JSF-Erweiterungen 246

2 Literatur E.Burns, C. Schalk, JavaServer Faces 2.0: The Complete Reference, Mc Graw Hill, New York, 2010 M. Marinschek, M. Kurz, G. Müllan, JavaServerFaces2.0, dpunkt, Heidelberg, 2010 (im Wesentlichen auch: D. Geary, C. Horstmann, Core JavaServerFaces, 3. Auflage, Prentice Hall, USA, 2010 K. Ka IokTong, Beginning JSF 2 APIs and JBossSeam, Apress, Berkeley, USA, 2009 Standard: Sun, JSR 314: JavaServerFaces 2.1, Sun, JEE6 Tutorial, Bücher fixieren teilweise auf Eclipse und JBoss; nicht notwendig, funktioniert fast alles mit Netbeans und Glassfish / Apache 247

3 5.1 Grundlagen verschiedene Ziele von JSF-Applikationen Software, die Web als zusätzlichen Nutzen hat (z. B. Web- Präsenz, Kataloge, Bestellmöglichkeiten) verteilte Softwaresysteme, die Netz als Komponentenverbindung nutzen (z. B. B2B) Arbeitsplatzsoftware, die auch das Web nutzt (nahtlose Integration, Web ist unsichtbar ) letztes Ziel gewinnt immer mehr Bedeutung für andere Ziele Aber: Nicht immer ist Web-fähige Software gewünscht! 248

4 Technische Herausforderungen (1/2) auf welchem Rechner läuft welche Software zentraler Server oder peer-to-peer Client-Server, wer ist thin, wer ist fat Browser-fähig oder standalone welcher Browser, welche Sicherheitseinstellungen, welche Plugins, welches HTML Wie bekommt Kunde Software zum Laufen, wie funktionieren Updates darf man, muss man offline arbeiten können Usability 249

5 Technische Herausforderungen (2/2) Sicherheit wie Daten sicher verschicken, wem gehört Internet, wer muss zuhören dürfen Performance und Stabilität schnelle Antworten auch bei Last saubere, reproduzierbare Transaktionen was passiert bei Netzausfall 250

6 Typische splattformen (Ausschnitt).Net / Microsoft ASP.Net(ActiveServer Pages, gute Abstraktion, zunächst zu wenig Web-Server (IIS)) Silverlight (Browser-PlugIn) für RIA, mittlerweile auch lokal Oberflächen basierend auf WPF (Windows Presentation Forum, vektorbasiert, anfänglich zu langsam) Java Servlets, JSP, JSF [später genauer], angegeben mit steigenden Abstraktionsgrad sehr weit verbreitet verschiedene neue Frameworks (z. B. Apache Wicket) GWT (Google WidgetToolset), SW einmal in Java schreiben, dann individuell für Browser in Javascript übersetzen JavaFX, eigene Sprache nutzt im Browser JRE Meinung: Silverlight und JavaFXgegenüber HTML5 und aktuell noch Flash immer im Nachteil 251

7 Konzept eines Seitenaufrufs Client HTTP-Request HTTP-Response mit HTML-Datei im Body HTML (Hypertext Markup Language) Web- Container Application Server Auszeichnungssprache mit festgelegten tags zum Aufbau der Ausgabe Ebene 3/4 typisch TCP/IP, Session Ebene 5: HHTP, Darstellungsebene 6: HTML, Programmebene 7: JVM EJB- Container 252

8 HTTP-Ablauf Client: Request get, post, head, put,... URL HTTP1.x Header Info: Accept, Cookie,... Body: Post-Parameter Server: Response Statusmeldung: HTTP1.x 200 OK, oder 404 Error Header Info: Content-type, set-cookie,... Body: Dokument Verbindungsabbau Protokoll ist zustandslos/gedächtnislos; Client wird bei erneutem Request ohne Trick nicht als Bekannter erkannt 253

9 Web-Server mit Container nutzen Servlet: Wortkreation aus den Begriffen Server und Applet, (serverseitiges Applet) Web-Server leitet HTTP- Request an Servlet weiter Servlet kann Antwort (HTML-Code) berechnen Servlet kann Anfrage- Informationen und Serverumgebung nutzen Servlet kann mit anderen Servlets kommunizieren Container 254

10 Motivation für JSF Die Widerverwendbarkeit von Servlets ist gering Innerhalb jeder JSP bzw. jedes Servlets müssen ähnliche Schritte ausgeführt werden Nur ein Teil der Applikationslogik kann in Tag-Bibliotheken gekapselt werden Workflow ist in der Applikationslogik versteckt, dadurch schwer nachvollzierbar ab JSF 2.0 sehr flexible Gestaltungsmöglichkeiten, u. a. AJAX- Einbettung Hinweis: wir betrachten nur Grundkonzepte (-> mehr evtl. Semesteraufgabe) 255

11 Web-Server mit JSF- (und EJB-) Unterstützung Beispiele: Apache Tomcat BEA WebLogic Server IBM WebSphere(Apache Geronimo) JBoss Oracle WebLogic Sun Glassfish Enterprise Server (Glassfish) 256

12 Konzeptübersicht Web-Seite in XHTML Input-Komponente beschrieben in XHTML... Web-Seite in XHTML Output-Komponente beschrieben in XHTML... event leitet auf Folgeseite liest Modell Java-Programm im Container im Server 257

13 XHTML Idee: HTML nicht XML-konform und zu viele Freiheiten XHTML in fast allen Elementen wie HTML XHTML basierend auf XML-Schema leichter zu verarbeiten Unterschiede zu HTML (Ausschnitt) Tags und Attribute müssen klein geschrieben werden Attributwerte immer in Anführungsstrichen boarder korrekte XML-Syntax: <br br/> />nicht <br br> generell saubere Terminierung <input... /> boarder="7" XHTML2 wegen HTML5 zurückgestellt (verschwimmt damit) Standard: Literatur: U. Ogbuji, XHTML step-by-step, 258

14 Web-GUI-Komponenten JSF bietet alle klassischen GUI-Komponenten zur Darstellung und Bearbeitung an Grundidee: Komponenten schicken bei Veränderungen Events Nutzung von MVC2 Komponenten als XHTML eingebettet <h:inputtext id="imname" value="#{modul.name required="true"/> <h:outputtext id="omname" value="#{modul.name"/> Kontakt zum Java-Programm über Methodenaufrufe (lesend und aufrufend, z. B. modul.setname(...), modul.getname() große Komponenten können aus kleineren komponiert werden 259

15 5.2 Nulltes JSF-Beispiel (1/11) Aufgabe: Modul (Name + Nummer) eingeben und auf zweiter Seite wieder ausgeben Beispiel zeigt: Konzept der XHTML-Nutzung erste JSF-Befehle Seitenmanövrierung durch JSF 0. Beispiel zeigt nicht: ordentliche Softwarearchitektur (Controller und Model trennen) Validierungsmöglichkeiten für Eingaben Layoutgestaltung viele coole Dinge 260

16 Nulltes JSF-Beispiel (2/11) - Start index.xhtml <?xml version='1.0' encoding='utf ='UTF-8'?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " transitional.dtd"> <html xmlns=" xmlns:h=" =" jsf/html html"> <h:head h:head> <title>moduleingabetitle> h:head h:head> <h:body h:body> <h:form h:form> <h:outputtext value="modulname "/> <h:inputtext id=" ="mname mname" value="#{modul.name" required=" ="true true"/>< "/><br br/> <h:outputtext value="modulnummer "/> <h:inputtext id=" ="mnr mnr" value="#{modul.nr" required=" ="true true"/>< "/><br br/> <h:commandbutton value="abschicken" action="#{ ="#{modul.uebernehmen modul.uebernehmen"/> h:form h:form> h:body h:body> html html> 261

17 Nulltes JSF-Beispiel (3/11) - Analyse der Startseite Einbinden der JSF-Bibliotheken <html xmlns=" xmlns:h=" =" jsf/html html" xmlns:f =" jsf/core core" > Nutzung von Standard XHTML (vereinfacht, da so als Standardnamensraum gesetzt) enge Verwandtschaft HTML zu XHTML (<h:form>) für value="#{modul.name" offene Fragen: was ist modul? (-> ManagedBean) warum #?(Trennung von ausführbaren Elementen) was passiert bei modul.name? (set/getabhängig von in/out) Ausblick: action="#{ Handling (Methodenaufruf) ="#{modul.uebernehmen modul.uebernehmen" ", echtes Event- 262

18 Nulltes JSF-Beispiel (4/11) - Ausgabe ausgabe.xhtml <?xml version='1.0' encoding='utf ='UTF-8'?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " transitional.dtd"> <html xmlns=" xmlns:h=" =" jsf/html html"> <h:head h:head> <title>modulausgabetitle> h:head h:head> <h:body h:body> <h:form h:form> <h:outputtext value="modulname: "/> <h:outputtext id=" ="mname mname" value="#{modul.name"/> <br br/> <h:outputtext value="modulnummer: "/> <h:outputtext id=" ="mnr mnr" value="#{modul.nr"/>< ="#{modul.nr"/><br br/> <h:commandbutton value="zur Eingabe" action="#{ ="#{modul.eingeben modul.eingeben"/> h:form h:form> h:body h:body> html html> 263

19 Nulltes JSF-Beispiel (5/11) - Managed Bean [1/3] package entities; import java.io.serializable; import javax.faces.bean.managedbean; import ManagedBean(name name=" ="modul public class Modul implements Serializable { private static final long serialversionuid = 1L; private int nr; private String name; public Modul(){ public Modul(int nr, String name) { this.nr = nr; this.name = name; 264

20 Nulltes JSF-Beispiel (6/11) - Managed Bean [2/3] public String uebernehmen(){ return "./ausgabe.xhtml ausgabe.xhtml"; public String eingeben(){ return "./index.xhtml index.xhtml"; public String getname() { return name; public void setname(string name) { this.name = name; public int getnr() { return nr; public void setnr(int nr) { this.nr = nr; //Manövrieren 265

21 Nulltes JSF-Beispiel (7/11) - Managed Bean public boolean equals(object object) { if (object object==null!(object instanceof Modul)) return false; Modul other = (Modul) object; if (this.nr!= other.nr!this.name.equals this.name.equals(other.name)) return false; return // generieren lassen public int hashcode() { int hash = 5; hash = 47 * hash + this.nr; hash = 47 * hash + (this.name!= null? this.name.hashcode() : 0); return public String tostring() {return name+"("+ +"("+nr nr+")"; 266

22 267 Nulltes JSF-Beispiel (8/11) - web.xml [1/2] Konfigurationsdatei für Servlets (hier benötigt) sun-web.xml ist Glassfish-spezifische Konfiguratonsdatei <? <? <? <?xml xml xml xml version version version version="1.0" ="1.0" ="1.0" ="1.0" encoding encoding encoding encoding="utf ="UTF ="UTF ="UTF-8"?> 8"?> 8"?> 8"?> <web <web <web <web-app app app app version version version version="3.0" ="3.0" ="3.0" ="3.0" xmlns xmlns xmlns xmlns=" =" =" =" xml xml xml/ns ns ns ns/javaee javaee javaee javaee" xmlns:xsi xmlns:xsi xmlns:xsi xmlns:xsi=" =" =" =" instance" instance" instance" xsi:schemalocation xsi:schemalocation xsi:schemalocation xsi:schemalocation=" =" =" =" xml xml xml/ns ns ns ns/javaee javaee javaee javaee app_3_0.xsd"> app_3_0.xsd"> app_3_0.xsd"> <context context context context-param param param param> <param param param param-name> name> name> name>javax.faces.project_stage javax.faces.project_stage javax.faces.project_stage javax.faces.project_stage param param param param-name> name> name> name> <param param param param-value value value value>development >Development >Development >Developmentparam param param param-value value value value> context context context context-param param param param> <servlet servlet servlet servlet> <servlet servlet servlet servlet-name> name> name> name>faces Faces Faces Faces Servlet Servlet Servlet Servletservlet servlet servlet servlet-name> name> name> name> <servlet servlet servlet servlet-class class class class>javax.faces.webapp.facesservlet javax.faces.webapp.facesservlet javax.faces.webapp.facesservlet javax.faces.webapp.facesservlet servlet servlet servlet servlet-class class class class> <load load load load-on on on on-startup>1 startup>1 startup>1 startup>1load load load load-on on on on-startup> startup> startup> startup> servlet servlet servlet servlet>

23 268 Nulltes JSF-Beispiel (9/11) - web.xml [2/2] <servlet servlet servlet servlet-mapping mapping mapping mapping> <servlet servlet servlet servlet-name> name> name> name>faces Faces Faces Faces Servlet Servlet Servlet Servletservlet servlet servlet servlet-name> name> name> name> <url url url url-pattern>/ pattern>/ pattern>/ pattern>/faces faces faces faces/* /* /* /*url url url url-pattern> pattern> pattern> pattern> servlet servlet servlet servlet-mapping mapping mapping mapping> <session session session session-config config config config> <session session session session-timeout> timeout> timeout> timeout> session session session session-timeout> timeout> timeout> timeout> session session session session-config config config config> <welcome welcome welcome welcome-file file file file-list> list> list> list> <welcome welcome welcome welcome-file> file> file> file>faces faces faces faces/index.xhtml index.xhtml index.xhtml index.xhtml welcome welcome welcome welcome-file> file> file> file> welcome welcome welcome welcome-file file file file-list> list> list> list> web web web web-app app app app> in sun-web.xml steht u. a. <context context context context-root root root root>/jsfspielerei2 >/JSFSpielerei2 >/JSFSpielerei2 >/JSFSpielerei2context context context context-root root root root>

24 Nulltes JSF-Beispiel (10/11) - Projektstruktur 269

25 Nulltes JSF-Beispiel (11/11) - Ergebnis 270

26 Einschub: IE 9 -Problem Programm läuft problemlos in Firefox und Chrome in IE 8 gab es auch keine Probleme in IE 9, erfolgt nach Drücken des Knopfes folgende Ausgabe 271

27 Einschub: IE 9 -Lösung Session-Informationen können statt im Server auch im Client gehalten werden entlastet Server, ist aber für Nutzer langsamer Ergänzung in web.xml: <context context-param param> <param param-name> name>javax.faces.state_saving_method javax.faces.state_saving_method param param-name> <param param-value value>client client param param-value value> context context-param param> Anmerkung: fehlt systematische Fehleranalyse: NetBeans 7.2, Glassfish3.1.2, MS IE 9, MS IE 9 Nutzereinstellungen, Win7 x64, 272

28 Einschub: korrekte Pfadangabe Browser zeugt immer vergangene Seite wenn nicht gewünscht, dann Manövrierungsstring ändern ist etwas langsamer (später genauer) Scope setzen public String uebernehmen(){ return "./ausgabe.xhtml?faces ausgabe.xhtml?faces-redirect redirect=true true"; public String eingeben(){ return "./index.xhtml?faces index.xhtml?faces-redirect redirect=true true"; 273

29 Basisprinzip der Applikationssteuerung Im Controller: Aufruf einer Methode ohne Parameter vom Rückgabetyp String <h:commandbutton value="abschicken" Im Modell: public String uebernehmen(){ return "./ausgabe.xhtml"; action="#{modul.uebernehmen"/> Methode kann natürlich abhängig von Variablen unterschiedliche Seiten liefern Beachten: Navigation kann in den Tiefen des Codes verschwinden ( -> Konstanten nutzen, Architektur) Hinweis: wir werden noch Varianten kennenlernen 274

30 Lebensdauer von Informationen (scope) Request View Session Application nur für einen solange für eine solange Zeit Aufruf Nutzer auf Nutzer- aktuelles (auch für Applikationsseiten bleibt läuft Sitzung Deployment Weiterleitung) Scope None passt sich Aufrufer-Scope an (default kein Leben) Anmerkung: Obwohl es verlockend ist, viele Informationen in Session oder Applicationzu legen, ist dies wgperformance verboten (wird gespeichert, evtl. passiviert, hat wilde Referenzen, Zugriff muss ggfls. synchronisiert werden) 275

31 Scope-Beispiel (1/5) - Bean-Klasse //@ManagedBean ManagedBean(name name = "modul modul") //@RequestScoped Modul als einfache Klasse (wichtig!) public class Modul implements Serializable {...// wie ManagedBean(name = "moduln public class ModulNone extends ManagedBean(name = "modulr public class ModulRequest extends ManagedBean(name = "moduls public class ModulSession extends ManagedBean(name name = "modula public class ModulApplication extends Modul{ 276

32 Scope-Beispiel (2/5) - Ausschnitt index.xhtml <h:form h:form> <h:panelgrid columns="3" > <h:outputlabel for=" ="mnamen mnamen" value="modulname "/> <h:inputtext id=" ="mnamen mnamen" value="#{moduln.name"/> <h:message for=" ="mnamen mnamen" /> <h:outputlabel for=" ="mnrn mnrn" value="modulnummer "/> <h:inputtext id=" ="mnrn mnrn" value="#{moduln.nr"/> <h:message for=" ="mnrn mnrn" /> <h:outputlabel for=" ="mnamer mnamer" value="modulname "/> <h:inputtext id=" ="mnamer mnamer" value="#{modulr.name"/> <h:message for=" ="mnamer mnamer" /> <h:outputlabel for=" ="mnrr mnrr" value="modulnummer "/> <h:inputtext id=" ="mnrr mnrr" value="#{modulr.nr"/> <h:message for=" ="mnrr mnrr" /> <!-- auch moduls und modula --> <h:commandbutton value="abschicken" action="#{ ="#{modulr.uebernehmen modulr.uebernehmen"/> h:panelgrid h:panelgrid> 277

33 Scope-Beispiel (3/5) - Ausschnitt ausgabe.xhtml <h:form h:form> <h:messages globalonly=" ="true true"/> <h:outputtext value="modulname n: "/> <h:outputtext id=" ="mnamen mnamen" value="#{moduln.name"/> <br br/> <h:outputtext value="modulnummer n: "/> <h:outputtext id=" ="mnrn mnrn" value="#{moduln.nr"/>< ="#{moduln.nr"/><br br/> <h:outputtext value="modulname r: "/> <h:outputtext id=" ="mnamer mnamer" value="#{modulr.name"/> <br br/> <h:outputtext value="modulnummer r: "/> <h:outputtext id=" ="mnrr mnrr" value="#{modulr.nr"/>< ="#{modulr.nr"/><br br/> <h:commandbutton value="zur Eingabe" action="#{ ="#{modulr.eingeben modulr.eingeben"/>< "/><br br/> <!-- auch moduls und modula --> <h:commandbutton value="ausgabe wiederholen" action="#{ ="#{modulr.uebernehmen modulr.uebernehmen"/> h:form h:form> 278

34 Scope-Beispiel (4/5) - Ein Nutzer, zwei Klicks 279

35 Scope-Beispiel (5/5) - Zwei Nutzer Nutzer 2 Nutzer 1 Zeit 280

36 Manövrieren vor JSF 2.0 Grundidee: Automat mit Seiten als Knoten (Zustände), Übergang findet durch String-Konstanten statt String-Konstanten sind Ergebnisse von (Action-) Methoden (oder stehen direkt in action="eingeben") index.xhtml ausgabe.xhtml 281

37 282 Manövrieren vor JSF faces-config.xml 1/2 <? <? <? <?xml xml xml xml version version version version='1.0' ='1.0' ='1.0' ='1.0' encoding encoding encoding encoding='utf ='UTF ='UTF ='UTF-8'?> 8'?> 8'?> 8'?> <faces faces faces faces-config config config config version version version version="1.2" ="1.2" ="1.2" ="1.2" xmlns xmlns xmlns xmlns=" =" =" =" xml xml xml/ns ns ns ns/javaee javaee javaee javaee" xmlns:xsi xmlns:xsi xmlns:xsi xmlns:xsi=" =" =" =" instance" instance" instance" xsi:schemalocation xsi:schemalocation xsi:schemalocation xsi:schemalocation=" =" =" =" xml xml xml/ns ns ns ns/javaee javaee javaee javaee facesconfig_1_2.xsd"> facesconfig_1_2.xsd"> facesconfig_1_2.xsd"> <navigation navigation navigation navigation-rule rule rule rule> <from from from from-view view view view-id id id id>/ >/ >/ >/index.xhtml index.xhtml index.xhtml index.xhtml from from from from-view view view view-id id id id> <navigation navigation navigation navigation-case case case case> <from from from from-outcome outcome outcome outcome>anzeigen >ANZEIGEN >ANZEIGEN >ANZEIGENfrom from from from-outcome outcome outcome outcome> <to to to to-view view view view-id id id id>/ >/ >/ >/ausgabe.xhtml ausgabe.xhtml ausgabe.xhtml ausgabe.xhtml to to to to-view view view view-id id id id> navigation navigation navigation navigation-case case case case> navigation navigation navigation navigation-rule rule rule rule> <navigation navigation navigation navigation-rule rule rule rule> <from from from from-view view view view-id id id id>/ >/ >/ >/ausgabe.xhtml ausgabe.xhtml ausgabe.xhtml ausgabe.xhtml from from from from-view view view view-id id id id> <navigation navigation navigation navigation-case case case case> <from from from from-outcome outcome outcome outcome>eingeben >EINGEBEN >EINGEBEN >EINGEBENfrom from from from-outcome outcome outcome outcome> <to to to to-view view view view-id id id id>/ >/ >/ >/ index.xhtml index.xhtml index.xhtml index.xhtml to to to to-view view view view-id id id id> navigation navigation navigation navigation-case case case case> navigation navigation navigation navigation-rule rule rule rule>

38 Manövrieren vor JSF Managed Bean // statt durch Annotationen können Beans auch in faces- // config.xml angelegt werden public class Modul implements Serializable { private static final long serialversionuid = 1L; private int nr; private String name; // fehlt: get- und set-methoden für Exemplarvariablen public Modul(){ public String uebernehmen(){ //Action-Methode // Zugriff auf Exemplarvariablen möglich return "ANZEIGEN"; public String eingeben(){ // Zugriff auf Exemplarvariablen möglich return "EINGEBEN";

39 Manövrieren vor JSF faces-config.xml 2/2 <managed-bean> <managed-bean bean-name>modulmanaged name>modulmanaged-bean bean-name> name> <managed-bean bean-class>entities.modulmanaged class>entities.modulmanaged-bean bean-class> <managed-bean bean-scope>requestmanaged scope>requestmanaged-bean bean-scope> managed-bean> faces-config> config> Vorteil der klassischen Navigation: Es gibt zentrale Stelle, an der es einen Überblick über mögliche Abläufe gibt Nachteile: JSF 2.0 bietet flexiblere Ablaufsteuerung XML ist schwer nachvollziehbar Konfigurationsdatei faces faces-config.xml config.xml config.xml bleibt trotzdem wichtig 284

40 Erinnerung: Konstanten in Programmen schlecht return "ANZEIGEN"; besser: Konstanten getrennt deklarieren public class Modul implements Serializable{ private final static string ANZEIGEN = "ANZEIGEN";... return ANZEIGEN; Alternativ: Klasse mit Konstanten package konstanten; public class Navigation{ public final static string ANZEIGEN = "ANZEIGEN";... return konstanten.navigation.anzeigen; sumgebungen erlauben dann einfache Suche und Änderung (Refactoring) 285

41 Standardattribut rendered (1/3) JSF-Elemente werden typischerweise ineinander geschachtelt (typische GUI-Idee der Schächtelchen in Schächtelchen) viele (Schachtel-)Elemente haben Attribut rendered; Boolescher Wert, ob Element dargestellt public class Mojo { private boolean jo=true; public Mojo(){ public boolean getjo() {return jo; public void setjo(boolean jo) {this.jo = jo; public String change(){ jo=!jo; return "./index.xhtml"; 286

42 Standardattribut rendered (2/3) - JSF-Seite <?xml version='1.0' encoding='utf ='UTF-8'?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " transitional.dtd"> <html xmlns=" xmlns:h=" =" jsf/html html"> <h:head h:head> <title>klickklacktitle> h:head h:head> <h:body h:body> <h:form id="f1"> <h:panelgrid id="p1" rendered="#{mo.jo"> <h:outputlabel value= HS rocks"/> h:panelgrid h:panelgrid> <h:panelgrid id="p2" rendered="#{!mo.jo"> <h:outputlabel value="os rocks"/> h:panelgrid h:panelgrid> <h:commandbutton action="#{ ="#{mo.change mo.change" value="press"/> h:form h:form> h:body h:body> html html> 287

43 288 Standardattribut rendered (3/3) <? <? <? <?xml xml xml xml version version version version='1.0' ='1.0' ='1.0' ='1.0' encoding encoding encoding encoding='utf ='UTF ='UTF ='UTF-8'?> 8'?> 8'?> 8'?> <faces faces faces faces-config config config config version version version version="1.2"...> ="1.2"...> ="1.2"...> ="1.2"...> <managed managed managed managed-bean bean bean bean> <managed managed managed managed-bean bean bean bean-name> name> name> name>mo mo mo mo managed managed managed managed-bean bean bean bean-name> name> name> name> <managed managed managed managed-bean bean bean bean-class class class class>entities.mojo entities.mojo entities.mojo entities.mojo managed managed managed managed-bean bean bean bean-class class class class> <managed managed managed managed-bean bean bean bean-scope scope scope scope>session session session session managed managed managed managed-bean bean bean bean-scope scope scope scope> managed managed managed managed-bean bean bean bean> faces faces faces faces-config config config config> oder in faces-config.xhtml

44 Strukturierung mit panelgrid / Kommentare mit h:panelgridkönnen einzelne Komponenten zu einem Block zusammengefasst und einheitlich behandelt werden (ähnlich zu JPanel in Swing) weiterhin kann durch columns="3" eine Spaltenanzahl angegeben werden Ausgabe erfolgt in Tabellenform Elemente werden zeilenweise ergänzt echte JSF-Kommentare sehen wie folgt aus <%-- Dies liest eh keiner --%> 289

45 5.3 Validierung/ Fehleingaben im nullten Beispiel (1/2) Eingabe: Fehler wird automatisch unter der bleibender Seite ausgegeben j_idt7 ist interner Name, mnameist unsere iddes Eingabefeldes 290

46 Fehleingaben im nullten Beispiel (2/2) Anpassung des Projektstatus (oder Parameter löschen) in web.xml <context-param> <param-name>javax.faces.project_stageparam name>javax.faces.project_stageparam-name> <!-- <param-value>developmentparam value>developmentparam-value> --> <param-value>productionparam value>productionparam-value> context-param> Applikation bleibt auf der Seite, keine sichtbare Fehlermeldung im Server-Log: INFO: WARNUNG: FacesMessage(s) wurde(n) in die Warteschlange gestellt, aber möglicherweise nicht angezeigt. sourceid=j_idt7:mname[severity=(error 2), summary=(j_idt7:mname: Validierungs-Fehler: Wert wird benötigt.), detail=(j_idt7:mname: Validierungs-Fehler: Wert wird benötigt.)] 291

47 Direkte Validierungen - einige Möglichkeiten <h:form h:form> <h:panelgrid columns="3" > <h:outputlabel for=" ="mname mname" value="modulname "/> <h:inputtext id=" ="mname mname" value="#{modul.name" required=" ="true true" size="8" requiredmessage=" ="nich leer" validatormessage="4 Zeichen"> <f:validatelength minimum="4" maximum="4"/> h:inputtext h:inputtext> <h:message for=" ="mname mname" /> <h:outputlabel for=" ="mnr mnr" value="modulnummer "/> <h:inputtext id=" ="mnr mnr" value="#{modul.nr" required=" ="true true" requiredmessage="mach Zahl eh" size="4" convertermessage=" ="nomahle Zahl"/> <h:message for=" ="mnr mnr" /> <h:commandbutton value="abschicken" action="#{ ="#{modul.uebernehmen modul.uebernehmen"/> h:panelgrid h:panelgrid> h:form h:form> 292

48 Ausgaben beim Drücken von Abschicken 293

49 Globale Fehlermeldungen erzeugen und anzeigen public String uebernehmen() { if (name.equals name.equals("ooad")) { FacesContext ctxt = FacesContext.getCurrentInstance(); FacesMessage ms = new FacesMessage(); ms.setseverity(facesmessage.severity_error FacesMessage.SEVERITY_ERROR); ms.setsummary("ooad ist schon da"); ms.setdetail("ooad im Standard"); ctxt.addmessage(null, ms); return "ANZEIGEN"; //in ausgabe.xhtml <h:form h:form> <h:messages globalonly="true"/> <h:outputtext value="modulname Modulname: "/> 294

50 Validierer selbst gestrickt (1/2) public class Modul implements Serializable {... // Validierungsmethoden können beliebigen Namen haben, // müssen aber die folgende Signatur haben public void pruefe(facescontext context, UIComponent component, Object value) throws ValidatorException { if (((String) value). ).equals equals("ooad")) { throw new ValidatorException(new new FacesMessage( FacesMessage.SEVERITY_ERROR, "oweh oweh", "ole ole"));

51 Validierer selbst gestrickt (2/2) in index.xhtml <h:panelgrid columns="3" > <h:outputlabel for=" ="mname mname" value="modulname "/> <h:inputtext id=" ="mname mname" value="#{modul.name" validator="#{ ="#{modul.pruefe modul.pruefe"/> <h:message for=" ="mname mname" /> 296

52 Erinnerung: Bean Validation nicht: Nutzer Oberfläche Java fachliche Ebene Datenzugriffsschicht DB besser: individuelle Datenvalidierung individuelle Datenvalidierung Java individuelle Datenvalidierung individuelle Datenvalidierung Nutzer Oberfläche fachliche Ebene Datenzugriffsschicht DB Datenmodell mit Validierungsregeln 297

53 Beispiel Bean-Validation ManagedBean(name name=" ="modul public class Modul implements Serializable { private static final long serialversionuid = value=100, value=999, message="dreistellig") private groups={ ={validators.modulgroup.class validators.modulgroup.class) private String name; //... übliche Konstruktoren, get und set Hinweis: Implementierung des Validierersin Libraries benötigt (Klasseneigenschaften werden nicht unterstützt!?) 298

54 Beispiel @Constraint(validatedBy = Modulnamenregel { String message() default "Modul unerwuenscht"; Class<?>[] groups() default {; Class<? extends Payload>[] payload() default {; String[] verboten() default {; package validators; public interface ModulGroup { 299

55 Beispiel Bean-Validation (3/6) public class ModulnamenregelValidator implements ConstraintValidator<Modulnamenregel,String>{ private String[] niveau; public void initialize(modulnamenregel ca) { niveau=ca.verboten(); public boolean isvalid(string t, ConstraintValidatorContext cvc) { System.out.println("isValid"); for(string s:niveau) if(s.equals(t)){ cvc.buildconstraintviolationwithtemplate( "Modul in unerwuenschter Liste: " +Arrays.toString(niveau)).addConstraintViolation(); return false; return true; 300

56 Beispiel Bean-Validation (4/6) - index.xhtml <h:body h:body> <h:form h:form> <h:panelgrid columns="3" > <h:outputlabel for=" ="mname mname" value="modulname "/> <h:inputtext id=" ="mname mname" value="#{modul.name"> <f:validatebean disabled=" ="false false" validationgroups=" ="validators.modulgroup validators.modulgroup"/> h:inputtext h:inputtext> <h:message for=" ="mname mname" /> <h:outputlabel for=" ="mnr mnr" value="modulnummer "/> <h:inputtext id=" ="mnr mnr" value="#{modul.nr" /> <h:message for=" ="mnr mnr" /> <h:commandbutton value="abschicken" action="#{ ="#{modul.uebernehmen modul.uebernehmen"/> h:panelgrid h:panelgrid> h:form h:form> h:body h:body> 301

57 Beispiel Bean-Validation (5/6) 302

58 Beispiel Bean-Validation (6/6) 303

59 Ordentliche Softwarearchitektur JSF-Seite Seite <<managed-bean>> Controller Bean (Entität) #{controller.bearbeiten #{controller.bean.attribut #{controller.speichern Controller (und Bean) auch backing bean genannt bei DB-Nutzung greift Controller auf DB-Verwaltungsschicht zu; die verwaltet Bean-Objekte JPA einfach im Controller (besser eigener Schicht) nutzen (später schöner mit JEE als 304

60 5.4 JSF mit JPA und JNDI Einschub: Nutzung von JPA bei DB im Server Datenbank einrichten Datenbank wird unter JNDI-Namen im Server registriert JSF-Applikation kann über JNDI auf DB zugreifen JSF-Container regelt DB-Zugriff (nicht Nutzer!), typische container-managed Persistance[geht auch individuell] 305

61 Verwaltung einer Modulliste (1/9) - Entität public class Modul implements Serializable { private static final long serialversionuid GeneratedValue(strategy = GenerationType.AUTO) private int id; private int nr; // so sind gleiche Nummern erlaubt private String private int version; public Modul() { public Modul(int nr, String name) { this.nr = nr; this.name = name; // fehlen get- und set-methoden, equals über id 306

62 Verwaltung einer Modulliste (2/9) - Seitenstruktur 307

63 Verwaltung einer Modulliste (3/9) - Datenbank <?xml version="1.0" encoding="utf-8"?> <persistence version="2.0" xmlns=" xmlns:xsi=" instance" xsi:schemalocation=" <persistence-unit name="jsfmodulliste1mitjpapu" transaction-type="jta"> type="jta"> <provider>org.eclipse.persistence.jpa.persistenceprovider provider> <jta-data data-source>jsfmodul1jta source>jsfmodul1jta-data data-source> <exclude-unlisted unlisted-classes>falseexclude classes>falseexclude-unlisted unlisted-classes> <properties> <property name="eclipselink.ddl-generation" value="drop-and and-create create-tables"/> tables"/> properties> persistence-unit> persistence> 308

64 Verwaltung einer Modulliste (4/9) - Startseite <h:form id="f1"> <h:messages globalonly="true"/> <h:panelgrid columns="3" > <h:outputlabel for="mname" value="modulname "/> <h:inputtext id="mname" value="#{module.modul.name"/> <h:message for="mname" /> <h:outputlabel for="mnr" value="modulnummer "/> <h:inputtext id="mnr" value="#{module.modul.nr"/> <h:message for="mnr"/> <h:commandbutton value="abschicken" action="#{module.uebernehmen"/> h:panelgrid> <h:commandlink action="#{module.anzeigen" > <h:outputtext value="zur Modulübersicht"/> h:commandlink> h:form> 309

65 Verwaltung einer Modulliste (5/9) - Controller ManagedBean(name name=" ="module public class ModuleController //wichtig, nicht selber erzeugen!!! private EntityManagerFactory private UserTransaction utx; private List<Modul> module = new ArrayList<Modul>(); private Modul modul=new Modul(); private EntityManager em; private final String HINZUFUEGEN = "./index.xhtml index.xhtml"; private final String ANZEIGEN = "./uebersicht.xhtml uebersicht.xhtml"; private final String EINGEBEN = "./index.xhtml index.xhtml"; public ModuleController() { 310

66 Verwaltung einer Modulliste (6/9) - Controller 2/3 public Modul getmodul() {return modul; public void setmodul(modul modul) {this.modul = modul; public List<Modul> getmodule() {return module; public void setmodule(list<modul> module) {this.module = module; public String anzeigen() { em = emf.createentitymanager(); module= em.createquery("select m FROM Modul m",modul.class Modul.class).getResultList getresultlist(); em.close(); return ANZEIGEN; public String eingeben() { modul = new Modul(); return EINGEBEN; 311

67 Verwaltung einer Modulliste (7/9) - Controller 3/3 public String uebernehmen() { FacesContext ctxt = FacesContext.getCurrentInstance(); FacesMessage ms = new FacesMessage("Erfolgreich eingetragen"); try { em = emf.createentitymanager(); utx.begin(); em.persist(modul modul); module= em.createquery("select m FROM Modul m",modul.class Modul.class).getResultList getresultlist(); utx.commit(); finally { catch (Exception e) { if (em!= null) { try { em.close(); ms = new FacesMessage( e.getmessage()); utx.rollback(); ctxt.addmessage(null, ms); catch (Exception e2) { modul=new Modul(); ms = new FacesMessage( return HINZUFUEGEN; e2.getmessage()); 312

68 Verwaltung einer Modulliste (8/9) - Ergebnisseite 1/2 <h:form id="f2"> <h:messages globalonly="true"/> <h:panelgrid rendered="#{! ="#{!empty module.module"> <h:datatable value="#{ ="#{module.module module.module" var="m" border="8" frame="box" > <h:column > <f:facet name=" ="header header"> <h:outputtext value="nummer" /> f:facet f:facet> <h:outputlabel value="#{m.nr"/> h:column h:column> 313

69 Verwaltung einer Modulliste (9/9) - Ergebnisseite 2/2 <h:column h:column> <f:facet name=" ="header header"> <h:outputtext value="modulname" /> f:facet f:facet> <h:outputlabel value="#{m.name"/> h:column h:column> h:datatable h:datatable> h:panelgrid h:panelgrid> <h:commandlink action="#{ ="#{module.eingeben module.eingeben" > <h:outputtext value="zur Moduleingabe"/> h:commandlink h:commandlink> h:form h:form> 314

70 Projektaufbau 315

71 Einschub: Ausgabe von Sammlungen <h:datatable value="#{ ="#{module.module module.module" var="m"> datatableerlaubt die Datenaufbereitung einer Collectionin Tabellenform (Iteratorüber Daten mit getmodule(); Elemente in Variable m); grundlegende Darstellungsmöglichkeiten einstellbar Zur Ausgabe wird minimal <h:column h:column> benötigt Attribut firstfür erste Zeile und rows für Zeilenzahl 316

72 5.5 Kompakt: EJB-SessionBeans und CDI Architekturvariante bisher einfache direkte Software-Architektur (nutzbar für kleinere und mittlere Projekte) Problem: Skalierung nicht unbedingt sichergestellt, da Server nicht im Detail eingreifen kann (Ansatz: Mehrschichtarchitektur basierend auf EJB) Problem: direkte Nutzung von JPA sehr bastelig JEE-Problematik: JSF-Lösungen stark auf JSF-fokussiert, wie auf verwandte JEE-Techniken übertragen (Ansatz: Context and Dependency Injection, CDI) 317

73 EJB - Konzept Standardisierte Komponenten eines JEE-Servers Klassen zur Steuerung von Prozessen und Verwaltung von Daten, die leicht in anderen EJB-Applikationen nutzbar sind Unterstützt mit wenig Aufwand Transaktionssteuerung Sicherheitseinstellungen Identifikation von Objekten zur Zusammenarbeit Drei Arten (local und remote Varianten) Entity Bean (POJO,@Entity wie bereits bekannt) Session Bean: Kommunikation mit bei jeder Nutzung neu in einer Session nutzbar Message Driven Bean: asynchroner Nachrichtenablauf 318

74 EJB-Umsetzung (1/4) package ejb; import entities.modul; import java.util.list; import javax.ejb.stateless; import javax.persistence.entitymanager; import public class Modulverwaltung PersistenceContext(unitName = "vljsfmodullistemitejbpu vljsfmodullistemitejbpu") private EntityManager em; public void persist(object object) { em.persist(object object); //Exception weiterreichen public List<Modul> getmodule() { return em.createquery("select m FROM Modul m", Modul.class).getResultList getresultlist(); 319

75 EJB-Umsetzung (2/4) Teil 1/2 package view; import ejb.modulverwaltung; import entities.modul; import java.io.serializable; import java.util.list; import javax.ejb.ejb; import javax.faces.bean.managedbean; import ManagedBean(name name = "module public class ModulBean implements Serializable { private static final long serialversionuid = 1L; private Modul modul = new private Modulverwaltung mv; public ModulBean() { 320

76 EJB-Umsetzung (3/4) Teil 2/2 public List<Modul> getmodule() { return mv.getmodule(); public String uebernehmen() { try { mv.persist(modul modul); // modul = new Modul() nicht notwendig catch (Exception e) { // wie vorher mit FacesContext return "./uebersicht.xhtml uebersicht.xhtml"; public String eingeben() { return "./index.xhtml index.xhtml"; public String anzeigen() { return "./uebersicht.xhtml uebersicht.xhtml"; // get und set für this.modul 321

77 EJB-Umsetzung (4/4) Klasse Modul bleibt unverändert XHTML-Seiten bleiben unverändert gleiches Verhalten, wie vorher wenn durchhangeln über this.modul nicht gewünscht: public class ModulBean implements Serializable { private static final long serialversionuid = 1L; private int nr; private String private Modulverwaltung mv; // Methoden anpassen, in index.html direkt module.nr 322

78 Projektstruktur 323

79 CDI JSF-Lösungen stark auf JSF-fokussiert, wie auf verwandte JEE-Techniken übertragen? JSR 299: Contexts and Dependency Injection for the Java TM EE platform ( Zugriff von JSF-Seiten auf Objekte auch außerhalb JSF nutzbar Wunsch flexible Nutzung von Objekten innerhalb des Servers -> Server kennt Klassen und stellt Objekte zur Verfügung Exemplarvariable/ als Modul m Benötigt beans.xml-datei (in META-INF), ist im einfachsten Fall leer Dokumentation: US/pdf/weld-reference.pdf 324

80 Beispiel: Modulverwaltung aus mehreren Schichten Web-Design (XHTML-Seiten) [unverändert] ManagedBean zur Verwaltung der Ein- und Ausgaben Session-Bean zur Verwaltung der Objekte; Kapselung der JPA-Schicht (Details für Entwickler verstecken) Datenobjekte [unverändert] 325

81 Named(" ("moduldelegate moduldelegate") // flexibler als ManagedBean //(braucht public class ModulDelegate implements Serializable { Generell weitere Annotation möglich, die z. B. Observer- Observable allein über Annotationen regeln ausnahmsweise gutes Video QX1tChV7Z7l1LFF4L9j_g&index=50&feature=plpp 326

82 5.6 Funktionale Erweiterung Interessante JSF-Elemente <f:facet name=" ="header header"> <h:outputtext value="nummer" /> f:facet f:facet> facet dient zur Ergänzung verschiedener anderer JSF- Elemente; Art der Ergänzung durch Attribut name festgelegt 327

83 Architekturvariante ab JSF 2.0 Grundidee: (fast) alle Objekte werden als ManagedBeans (mit unterschiedlichem Scope) aufgefasst ManagedBeanskönnen andere als Parameter in Methodenaufrufen (action-methoden) ManagedBean(name = public class A {... private String mach(b b){ // kann b bearbeiten/nutzen nutzen return "String mit Pfad zur nächsten ManagedBean(name = public class B {... <h:commandlink value="bearbeitung Bearbeitung" action="#{a.mach a.mach(b)"/> 328

84 Kurze Diskussion der Architekturvarianten Klassischer Ansatz #{controller.bean.attribut controller.bean.attribut saubere Steuerungsklasse(n) Mehrfachpunktnotation sehr unüblich für Attribute neuer Ansatz ab JSF 2.0 <h:commandlink value="bearbeitung Bearbeitung" action="#{a.mach a.mach(b)"/> für Programmierer (!) intuitive Methodennutzung Objekt b nicht änderbar (sei anderes Objekt, geht nicht) CDI-Variante über Annotationen generelle Frage: wie steht es mit Objektorientierung 329

85 Funktionalität ergänzen (1/6) - Aufgabe Moduleinträge sollen editierbar werden Problem: Editieren-Link muss Modul erkennen Ansatz: Link erhält Parameter, der als Request- Parameter ausgelesen werden kann Hinweis: JSFfigerer Ansatz unter Nutzung des DataModels und von Data- Model-Events lösbar 330

86 Funktionalität ergänzen (2/6) - uebersicht.xhtml <h:datatable value="#{ ="#{module.module module.module" var="m" border="8" frame="box" >... <h:column h:column> <f:facet name=" ="header header"> <h:outputtext value="bearbeitung"/> f:facet f:facet> <h:commandlink action="#{ ="#{module.editieren module.editieren"> <h:outputtext value="editieren"/> <f:param name=" ="edit edit" value="#{m.id"/> h:commandlink h:commandlink> h:column h:column>

87 Funktionalität ergänzen (3/6) - public class Modulverwaltung PersistenceContext(unitName = "JSFModullisteAenderungPU JSFModullisteAenderungPU") private EntityManager em; public void persist(object object) { em.persist(object object); //Erinnerung Exceptions weitergegeben public void update(object object) { em.merge(object object); public Modul find(string id){ return em.find(modul.class Modul.class, Integer.parseInt(id id)); public List<Modul> getmodule() { return em.createquery("select m FROM Modul m", Modul.class).getResultList getresultlist(); 332

88 Funktionalität ergänzen (4/6) -Seite einbauen // in // neu public class ModulBean implements Serializable { private String getrequestparameter(string par) { return FacesContext.getCurrentInstance().getExternalContext getexternalcontext().getrequestparametermap getrequestparametermap(). ().get get(par); //evtl. in Hilfsklasse auslagern public String editieren() { String mid = getrequestparameter(" ("edit edit"); modul = mv.find(mid mid); // Modulverwaltung return "./edit.xhtml edit.xhtml"; 333

89 Funktionalität ergänzen (5/6) - edit.xhtml <h:form h:form> <h:panelgrid columns="3"> <h:outputlabel value="interne ID "/> <h:outputlabel value="#{module.modul.id"/> <h:outputlabel value=" "/> <h:outputlabel for=" ="mname mname" value="modulname "/> <h:inputtext id=" ="mname mname" value="#{module.modul.name"/> <h:message for=" ="mname mname" /> <h:outputlabel for=" ="mnr mnr" value="modulnummer "/> <h:inputtext id=" ="mnr mnr" value="#{module.modul.nr"/> <h:message for=" ="mnr mnr"/> <h:commandbutton value="ändern" action="#{ ="#{module.aendern module.aendern"/> h:panelgrid h:panelgrid> <h:commandlink action="#{ ="#{module.anzeigen module.anzeigen" > <h:outputtext value="zur Modulübersicht"/> h:commandlink h:commandlink> h:form h:form> 334

90 Funktionalität ergänzen (6/6) - Ändern // in ModuleBean.java public String aendern() { try{ mv.update(modul modul); modul = new Modul(); catch (Exception e) { // TODO sinnvolle Fehlermeldung für JSF return "./uebersicht.xhtml uebersicht.xhtml"; // in uebernehmen() und eingeben() vor return ergänzen modul = new Modul(); 335

91 Beispielnutzung

92 Variante: JSF 2.0 ohne f:param <h:datatable value="#{module.module module.module" var="m" border="8" frame="box" >... <h:commandlink value="editieren Editieren" action="#{module.editieren module.editieren(m)"/> // in ModulBean.java public String editieren(modul m) { modul=m =m; return EDITIEREN; 337

93 5.7 Sicherheit Vier Aufgaben Authentifizierung: Nutzer erkennen; klassisch über Name und Passwort Autorisierung: Nutzer darf nur bestimmte Aktionen durchführen, klassisch über Rechte-Rollen-System Vertraulichkeit: kein weiterer Nutzer (außer BKA, CIA,...) darf Informationen mitlesen Unverfälschtheit: Inhalte werden zwischen Senden und Empfangen nicht verändert letzten beiden Punkte typischerweise durch Verschlüsselung realisiert 338

94 Nutzer Rollen Gruppen typischerweise wird ein Nutzer einer oder mehreren Gruppen (mit unterschiedlichen) Rechten zugeordnet zur Vereinfachung (Abstraktion) bekommt jeder Nutzer genau eine Rolle, die dann verschiedenen Gruppen zugeordnet werden kann jede benötigte Gruppenkombination benötigt eine Rolle Nutzer NC M Gruppe NC M 1 Rolle NC 339

95 Varianten zur Realisierung direkt von Hand codieren (mit DB-Anbindung für uns technisch kein Problem; Übertragung aber unsicher mit HTTP) jeder Methodenaufruf beginnt mit Berechtigungsprüfung deklarativ Möglichkeit zur abgetrennten Authentifizierung Seiten (Servlets, JSP, JSF) können als schützenswert markiert werden (im Deployment Descriptor) Zugang zu Seiten wird nur Nutzer in bestimmten Rollen gewährleistet deklarativ (Variante) Programmcode direkt mit erlaubten Rollen annotieren 340

96 Umsetzungsmöglichkeit in JSF Deployment Descriptor(web.xml) Man kann Rollen definieren Man kann Seiten/Ordner Rollen zuordnen Man kann Art der Übertragung festlegen und Applikationsserver-spezifisch: Auswahl eines Informationssystems zur Authentifizierung (Nutzer, Passwort, zugehörige Rollen), z. B. im Server selbst, Datenbank, Anbindung LDAP Zuordnung der Server-Gruppen zu den Rollen der JSF- Applikation (oder Zuordnung von Nutzern zu Rollen der JSF- Applikation) 341

97 Applikationsbeispiel -Überblick 1. Nutzer wählt Funktionalität 2. Nutzer muss sich authentifizieren 3. Prüfung ob Nutzer erlaubt und ob er benötigte Rechte hat 4a. falls ja, Zugang zur Funktionalität 4b. falls Nutzer unbekannt, ihn über Scheitern informieren 4c. falls Nutzer bekannt und zu wenig Rechte, ihn über fehlende Rechte informieren [oder wie 4b behandeln] Hinweis: statt geschützten Zugriff auf Startseite kann diese noch offen sein (ergonomisch, weitere Einstellungen regelbar) technische Probleme: Nutzer kann mehrere Seiten für gleiche Applikation nutzen Nutzer spielt mit Back -Button 342

98 Sicheres JSF (1/17) Aufgabenstellung / Nutzer Nur registrierte Basisnutzer können Modul hinzufügen Nur Editierer(Admins) dürfen Modul bearbeiten Server unterstützen verschiedene Sicherheitsmechanismen direkter Eintrag von Nutzern im Server Anbindung an LDAP Nutzung eigener Tabellen (wird hier genutzt, eigener Realm, eigene Tabellen zur Verwaltung, mit verschlüsselten Passwort, genauer: Nutzer username password Gruppen groupid usernme edna edna admin edna uwe uwe basic edna otto otto basic uwe 343

99 Sicheres JSF (2/17) Ergebnis 1/3 344

100 Sicheres JSF (3/17) Ergebnis 2/3 345

101 Sicheres JSF (4/17) Ergebnis 3/3 - Konzept Web-Seiten in Ordner pro Nutzergruppe einordnen In web.xml regeln, welche Gruppe worauf zugreifen darf Standard login-servlet einschalten und nutzen Ausnahmefälle regeln Ausloggen sicherstellen (Session deaktivieren) generell: inkrementelle 346

102 Sicheres JSF (5/17) - Projektstruktur serverspezifische Einstellungen Angabe von Rollen und Rechten zu schützende Informationen pro Gruppe auch Startseite geschützt Eingabe der Nutzererkennung bekannter Nutzer ohne Rechte nicht existenter Nutzer 347

103 Sicheres JSF (6/17) - serverindividuelle Vorbereitung Rechte-Rollen werden mit konkreten Nutzern in Datei glassfish-web.xml (vorher sun-web.xml) umgesetzt <security security-role role-mapping> <role-name> name>basisnutzer basisnutzerrole role-name> <group-name>basicgroup name>basicgroup-name> security-role role-mapping> <security-role role-mapping> <role-name> name>editierer editiererrole role-name> <group-name>admingroup name>admingroup-name> security-role role-mapping> Gruppenname aus Datenbank (Spalte) Auch Nutzer (username) direkt eintragbar 348

104 349 <welcome welcome welcome welcome-file file file file-list> list> list> list> <welcome welcome welcome welcome-file> file> file> file>faces faces faces faces/hinzufuegen hinzufuegen hinzufuegen hinzufuegen/index.xhtml index.xhtml index.xhtml index.xhtml welcome welcome welcome welcome-file> file> file> file> welcome welcome welcome welcome-file file file file-list> list> list> list> <security security security security-constraint constraint constraint constraint> <display <display <display <display-name>c1display name>c1display name>c1display name>c1display-name> name> name> name> <web <web <web <web-resource resource resource resource-collection collection collection collection> <web <web <web <web-resource resource resource resource-name>basisschutzweb name>basisschutzweb name>basisschutzweb name>basisschutzweb-resource resource resource resource-name> name> name> name> <description description description description/> /> /> /> <url url url url-pattern>/ pattern>/ pattern>/ pattern>/faces faces faces faces/hinzufuegen hinzufuegen hinzufuegen hinzufuegen/* /* /* /*url url url url-pattern> pattern> pattern> pattern> <http <http <http <http-method method method method>gethttp >GEThttp >GEThttp >GEThttp-method method method method> <http <http <http <http-method method method method>posthttp >POSThttp >POSThttp >POSThttp-method method method method> web web web web-resource resource resource resource-collection collection collection collection> <auth auth auth auth-constraint constraint constraint constraint> <description description description description/> /> /> /> <role role role role-name> name> name> name>basisnutzer basisnutzer basisnutzer basisnutzer role role role role-name> name> name> name> auth auth auth auth-constraint constraint constraint constraint> <user <user <user <user-data data data data-constraint constraint constraint constraint> <transport <transport <transport <transport-guarantee guarantee guarantee guarantee>confidentialtransport >CONFIDENTIALtransport >CONFIDENTIALtransport >CONFIDENTIALtransport-guarantee guarantee guarantee guarantee> user user user user-data data data data-constraint constraint constraint constraint> security security security security-constraint constraint constraint constraint> Sicheres JSF (7/17) - JSF-Konfiguration web.xml [1/3] Startseite im Unterordner Regel für alle Seiten des Ordners wer darf HTTPS einschalten

5. JavaServer Faces(JSF)

5. JavaServer Faces(JSF) 5. JavaServer Faces(JSF) Grundlagen Nutzung von JSF-Annotationen Validierung von Eingaben Ausgabe von Fehlermeldungen Auswahl darzustellender Elemente typische elementare Software-Architektur JSF + JPA

Mehr

Ansatz 1: Alle kennen Entitäten-Modell (1/2) Erinnerung: Eine Komponentenarchitektur-Variante. Ansatz 1: Alle kennen Entitäten-Modell (2/2)

Ansatz 1: Alle kennen Entitäten-Modell (1/2) Erinnerung: Eine Komponentenarchitektur-Variante. Ansatz 1: Alle kennen Entitäten-Modell (2/2) Erinnerung: Eine Komponentenarchitektur-Variante Datenbank als zentrale Kommunikationsplattform Ansatz 1: alle Komponenten kennen Entitäten-Modell Ansatz 2: Datenzugriffsschicht kapselt Datenbank Ansatz

Mehr

5. JavaServer Faces (JSF) / JEE

5. JavaServer Faces (JSF) / JEE 5. JavaServer Faces (JSF) / JEE 5.1 Grundlagen 5.2 Einführendes nulltes Beispiel 5.3 Validierung 5.4 Einschub: Contexts and Dependency-Injection 5.5 JSF mit JPA und JNDI 5.6 Funktionale Erweiterung 5.7

Mehr

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel ralf_gitzel@hotmail.de

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel ralf_gitzel@hotmail.de EJB Beispiel JEE Vorlesung 10 Ralf Gitzel ralf_gitzel@hotmail.de 1 Stundenkonzept Gemeinsame Übung Stoff der letzten Stunde wird gemeinsam in einem Beispiel umgesetzt Details werden nochmals erklärt bzw.

Mehr

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de s & Servlet Integration Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Motivation Das Interface Stateful und Stateless s Programmierung einer Stateful

Mehr

JBoss Seam. Ein JEE 5 Webframework. Jörg Wüthrich Infopoint, 4. Februar 2009

JBoss Seam. Ein JEE 5 Webframework. Jörg Wüthrich Infopoint, 4. Februar 2009 JBoss Seam Ein JEE 5 Webframework Jörg Wüthrich Infopoint, 4. Februar 2009 Inhalt Einführung Warum Seam? Zentrale Konzepte Demo Validierung Abschliessende Gedanken 04.02.2009 Infopoint - JBoss Seam - Jörg

Mehr

Programmierung von Client/Server- Anwendungen

Programmierung von Client/Server- Anwendungen Programmierung von Client/Server- Anwendungen Komponenten des Web-Containers (Java EE) SoSe2015 Prof. Dr. Andreas Schmietendorf 1 Übersicht zur Vorlesung Entwicklung der Java Enterprise Edition Servlets,

Mehr

Sicherheit. letzten beiden Punkte typischerweise durch Verschlüsselung realisiert. Komponentenbasierte Software Entwicklung. Prof. Dr.

Sicherheit. letzten beiden Punkte typischerweise durch Verschlüsselung realisiert. Komponentenbasierte Software Entwicklung. Prof. Dr. Sicherheit Vier Aufgaben Authentifizierung: Nutzer erkennen; klassisch über Name und Passwort Autorisierung: Nutzer darf nur bestimmte Aktionen durchführen, klassisch über Rechte Rollen System Vertraulichkeit:

Mehr

Standardattribut rendered(2/3) - JSF-Seite. Standardattribut rendered(1/3) Strukturierung mit panelgrid/ Kommentare. Standardattribut rendered(3/3)

Standardattribut rendered(2/3) - JSF-Seite. Standardattribut rendered(1/3) Strukturierung mit panelgrid/ Kommentare. Standardattribut rendered(3/3) Standardattribut rendered(1/3) JSF-Elementewerden typischerweise ineinander geschachtelt (typische GUI-Idee der Schächtelchen in Schächtelchen) viele (Schachtel-)Elementehaben Attribut rendered; Boolescher

Mehr

Der lokale und verteilte Fall

Der lokale und verteilte Fall Lokale Beans Der lokale und verteilte Fall RemoteClient Lokaler Client (JSP) RemoteSession/Entity-Bean Lokale Session/Entity-Bean 2 Lokale Beans Die bisher vorgestellten EJBswaren immer in der Lage auf

Mehr

OP-LOG www.op-log.de

OP-LOG www.op-log.de Verwendung von Microsoft SQL Server, Seite 1/18 OP-LOG www.op-log.de Anleitung: Verwendung von Microsoft SQL Server 2005 Stand Mai 2010 1 Ich-lese-keine-Anleitungen 'Verwendung von Microsoft SQL Server

Mehr

JSP Grundlagen. JEE Vorlesung Teil 5. Ralf Gitzel ralf_gitzel@hotmail.de

JSP Grundlagen. JEE Vorlesung Teil 5. Ralf Gitzel ralf_gitzel@hotmail.de JSP Grundlagen JEE Vorlesung Teil 5 Ralf Gitzel ralf_gitzel@hotmail.de 1 Übersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht JSP Konzept Model-View-Controller mit JSPs JSP Expression Language EL Literale

Mehr

Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java

Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java Präsentation zur Diplomarbeit von Übersicht Java 2 Enterprise Edition Java Servlets JavaServer Pages Enterprise JavaBeans Framework

Mehr

Java - Webapplikationen

Java - Webapplikationen Java - Webapplikationen Bestandteile (HTTP,, JSP) Aufbau (Model View Controller) Datenverwaltung (Java Beans, Sessions) Entwicklung (Projektstruktur, Sysdeoplugin für Eclipse) 17. Januar 2006 Jan Hatje

Mehr

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen. Übersicht Struts Forms Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen. Allgemeines Autor: Sascha Wolski http://www.laliluna.de/tutorials.html

Mehr

WEBAPPLIKATIONEN MIT PHP. Wo gibt es Hilfe? Wie fang ich an?

WEBAPPLIKATIONEN MIT PHP. Wo gibt es Hilfe? Wie fang ich an? WEBAPPLIKATIONEN MIT PHP Wo gibt es Hilfe? Wie fang ich an? Tools Webapplikationen bestehen aus Textdateien Lassen sich in Texteditoren schreiben Alternativen: Eclipse (PDT) Netbeans (Dynamic Languages)

Mehr

4. Servlets Ein kleiner Einstieg. Kurze Java Historie. Erinnerung: Internet Anwendungen. Konzept eines Seitenaufrufs

4. Servlets Ein kleiner Einstieg. Kurze Java Historie. Erinnerung: Internet Anwendungen. Konzept eines Seitenaufrufs 4. s Ein kleiner Einstieg Erinnerung: HTTP und HTML Idee von Web n und Containern Erstellung einfacher s (zunächst software technisch übelst unstrukturiert) Literatur: B. Basham, K. Sierra, B. Bates, Head

Mehr

Erfahrungen und Erkenntnisse. Klaus Richarz, HBT GmbH

Erfahrungen und Erkenntnisse. Klaus Richarz, HBT GmbH Erfahrungen und Erkenntnisse Klaus Richarz, HBT GmbH Java Enterprise Edition 5.0 JBoss Seam Konsequenzen für Realisierung Qualitätssicherung Build & Deployment Fazit & Empfehlungen JBoss Seam in Projekten,

Mehr

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter 2 Inhaltsverzeichnis 1 Web-Kürzel 4 1.1 Einführung.......................................... 4 1.2 Web-Kürzel.........................................

Mehr

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER Inhalt 1 Einleitung... 1 2 Einrichtung der Aufgabe für die automatische Sicherung... 2 2.1 Die Aufgabenplanung... 2 2.2 Der erste Testlauf... 9 3 Problembehebung...

Mehr

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI Universität Osnabrück Drei-Schichten-Architektur 3 - Objektorientierte Programmierung in Java Vorlesung 6: 3-Schichten-Architektur Fachkonzept - GUI SS 2005 Prof. Dr. F.M. Thiesing, FH Dortmund Ein großer

Mehr

Fehleingaben im nullten Beispiel (2/2) 5.3 Validierung/ Fehleingaben im nullten Beispiel (1/2) Ausgaben beim Drücken von Abschicken

Fehleingaben im nullten Beispiel (2/2) 5.3 Validierung/ Fehleingaben im nullten Beispiel (1/2) Ausgaben beim Drücken von Abschicken 5.3 Validierung/ Fehleingaben im nullten Beispiel (1/2) Eingabe: Fehler wird automatisch unter der bleibender Seite ausgegeben j_idt7 ist interner Name, mname ist unsere id des Eingabefeldes Fehleingaben

Mehr

Faclets. Eine alternative View Technologie um JSF Applikationen OHNE JSP zu entwickeln Wird unter java.net gehostet Open Source, CDDL Lizenz

Faclets. Eine alternative View Technologie um JSF Applikationen OHNE JSP zu entwickeln Wird unter java.net gehostet Open Source, CDDL Lizenz Facelets Faclets Eine alternative View Technologie um JSF Applikationen OHNE JSP zu entwickeln Wird unter java.net gehostet Open Source, CDDL Lizenz (COMMON DEVELOPMENT AND DISTRIBUTION LICENSE) Von Jacob

Mehr

Workshop Java Webentwicklung Einführung in Hibernate. Ulrich Stärk

Workshop Java Webentwicklung Einführung in Hibernate. Ulrich Stärk Workshop Java Webentwicklung Einführung in Hibernate Ulrich Stärk Ablauf Montag bis Donnerstag 09:00 Uhr s.t. Beginn, bis ca. 17:00 Uhr 1 Stunde Mittagspause Donnerstag Experiment Aufzeichnung der Programmiertätigkeit

Mehr

Konfigurationslanleitung für J2EE und Eclipse im KBS-Pool

Konfigurationslanleitung für J2EE und Eclipse im KBS-Pool Konfigurationslanleitung für J2EE und Eclipse im KBS-Pool JBoss vorbereiten Wir haben ein zip-archiv mit JBoss 4.0.5 in /opt/jboss-4.0.5.zip hinterlegt. Entpacken Sie dieses in ihrem Homeverzeichnis an

Mehr

Multimedia im Netz. Wintersemester 2011/12. Übung 10. Betreuer: Verantwortlicher Professor: Sebastian Löhmann. Prof. Dr.

Multimedia im Netz. Wintersemester 2011/12. Übung 10. Betreuer: Verantwortlicher Professor: Sebastian Löhmann. Prof. Dr. Multimedia im Netz Wintersemester 2011/12 Übung 10 Betreuer: Verantwortlicher Professor: Sebastian Löhmann Prof. Dr. Heinrich Hussmann Organisatorisches 2 Gesundes neues Jahr 3 Blatt 08 Videoformate im

Mehr

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck Javadoc Programmiermethodik Eva Zangerle Universität Innsbruck Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle

Mehr

Es wird das Struts <html:option> Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht.

Es wird das Struts <html:option> Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht. Struts Code Peaces Element Es wird das Struts Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht. Allgemeines Autor: Sascha Wolski Sebastian Hennebrüder

Mehr

4. JavaServer Faces (JSF) / JEE

4. JavaServer Faces (JSF) / JEE 4. JavaServer Faces (JSF) / JEE 4.1 Grundlagen 4.2 Einführendes nulltes Beispiel 4.3 Validierung 4.4 JSF mit EJB und JPA 4.5 Get 4.6 Sicherheit 4.7 Weitere JSF-Möglichkeiten 4.8 JSF-Lebenszyklus 4.9 Templates

Mehr

Design anpassen eine kurze Einführung

Design anpassen eine kurze Einführung Design anpassen eine kurze Einführung Das gesamte Layout von Papoo basiert auf modernen CSS Layouts die vollständig ohne Layout Tabellen funktionieren. Um schnell vorhandene Designs anpassen zu können

Mehr

Meldung Lokale Anwendung inkompatibel oder Microsoft Silverlight ist nicht aktuell bei Anmeldung an lokal gespeicherter RWE SmartHome Anwendung

Meldung Lokale Anwendung inkompatibel oder Microsoft Silverlight ist nicht aktuell bei Anmeldung an lokal gespeicherter RWE SmartHome Anwendung Meldung Lokale Anwendung inkompatibel oder Microsoft Silverlight ist nicht aktuell bei Anmeldung an lokal gespeicherter RWE SmartHome Anwendung Nach dem Update auf die Version 1.70 bekommen Sie eine Fehlermeldung,

Mehr

Einrichten des IIS für VDF WebApp. Einrichten des IIS (Internet Information Server) zur Verwendung von Visual DataFlex Web Applications

Einrichten des IIS für VDF WebApp. Einrichten des IIS (Internet Information Server) zur Verwendung von Visual DataFlex Web Applications Einrichten des IIS (Internet Information Server) zur Verwendung von Visual DataFlex Web Applications Windows 8 Systemsteuerung > Programme > Windows Features aktivieren / deaktivieren > Im Verzeichnisbaum

Mehr

HTML5. Wie funktioniert HTML5? Tags: Attribute:

HTML5. Wie funktioniert HTML5? Tags: Attribute: HTML5 HTML bedeutet Hypertext Markup Language und liegt aktuell in der fünften Fassung, also HTML5 vor. HTML5 ist eine Auszeichnungssprache mit der Webseiten geschrieben werden. In HTML5 wird festgelegt,

Mehr

Kleines Handbuch zur Fotogalerie der Pixel AG

Kleines Handbuch zur Fotogalerie der Pixel AG 1 1. Anmelden an der Galerie Um mit der Galerie arbeiten zu können muss man sich zuerst anmelden. Aufrufen der Galerie entweder über die Homepage (www.pixel-ag-bottwartal.de) oder über den direkten Link

Mehr

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage .htaccess HOWTO zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage Stand: 21.06.2015 Inhaltsverzeichnis 1. Vorwort...3 2. Verwendung...4 2.1 Allgemeines...4 2.1 Das Aussehen der.htaccess

Mehr

Seite 1. Abbildung 1: Einrichtung der Datenbank

Seite 1. Abbildung 1: Einrichtung der Datenbank Machbarkeitsstudie Sprinter Dieses Beispiel führt exemplarisch einige der Technologien rund um das Thema JEE vor. Dabei liegt der Schwerpunkt darauf, kompakt den Ansatz vorzustellen, ohne im Detail alle

Mehr

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein:

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: 5. HTTP Proxy (Auth User / URL Liste / Datei Filter) 5.1 Einleitung Sie konfigurieren den HTTP Proxy, um die Webzugriffe ins Internet zu kontrollieren. Das Aufrufen von Webseiten ist nur authentifizierten

Mehr

WebService in Java SE und EE

WebService in Java SE und EE Schlüsselworte Java, JAX-WS, JAX-RS, JAXB, XML. Einleitung WebService in Java SE und EE Wolfgang Nast MT AG Ratingen Es werden die Mölichkeiten von WebServices in Java SE und EE, mit SOAP und REST gezeigt.

Mehr

Eine Anwendung mit InstantRails 1.7

Eine Anwendung mit InstantRails 1.7 Eine Anwung mit InstantRails 1.7 Beschrieben wird das Anlegen einer einfachen Rails-Anwung, die ohne Datenbank auskommt. Schwerpunktmäßig wird auf den Zusammenhang von Controllern, Views und der zugehörigen

Mehr

Nathan Burgener. Design by Contract. Modul SWE

Nathan Burgener. Design by Contract. Modul SWE NathanBurgener DesignbyContract ModulSWE NathanBurgener Inhaltsverzeichnis 1 WasistDesignbyContract...3 1.1 Überblick...3 1.2 DesignbyContractmitMethoden...4 1.3 DesignbyContractmitKlassen...5 1.4 Vererbung...6

Mehr

Multimedia im Netz Wintersemester 2012/13

Multimedia im Netz Wintersemester 2012/13 Multimedia im Netz Wintersemester 2012/13 Übung 10 Ludwig-Maximilians-Universität München Multimedia im Netz WS 2012/13 - Übung 10-1 Lösung zu Übungsblatt 08 Ludwig-Maximilians-Universität München Multimedia

Mehr

JSP und Servlet Programmierung

JSP und Servlet Programmierung Seminarunterlage Version: 5.02 Copyright Version 5.02 vom 1. März 2013 Dieses Dokument wird durch die veröffentlicht. Copyright. Alle Rechte vorbehalten. Alle Produkt- und Dienstleistungs-Bezeichnungen

Mehr

OWASP Stammtisch München Sep 2014 XSS und andere Sicherheitslücken aus der Perspektive des Programmcodes

OWASP Stammtisch München Sep 2014 XSS und andere Sicherheitslücken aus der Perspektive des Programmcodes OWASP Stammtisch München Sep 2014 XSS und andere Sicherheitslücken aus der Perspektive des Programmcodes 1 XSS: Cross-Site Scripting 1.) Es gelangen Daten in den Web-Browser, die Steuerungsinformationen

Mehr

Die Installation des GeoShop Redirector für IIS (Internet Information Server, Version 4.0, 5.0 und 6.0) umfasst folgende Teilschritte:

Die Installation des GeoShop Redirector für IIS (Internet Information Server, Version 4.0, 5.0 und 6.0) umfasst folgende Teilschritte: Installation des GeoShop Redirector für IIS (Stand 24.8.2007) ============================================================= 0 Überblick ----------- Die Installation des GeoShop Redirector für IIS (Internet

Mehr

Facebook I-Frame Tabs mit Papoo Plugin erstellen und verwalten

Facebook I-Frame Tabs mit Papoo Plugin erstellen und verwalten Facebook I-Frame Tabs mit Papoo Plugin erstellen und verwalten Seit Anfang Juni 2012 hat Facebook die Static FBML Reiter deaktiviert, so wird es relativ schwierig für Firmenseiten eigene Impressumsreiter

Mehr

Architektur des agimatec-validation Frameworks

Architektur des agimatec-validation Frameworks Development : Implementierung Validierungskonzept (Dokumentation) This page last changed on Apr 03, 2008 by roman.stumm. Architektur des agimatec-validation Frameworks Generierung der Metainformationen

Mehr

Design Patterns 2. Model-View-Controller in der Praxis

Design Patterns 2. Model-View-Controller in der Praxis Design Patterns 2 Model-View-Controller in der Praxis Design Patterns Oft Schablonen für eine Klassenstruktur... aber nicht immer! Dahinterliegende Konzepte wichtiger als wörtliche Umsetzung Pattern werden

Mehr

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick...2 2.Parameterübergabe...

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick...2 2.Parameterübergabe... php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick...2 2.Parameterübergabe...7 3.Zugriff auf mysql Daten...11 Verteilte Systeme: php.sxw Prof.

Mehr

SANDBOXIE konfigurieren

SANDBOXIE konfigurieren SANDBOXIE konfigurieren für Webbrowser und E-Mail-Programme Dies ist eine kurze Anleitung für die grundlegenden folgender Programme: Webbrowser: Internet Explorer, Mozilla Firefox und Opera E-Mail-Programme:

Mehr

Lokale Installation von DotNetNuke 4 ohne IIS

Lokale Installation von DotNetNuke 4 ohne IIS Lokale Installation von DotNetNuke 4 ohne IIS ITM GmbH Wankelstr. 14 70563 Stuttgart http://www.itm-consulting.de Benjamin Hermann hermann@itm-consulting.de 12.12.2006 Agenda Benötigte Komponenten Installation

Mehr

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge Ab der Version forma 5.5 handelt es sich bei den Orientierungshilfen der Architekten-/Objektplanerverträge nicht

Mehr

Benutzerhandbuch. Leitfaden zur Benutzung der Anwendung für sicheren Dateitransfer.

Benutzerhandbuch. Leitfaden zur Benutzung der Anwendung für sicheren Dateitransfer. Benutzerhandbuch Leitfaden zur Benutzung der Anwendung für sicheren Dateitransfer. 1 Startseite Wenn Sie die Anwendung starten, können Sie zwischen zwei Möglichkeiten wählen 1) Sie können eine Datei für

Mehr

Anleitung BFV-Widget-Generator

Anleitung BFV-Widget-Generator Anleitung BFV-Widget-Generator Seite 1 von 6 Seit dem 1. Oktober 2014 hat der Bayerische Fußball-Verband e.v. neue Widgets und einen neuen Baukasten zur Erstellung dieser Widgets veröffentlicht. Im Folgenden

Mehr

Anwendungsprotokolle: HTTP, POP, SMTP

Anwendungsprotokolle: HTTP, POP, SMTP Anwendungsprotokolle: HTTP, POP, SMTP TCP? UDP? Socket? eingesetzt, um Webseiten zu übertragen Zustandslos Nutzt TCP Client schickt Anfrage ( HTTP-Request ) an Server, Server schickt daraufhin Antwort

Mehr

EJBs und Sicherheit. Vorlesung: Applikationsserver. Prof. Dr. Ch. Reich rch@fh furtwangen.de http://www.informatik.fh furtwangen.

EJBs und Sicherheit. Vorlesung: Applikationsserver. Prof. Dr. Ch. Reich rch@fh furtwangen.de http://www.informatik.fh furtwangen. EJBs und Sicherheit Vorlesung: Applikationsserver Prof. Dr. Ch. Reich rch@fh furtwangen.de http://www.informatik.fh furtwangen.de/~reich Deklarative Sicherheit Zugriffsrechte auf die EJB-Methoden werden

Mehr

Installation von NetBeans inkl. Glassfish Anwendungs-Server

Installation von NetBeans inkl. Glassfish Anwendungs-Server Installation von NetBeans inkl. Glassfish Anwendungs-Server Diese Anleitung führt Sie Schritt für Schritt durch die Einrichtung der Entwicklungsumgebung NetBeans, angefangen beim Download der benötigten

Mehr

Datenbanksysteme SS 2007

Datenbanksysteme SS 2007 Datenbanksysteme SS 2007 Frank Köster (Oliver Vornberger) Institut für Informatik Universität Osnabrück Kapitel 9c: Datenbankapplikationen Architektur einer Web-Applikation mit Servlets, JSPs und JavaBeans

Mehr

Anleitung zum Login. über die Mediteam- Homepage und zur Pflege von Praxisnachrichten

Anleitung zum Login. über die Mediteam- Homepage und zur Pflege von Praxisnachrichten Anleitung zum Login über die Mediteam- Homepage und zur Pflege von Praxisnachrichten Stand: 18.Dezember 2013 1. Was ist der Mediteam-Login? Alle Mediteam-Mitglieder können kostenfrei einen Login beantragen.

Mehr

Installation des GeoShop Redirector für Apache (Stand 14.8.2007) ================================================================

Installation des GeoShop Redirector für Apache (Stand 14.8.2007) ================================================================ Installation des GeoShop Redirector für Apache (Stand 14.8.2007) ================================================================ 0 Überblick ----------- Die Installation des GeoShop Redirector im Apache

Mehr

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

Enterprise Java Beans Einführung

Enterprise Java Beans Einführung Enterprise Java Beans Einführung Vorlesung 8 Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht EJBs im JEE Umfeld Verschiedene Typen von EJBs Von der Javaklasse

Mehr

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7 Einrichtung des Cisco VPN Clients (IPSEC) in Windows7 Diese Verbindung muss einmalig eingerichtet werden und wird benötigt, um den Zugriff vom privaten Rechner oder der Workstation im Home Office über

Mehr

KeePass Anleitung. 1.0Allgemeine Informationen zu Keepass. KeePass unter Windows7

KeePass Anleitung. 1.0Allgemeine Informationen zu Keepass. KeePass unter Windows7 KeePass Anleitung 1.0Allgemeine Informationen zu Keepass KeePass unter Windows7 2.0 Installation unter Windows7 2.1 Erstellen einer neuen Datenbank 2.2 Speichern von Benutzernamen und Passwörtern 2.3 Sprache

Mehr

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Suche schlecht beschriftete Bilder mit Eigenen Abfragen Suche schlecht beschriftete Bilder mit Eigenen Abfragen Ist die Bilderdatenbank über einen längeren Zeitraum in Benutzung, so steigt die Wahrscheinlichkeit für schlecht beschriftete Bilder 1. Insbesondere

Mehr

Übung: Verwendung von Java-Threads

Übung: Verwendung von Java-Threads Übung: Verwendung von Java-Threads Ziel der Übung: Diese Übung dient dazu, den Umgang mit Threads in der Programmiersprache Java kennenzulernen. Ein einfaches Java-Programm, das Threads nutzt, soll zum

Mehr

Cookies. Krishna Tateneni Jost Schenck Übersetzer: Jürgen Nagel

Cookies. Krishna Tateneni Jost Schenck Übersetzer: Jürgen Nagel Krishna Tateneni Jost Schenck Übersetzer: Jürgen Nagel 2 Inhaltsverzeichnis 1 Cookies 4 1.1 Regelungen......................................... 4 1.2 Verwaltung..........................................

Mehr

Erste Erfahrungen mit NSASJ anhand der OmnivoBase Portierung. September 2013

Erste Erfahrungen mit NSASJ anhand der OmnivoBase Portierung. September 2013 GTUG Java Arbeitskreis Erste Erfahrungen mit NSASJ anhand der OmnivoBase Portierung September 2013 Jürgen Depping CommitWork GmbH Seite 1 Info@CommitWork.de www.commitwork.de Agenda Was ist OmnivoBase?

Mehr

Anwendung eines Enterprise Java Beans

Anwendung eines Enterprise Java Beans Anwendung eines Enterprise Java Beans EJB Server EJB Container Remote Interface Home Interface EJB Object Der EJB Container kümmert sich um die Kommunikation des Beans mit anderen Komponenten, wobei er

Mehr

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten Was sind Berechtigungen? Unter Berechtigungen werden ganz allgemein die Zugriffsrechte auf Dateien und Verzeichnisse (Ordner) verstanden.

Mehr

Seite - 1 - 8. Out-Of-Band-Authentifizierung (OOBA) 8.1 Einleitung

Seite - 1 - 8. Out-Of-Band-Authentifizierung (OOBA) 8.1 Einleitung 8. Out-Of-Band-Authentifizierung (OOBA) 8.1 Einleitung Sie konfigurieren den OOBA, um die Webzugriffe mit HTTP ins Internet zu kontrollieren. Das Aufrufen von Webseiten ist nur authentifizierten Benutzern

Mehr

Ihr Benutzerhandbuch für das IntelliWebs - Redaktionssystem

Ihr Benutzerhandbuch für das IntelliWebs - Redaktionssystem Ihr Benutzerhandbuch für das IntelliWebs - Redaktionssystem Der IntelliWebs-Mailadministrator ermöglicht Ihnen Mailadressen ihrer Domain selbst zu verwalten. Haben Sie noch Fragen zum IntelliWebs Redaktionssystem?

Mehr

Application Frameworks

Application Frameworks Seminar Software Engineering 1 Grundlagen Agenda Spring Framework Dependency Injection Aspektorientierte Programmierung Datenbankanbindung Modell View Controller Sicherheit Spring vs. Java EE Zusammenfassung

Mehr

Anleitungen zum KMG-Email-Konto

Anleitungen zum KMG-Email-Konto In dieser Anleitung erfahren Sie, wie Sie mit einem Browser (Firefox etc.) auf das Email-Konto zugreifen; Ihr Kennwort ändern; eine Weiterleitung zu einer privaten Email-Adresse einrichten; Ihr Email-Konto

Mehr

Web 2.0 Software-Architekturen

Web 2.0 Software-Architekturen Web 2.0 Software-Architekturen Servlets als Controller einer MVC Web Architektur Prof. Dr. Nikolaus Wulff HTTP und HTML Das HyperText TransferProtokoll (HTTP) beschreibt eine einfache verbindungslose Kommunikation,

Mehr

ID VisitControl. Dokumentation Administration. 2015 Equitania Software GmbH cmc Gruppe Seite 1

ID VisitControl. Dokumentation Administration. 2015 Equitania Software GmbH cmc Gruppe Seite 1 ID VisitControl Dokumentation Administration 2015 Equitania Software GmbH cmc Gruppe Seite 1 Inhalt 1. Anmeldung... 3 2. Benutzer anlegen oder bearbeiten... 4 2.1. Benutzer aus LDAP Anbindung importieren/updaten...

Mehr

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können. Excel-Schnittstelle Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können. Voraussetzung: Microsoft Office Excel ab Version 2000 Zum verwendeten Beispiel:

Mehr

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser Seite 1 von 14 Cookie-Einstellungen verschiedener Browser Cookie-Einstellungen verschiedener Browser, 7. Dezember 2015 Inhaltsverzeichnis 1.Aktivierung von Cookies... 3 2.Cookies... 3 2.1.Wofu r braucht

Mehr

Artikel Schnittstelle über CSV

Artikel Schnittstelle über CSV Artikel Schnittstelle über CSV Sie können Artikeldaten aus Ihrem EDV System in das NCFOX importieren, dies geschieht durch eine CSV Schnittstelle. Dies hat mehrere Vorteile: Zeitersparnis, die Karteikarte

Mehr

robotron*e count robotron*e sales robotron*e collect Anmeldung Webkomponente Anwenderdokumentation Version: 2.0 Stand: 28.05.2014

robotron*e count robotron*e sales robotron*e collect Anmeldung Webkomponente Anwenderdokumentation Version: 2.0 Stand: 28.05.2014 robotron*e count robotron*e sales robotron*e collect Anwenderdokumentation Version: 2.0 Stand: 28.05.2014 Seite 2 von 5 Alle Rechte dieser Dokumentation unterliegen dem deutschen Urheberrecht. Die Vervielfältigung,

Mehr

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen.

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen. Datenbank-Verschlüsselung mit DbDefence und Webanwendungen. In diesem Artikel werden wir Ihnen zeigen, wie Sie eine Datenbank verschlüsseln können, um den Zugriff einzuschränken, aber trotzdem noch eine

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Web-Anwendungen mit JavaServer Faces

Web-Anwendungen mit JavaServer Faces Web-Anwendungen mit JavaServer Faces Seminarunterlage Version: 3.06 Version 3.06 vom 1. September 2016 Dieses Dokument wird durch die veröffentlicht.. Alle Rechte vorbehalten. Alle Produkt- und Dienstleistungs-Bezeichnungen

Mehr

Praktikum Datenbanksysteme. Ho Ngoc Duc IFIS Universität zu Lübeck 28.05.2003

Praktikum Datenbanksysteme. Ho Ngoc Duc IFIS Universität zu Lübeck 28.05.2003 Praktikum Datenbanksysteme Ho Ngoc Duc IFIS Universität zu Lübeck 28.05.2003 Nullwerte und Primitive Typen Wenn parent==null, was wird in der Datenbank gespeichert? Wenn man aus der DB liest, wie kann

Mehr

Software Engineering Klassendiagramme Assoziationen

Software Engineering Klassendiagramme Assoziationen Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen

Mehr

Sophia Business Leitfaden zur Administration

Sophia Business Leitfaden zur Administration Sophia Business Leitfaden zur Administration 1. Anmelden... 2 2. Zugangscode neu anlegen... 3 3. Zugangscodes verwalten... 5 4. Ergebnisse anzeigen... 6 5. Installation und technische Hinweise... 7 a.

Mehr

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken. Seite erstellen Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken. Es öffnet sich die Eingabe Seite um eine neue Seite zu erstellen. Seiten Titel festlegen Den neuen

Mehr

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, 5.7.2007 Java Forum Stuttgart 2007

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, 5.7.2007 Java Forum Stuttgart 2007 Eclipse Equinox als Basis für Smart Client Anwendungen Christian Campo, compeople AG, 5.7.2007 Java Forum Stuttgart 2007 Übersicht Definition / Architektur Smart Client Smart Client mit RCP / Equinox Gesamtfazit

Mehr

Übungen zur Softwaretechnik

Übungen zur Softwaretechnik Technische Universität München Fakultät für Informatik Lehrstuhl IV: Software & Systems Engineering Markus Pister, Dr. Bernhard Rumpe WS 2002/2003 Lösungsblatt 9 17. Dezember 2002 www4.in.tum.de/~rumpe/se

Mehr

Schlussbewertung FB VI SOFTWAREPROJEKT II WS 09/10 TEAM. Alexander Kalden Dominik Eckelmann Marcel Pierry Julian Heise Besha Taher

Schlussbewertung FB VI SOFTWAREPROJEKT II WS 09/10 TEAM. Alexander Kalden Dominik Eckelmann Marcel Pierry Julian Heise Besha Taher Schlussbewertung FB VI SOFTWAREPROJEKT II WS 09/10 TEAM Alexander Kalden Dominik Eckelmann Marcel Pierry Julian Heise Besha Taher 729631 745097 736477 745011 741297 Inhalt Schlussbewertung... 3 Bewertung

Mehr

Workshop Java Webentwicklung Tapestry. Ulrich Stärk

Workshop Java Webentwicklung Tapestry. Ulrich Stärk Workshop Java Webentwicklung Tapestry Ulrich Stärk Webanwendungen Antwort im Browser des Benutzers sichtbar Anfrage geht ein Antwort rendern Anfrage an passenden Code weiterleiten 2 Servlets Servlet wird

Mehr

Ein Ausflug zu ACCESS

Ein Ausflug zu ACCESS Ein Ausflug zu ACCESS Die folgenden Folien zeigen beispielhaft, wie man sein DB- Wissen auf ACCESS übertragen kann betrachtet wird ACCESS 2002, da gerade im Bereich der Nutzung von SQL hier einiges nachgearbeitet

Mehr

Java Script für die Nutzung unseres Online-Bestellsystems

Java Script für die Nutzung unseres Online-Bestellsystems Es erreichen uns immer wieder Anfragen bzgl. Java Script in Bezug auf unser Online-Bestell-System und unser Homepage. Mit dieser Anleitung möchten wir Ihnen einige Informationen, und Erklärungen geben,

Mehr

Bedienungsanleitung für den SecureCourier

Bedienungsanleitung für den SecureCourier Bedienungsanleitung für den SecureCourier Wo kann ich den SecureCourier nach der Installation auf meinem Computer finden? Den SecureCourier finden Sie dort, wo Sie mit Dateien umgehen und arbeiten. Bei

Mehr

Flowy Apps erzählt eine kurze Geschichte über REDS. Remotely Encrypted Distributed Storage

Flowy Apps erzählt eine kurze Geschichte über REDS. Remotely Encrypted Distributed Storage Flowy Apps erzählt eine kurze Geschichte über REDS Remotely Encrypted Distributed Storage Heute wird alles im Internet, auch bekannt als die Cloud, gemacht. Web-Entwickler platzieren ihre Webapps in der

Mehr

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Anmeldung http://www.ihredomain.de/wp-admin Dashboard Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Das Dashboard gibt Ihnen eine kurze Übersicht, z.b. Anzahl der Beiträge,

Mehr

Struts 2 Das Imperium schlägt zurück?

Struts 2 Das Imperium schlägt zurück? Struts 2 Das Imperium schlägt zurück? Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Tobias Kieninger www.oio.de info@oio.de Java, XML und Open Source seit 1998 ) Software

Mehr

Installation des edu- sharing Plug- Ins für Moodle

Installation des edu- sharing Plug- Ins für Moodle Installation des edu- sharing Plug- Ins für Moodle [edu-sharing Team] [Dieses Dokument beschreibt die Installation und Konfiguration des edu-sharing Plug-Ins für das LMS Moodle.] edu- sharing / metaventis

Mehr

Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG

Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG Um mit IOS2000/DIALOG arbeiten zu können, benötigen Sie einen Webbrowser. Zurzeit unterstützen wir ausschließlich

Mehr

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach - Projekt Personalverwaltung Erstellt von Inhaltsverzeichnis 1Planung...3 1.1Datenbankstruktur...3 1.2Klassenkonzept...4 2Realisierung...5 2.1Verwendete Techniken...5 2.2Vorgehensweise...5 2.3Probleme...6

Mehr