WebDev Flashcards

1
Q

Wozu verwendet man Umgebungsvariablen?

A

Umgebungsvariablen können u.a. verwendet werden, um in der aktiven Kommandozeile Standard-Pfade zu setzen. Umgebungsvariablen setzen sich aus einem Bezeichner sowie dessen Wert zusammen; normalerweise einer Zeichenkette

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Erklären Sie, weshalb Sie Linux-Befehle ohne Pfadangabe auf einer aktiven Übungsserver-Kommandozeile aufrufen können. Gehen Sie dabei auf die PATH-Umgebungsvariable ein

A

Linux-Befehle sind ausführbare Dateien bzw. Skripte, die ohne Angabe
des kompletten Speicherpfades aufgerufen werden können. Die Umgebungsvariable $PATH vereinfacht diesen Prozess.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Wie können Sie in einer aktiven Übungsserver-Kommandozeile den Inhalt von
Dateien ausgeben lassen ohne diese zu verändern?

A

Lösung: Die Linux-Befehle cat (concatenate) und tail können dazu verwendet
werden Dateiinhalte anzuzeigen, ohne den Inhalt der Dateien zu verändern

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Wie können Sie Dateiinhalte

verändern?

A

Veränderungen an Dateien sind über Kommandozeilen-Texteditoren wie vim oder
nano direkt auf dem möglich. Alternativ dazu können Dateien über SFTP vom
Übungsserver auf einen lokalen Rechner heruntergeladen, dort bearbeitet und anschließend zurück auf den Übungsserver übertragen werde

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Wie können Sie in einer aktiven Übungsserver-Kommandozeile Verzeichnisse und
Dateien umbenennen, verschieben und löschen?

A

Der Linux-Befehl mv (move) kann sowohl für das
Umbenennen als auch für das Verschieben von Dateisystem-Objekten (Ordner und
Dateien) verwendet werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Erklären Sie das Dateirechtesystem auf dem Übungsserver.

A

Jeder Ordner und jede Datei auf dem Übungsserver gehört einem Besitzer und ist einer Gruppe zugeordnet. Daraus resultierend können für drei logisch
getrennte Parteien Rechte vergeben werden: Eine für den Besitzer des Objekts,
eine für eine dem Objekt zugeordnete Gruppe und eine für alle anderen. Jeder
Partei können Lese- (read - r), Schreib- (write - w) und Ausführrechte (execute -
x) zugeordnet werden

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Erklären Sie, wie Sie die Rechte von Dateien und Verzeichnissen auf dem Übungsserver anpassen können

A

: Zum Ändern der Dateirechte kann der Befehl chmod
(change mode) verwendet werden. Dabei können die z.B. über die eindeutig berechenbare Zahl angegeben werden und ist das Dateisystem-Objekt,
welches die neuen Rechte erhalten soll

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Erklären Sie, was ein Prozess ist und wie Sie auf dem Übungsserver alle aktiven
Prozesse herausfinden können. Wie können Sie Ihnen zugeordnete Prozesse identifizieren und gezielt beenden?

A

Ein Prozess ist laut dem Duden Informatik „eine Instanz eines Programmes das sich in Ausführung befindet.“
Der Befehl top startet ein Programm, das alle Prozesse auflistet, die zurzeit auf
dem Computer betrieben werden.
Hierfür kann man im top-Programm
die taste ’k’ betätigen und anfolgend die PID eingeben. Existiert der Prozess noch
wird er dann „gekillt

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Wie können Sie herausfinden, ob ein Prozess auf dem Übungsserver an einen Port
gebunden ist / auf diesem lauscht?

A

Das Netzwerkdiagnose-Programm netstat (Network Statistics) bietet
die Möglichkeit, Informationen über den Status von Netzwerkschnittstellen abzufragen. Über die Optionen -tulpen wird aufgelistet welche von anderen Rechnern
aufrufbare Dienste an welchen Port gebunden sind

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Wie können Sie Archive im .tar.gz- bzw. .tar.bz2-Format auf dem Übungsserver
erstellen und entpacken?

A

Das Programm tar (tape archiver ) kann genutzt werden um Archive auf
Linux-Systemen zu erstellen und zu entpacken

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Was sind symbolische Links (Symlinks)? Wie können Sie auf dem Übungsserver
symbolische Link anlegen?

A

Symbolische Links („Symlinks“, „Softlinks“) funktionieren ähnlich wie die
HTML-Links auf Webseiten und verweisen auf andere Dateien/Verzeichnisse.
Ein symbolischer Link kann mittels ln -s angelegt
werden

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Wie können Sie Dateien von FTP- und HTTP-Servern auf den Übungsserver herunterladen?

A

Mit Hilfe des Programms wget kann man auf der Kommandozeile

Dateien von FTP- und HTTP-Servern herunterladen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Welche Aufgabe erfüllt der Apache Webserver im WorldWideWeb?

A

Der Apache Webserver ist ein Programm für die zentrale Bereitstellung
von Dokumenten in Rechnernetzen. Er implementiert das Hypertext Transfer Protokoll als Grundlage für die Kommunikation mit den Clients.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Wo können Sie einen installierten Apache konfigurieren?

A

m Verzeichnis conf des Installationsverzeichnis gibt es die Datei httpd.conf.
Diese ist für Konfigurationen zuständig. Oftmals werden die Konfigurationsparameter jedoch zur besseren Übersichtlichkeit auf mehrere Dateien aufgeteilt. Diese
können dann über den Include-Befehl in die httpd.conf eingebunden werden

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Was ist eine Direktive?

A

Eine Direktive ist eine Verhaltensanweisung, die dem Apache in der
httpd.conf gegeben werden kann.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Wie können Sie Direktiven so zusammenfassen, dass sie nur für bestimmte Ordner
oder URLs gelten?

A

und werden dazu verwendet,
eine Gruppe von Direktiven zusammenzufassen, die nur für das genannte Verzeichnis und dessen Unterverzeichnisse gelten. [Übernommen von apache.org]
Analog dazu gibt es für URLs die Direktive … . [Details siehe apache.org]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Was bestimmt die Listen-Direktive?

A

Die Direktive Listen weist den Apache an, nur an
den angegebenen IP-Adressen oder Ports zu lauschen. Standardmäßig antwortet
er auf alle Anfragen an allen IP-Interfaces

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Was bestimmt die ServerRoot-Direktive?

A

Die Direktive ServerRoot bestimmt das Verzeichnis, in
dem der Server installiert ist. Üblicherweise enthält es die Unterverzeichnisse conf/
und logs/. Relative Pfadangaben anderer Direktiven (wie z.B. Include oder LoadModule) werden relativ zu diesem Verzeichnis betrachtet. [Übernommen von apache.org]
Das Installationsverzeichnis des Servers kann bei der Installation im configureSchritt über die Option –prefix= festgelegt werden

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Was bestimmt die DocumentRoot-Direktive?

A

Die Direktive DocumentRoot setzt das Verzeichnis, von
dem aus der Apache Dateien ausliefert. Sofern nicht eine Direktive wie Alias greift,
hängt der Apache Pfade aus der angeforderten URL an das Wurzelverzeichnis
an, um den Pfad zum Dokument zu bilden. Wenn das Verzeichnis nicht absolut
angegeben ist, wird es relativ zu ServerRoot betrachtet.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Was bestimmt die ErrorDocument-Direktive?

A

Über die Direktive ErrorDocument ist es
möglich, den Apache abhängig vom HTTP-Statuscode eigene Fehlermeldungen ausgeben zu lassen. kann dabei eine Textmeldung,
eine Umleitung auf einen lokalen URL-Pfad oder eine Umleitung auf eine externe
URL sein

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Was ist ein Apache-Modul?

A

Der Quellcode des Apache Webserver ist modular aufgebaut. Dementsprechend können einzelne Funktionalitäten über das Hinzufügen von Modulen
im Apache eingebunden oder entsprechend auch weggelassen werden. Je hinzugefügtem Modul wird die Installation des Apache größer, langsamer und potentiell
unsicher (aufgrund von mehr potentiellen Sicherheits-Bugs). Dementsprechend ist
es für den Systemadministrator unerlässlich, sich gut zu überlegen, welche Module
tatsächlich benötigt werden

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Erklären Sie die Vor- und Nachteile, sowie die Unterschiede von statischen und
dynamischen Modulen für den Apache Webserver

A

Da statische Module mit den Sourcen des Apache in dessen ausführbaren
Maschinencode kompiliert werden, können Sie vom Apache direkt verwendet werden und sind daher performanter. Bei Änderungen an einem statischen Modul ist
es daher jedoch zwingend erforderlich den gesamten Apache Sourcecode inklusive
des aktualisierten Moduls neu zu kompilieren und anschließend zu installieren.
Dynamische Module werden unabhängig von den Apache Sourcen kompiliert und
installiert. Daher ist es nicht notwendig den Apache neu zu kompilieren, wenn
sich der Quellcode eines eingebundenen dynamischen Moduls verändert. Wenn der
Apache die Funktionen eines dynamischen Moduls verwenden möchte, muss er
es beim Start laden. Dies verlangsamt den Start des Apache um circa 20%

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

. Wie können Sie dem Apache statische Module hinzufügen, wo dynamische? Wie
können Sie herausfinden, welche dynamischen Module in einem Apache geladen
sind und welche statischen?

A

Während der konfiguration für statische.
Dynamische Module werden während der Laufzeit
des Apache Webserver nachgeladen und können deshalb nach erfolgter Installation
in der httpd.conf über die Direktive „LoadModule“ eingebunden werden.
Dynamisch und statisch geladene Module lassen sich über den Befehl /bin/httpd -M auflisten. Hinter dem Name eines Moduls ist jeweils
vermerkt, ob das Modul statisch (static) oder dynamisch (shared) geladen wurde

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Welche Funktionen haben die Module mod_status und mod_info?

A

mod_status liefert Informationen über die Serveraktivität und -performance.
mod_info liefert einen Überblick über die Serverkonfiguration.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Was versteht man unter Modulen von Drittanbietern?
Module von Drittanbietern sind Module für den Apache Webserver, die nicht von der Apache Server Foundation (ASF) ausgeliefert werden (z.B. mod_php, mod_perl)
26
Was versteht man unter einer bedingten Direktive? Geben Sie ein Beispiel an
Eine bedingte Direktive zeichnet sich dadurch aus, dass Sie nur ausgeführt wird, wenn eine Bedingung eingetreten ist. Bedingte Direktiven können über das Schlüsselwort If erkannt werden, z.B. oder . Alle Direktiven, die von einer bedingten Direktive umschlossen sind, werden nur ausgeführt, wenn deren Bedingung erfüllt ist. Beispiel: Die Direktive DirectoryIndex index.html wird nur ausgeführt, wenn das Modul dir_module geladen ist: # DirectoryIndex: sets the file that Apache will serve if a directory # is requested. DirectoryIndex index.html
27
. Erklären Sie zwei simple Techniken, mit denen Sie Verzeichnisse eines Apache Webservers vor unberechtigtem Zugriff schützen können
Zugriff anhand von IP-Netzen oder NutzernamePasswort-Abfrage zu beschränken. Hierfür kommen die Module mod_authz_host und mod_auth_basic in Zusammenspiel mit mod_authn_file zum Einsatz Über die Direktive Require können Voraussetzungen für den Zugriff definiert werden. Beispielsweise kann ein notwendiger IP-Adressenraum über Require ip ip.adresse (z.B. Require ip 134.2.) definiert werden. er Nutzernamen-Passwort-Schutz erfolgt über die Direktive AuthType Basic. Diese ermöglicht es über die Direktiven AuthBasicProvider file und AuthUserFile dateipfad eine Datei einzubinden, in der die Zuordnung zwischen Nutzer und Passwort hinterlegt ist
28
Nennen Sie Vorteile des hybriden Laufzeitmodells für den Apache Webserve
Systemgeschwindigkeit Aufgrund der Zugriffsverarbeitung durch die Threads, kann die Bearbeitung mehrerer Zugriffe parallelisiert werden Systemsicherheit Da ausschließlich der Hauptprozess unter der Rootkennung betrieben wird und die Kindprozesse keine Rootrechte benötigten, ist das Gesamtsystem sowie das Betriebssystem vor Sicherheitslücken in den Kindprozessen geschützt Systemstabilität Das Gesamtsystem läuft stabil, da der Ausfall / Absturz eines Threads oder Kindprozesses die anderen Threads / Kindprozesse sowie den Hauptprozess nicht beeinflusst Optimierbarkeit Durch das mpm_worker-Modul kann die Apache Installation für die verfügbaren Hardware-Ressourcen optimiert werden. Dies geschieht beispielsweise, indem die Threads-pro-Kindprozess-Anzahl an die verfügbaren Prozessoren / Kerne eingestellt werden.
29
Welche Funktion hat das Apache-Modul mod_rewrite?
mod_rewrite ist ein Modul zur „URL-Manipulation“. Mit Hilfe des Moduls kann eine URL intern auf eine andere URL abgebildet werden. Dieses „Rewriting“ der URL erfolgt serverseitig und dadurch unbemerkt für den aufrufenden Client.
30
Welche Funktion haben die Direktiven RewriteCond und RewriteRule des ApacheModuls mod_rewrite?
Die Direktive RewriteRule Pattern Substitution [flags] definiert das „Umschreiben“. Pattern ist ein Muster, das die aufgerufene URL angibt, Substitution die URL, deren Inhalt geliefert werden soll. Über die Direktive RewriteCond TestString CondPattern [flags] kann festgelegt werden, dass die nachfolgende RewriteRule nur dann ausgeführt wird, wenn TestString auf CondPattern passt
31
Wie können Sie in einer RewriteCond auf ein HTTP-Header-Feld zugreifen?
In einer RewriteCond lässt sich mittels %{HTTP:header} auf das HTTPHeader-Feld header eines HTTP-Requests zugreifen
32
Wie können Sie in einer RewriteRule einen HTTP-Redirect (HTTP-Weiterleitung) anstatt eines internen Umschreibens der URL realisieren?
Ein HTTP-Redirect lässt sich durch die Angabe des Flags [R] realisieren. Bei einem HTTP-Redirect wird der Client zu einer anderen URL weitergeleitet. D.h. ein Benutzer sieht im Browser, dass er weitergeleitet wird!
33
Wie können Sie PHP in den Apache Webserver einbinden?
Um PHP in den Apache Webserver einbinden zu können muss das Modul mod_php installiert und dynamisch in den Apache Webserver eingebunden werden. Zudem muss dem Apache angegeben werden, welche Dateien als PHP-Skripte behandelt werden sollen; beispielsweise mittels
34
Welche Funktion hat die Datei php.ini?
Die Datei php.ini ist die Konfigurationsdatei von PHP. In ihr können alle in PHP möglichen Einstellungen (wiederum als Direktiven bezeichnet) angegeben werden. Beim Start von PHP wird diese eingelesen und die PHP-Umgebung nach deren Einträgen gesetzt
35
Welche Funktionen haben die folgenden Direktiven der php.ini: display_errors, ignore_user_abort, include_path und upload_max_filesize.
display_errors: Gibt an, ob bei der Skript-Ausführung auftretende Fehlermeldungen an den Client ausgeliefert werden. Defaultmäßig ist dies eingeschaltet. ignore_user_abort: Gibt an, ob die Skript-Ausführung fortgeführt werden soll, wenn der Client die Verbindung beendet hat. Defaultmäßig ist dies ausgeschaltet. include_path: Gibt an, in welchen Verzeichnissen nach einzubindenden Dateien gesucht werden soll. Die Angabe ist ähnlich zu Umgebungsvariablen: z.B. include_path=¨ .:/php/includes¨ upload_max_filesize: Gibt die maximale Dateigröße an, die über ein PHPSkript auf den Server geladen werden darf. Problematisch an diesem Wert ist, dass er Client-seitig nicht überprüft wird. Daher werden die Daten zunächst auf den Server geladen und sobald die Grenze erreicht ist beendet das Skript den Upload
36
Mit welcher PHP-Erweiterung können Sie von PHP aus auf MySQL-Datenbanken zugreifen?
In den Übungen setzen wir die PHP-Erweiterung mysqli ein (MySQL Improved Extension). Es gibt jedoch auch die Möglichkeit mittels PDO_MYSQL auf MySQL-Datenbanken zuzugreifen (für die Übungen spielt diese Möglichkeit keine Rolle!)
37
Wann bietet sich die Verwendung des nginx-Webservers im Vergleich zum Apache Webserver an?
Der nginx ist darauf optimiert, statisch vorgehaltene Inhalte für eine sehr große Nutzerzahl bereitzustellen. Im Gegensatz zum Apache kann er somit in sehr kurzer Zeit eine hohe Last bearbeiten. Der Nachteil des nginx gegenüber dem Apache ist der geringere Funktionsumfang
38
. Was versteht man unter einem hybriden Webservermodell?
Beim hybriden Modell (siehe Abbildung 2) werden die Vorteile von Apache Webserver und nginx-Webserver miteinander verknüpft. Dabei werden alle Anfragen zunächst an den nginx gestellt, welcher statische Inhalte mit höchster Performance abrufbar vorhält und alle dynamischen Anfragen, die beispielsweise mit PHP beantwortet werden, an den Apache Webserver weitergeleitet, der diese bearbeitet. Auf diese Weise können auch statische Abzüge der dynamisch erzeugten Antworten auf dem nginx nach deren erster Berechnung abgelegt werden; er fungiert in diesem Fall als reverse Proxy.
39
Wie können Sie den nginx konfigurieren?
Analog zur httpd.conf des Apache besitzt auch der nginx eine zentrale Konfigurationsdatei namens nginx.conf
40
Wie können Sie den nginx als Reverse-Proxy verwenden und Caching aktivieren?
Beide Funktionalitäten lassen sich mit dem nginx-Modul ngx_http_proxy_module realisieren. Wichtige Direktiven sind proxy_pass für den Reverse-Proxy sowie proxy_cache_path, proxy_cache und proxy_cache_valid für das Caching
41
Was sind ServerSideIncludes (SSI)?
: ServerSideIncludes (SSI) sind eine Erweiterung für dem Apache Webserver, die es ermöglicht, kleinere Skriptbefehle direkt vom Apache Webserver und ohne zusätzliche Skriptsprachen ausführen zu lassen. SSI-Befehle werden direkt in die statische HTML-Beschreibung einer Webseite eingefügt und beim Aufruf der Seite vom Apache Webserver ausgeführt, bevor dieser die HTTP-Response erzeugt.
42
Wie ist ein SSI-Befehl aufgebaut und weshalb ist dies so?
SSI-Befehle sind wie HTML-Kommentare aufgebaut. Sie beginnen mit dem HTML-Kommentar . Dieser Ansatz wurde gewählt, um die Darstellung von SSI-Befehlen auf der Webseite zu verhindern, wenn der Apache Webserver kein SSI aktiviert hat.
43
Nennen Sie Beispiele für den praktischen Nutzen von SSI.
SSI lassen sich beispielsweise für das Einbinden von sich häufig ändernden Dokumententeilen auf mehrere HTML-Beschreibungen wie Footer und Header oder der Angabe des letzten Änderungsdatums der aufgerufenen Datei (Last Modified) einsetzen
44
Welche Dateiendung wird für Dateien mit enthaltenem SSI-Code verwendet?
Die Dateiendung für SSI-Dateien kann in der httpd.conf konfiguriert werden. Standardmäßig ist die Dateiendung .shtml oder .stm. Damit man jedoch die Webseitenaufrufer nicht verwirrt, wird oftmals die Dateiendung .html bevorzugt.
45
Weshalb verwendet man nicht einfach die Dateiendung .html für SSI-Code enthaltende Dateien?
Die Dateiendung .html würde implizieren, dass alle HTML-Dateien SSIBefehle enthalten. Somit würde der Apache Webserver beim Aufruf jeder beliebigen .html-Datei diese nach SSI-Befehlen durchsuchen und versuchen diese auszufüren. Bei Zugriffen auf Dateien ohne SSI-Code würde somit sinnloser Weise der SSIInterpreter gestartet, was die Performance des Apache Webservers beeinträchtigt.
46
Wie können Sie SSI-Code enthaltende Dateien mit der Dateiendung .html bereitstellen?
Der so genannte XBitHack ermöglicht es, SSI-Befehle in .html-Dateien einzufügen, ohne dass jede .html-Datei beim Zugriff auf SSI-Befehle untersucht wird: Jede .html-Datei die für deren Besitzer ausführbar ist (= „x-Bit für Benutzer gesetzt“), wird beim Aufruf auf SSI-Befehle untersucht und diese werden ausgeführt. Die entsprechende Direktive im Apache Webserver lautet XBitHack on
47
Nennen Sie die Hauptnachteile von CGI.
Da die Kommunikation zwischen Webserver und aufgerufenem Skript beim CGI-Ansatz über Umgebungsvariablen und Pipes erfolgt, ist die physikalische Trennung von Webserver und CGI-Skript ausführenden Servern nicht möglich. Aus Performancegründen sowie zur Entlastung des physikalischen Servers ist dies jedoch wünschenswert. Ein weiterer Nachteil ist die Aufrufweise bei CGI. Für jeden Skript-Aufruf erzeugt der Apache Webserver einen eigenen Prozess, in dem der Interpreter des Skripts geladen, damit das Skript interpretiert und dann erst ausgeführt wird. Somit ist die Ausführung aufgrund der Lade- und Interpretationszeit relativ langsam, was bei hoch frequentierten Seiten zu Problemen führen kann
48
Erklären Sie die grundlegende Funktionsweise von FastCGI.
Die Funktionsweise von FastCGI orientiert sich an der Funktionsweise von CGI. Nur anstatt jedes mal einen eigenen Prozess zu starten, erzeugt der Apache Webserver beim ersten Aufruf des Skripts einen persistent laufenden Hintergrundprozess (Deamon), der kommende Anfragen weitergeleitet bekommen und bearbeiten kann.
49
Wie löst FastCGI dadurch die Nachteile des CGI-Ansatzes?
Durch den „Deamonize It“-Ansatz muss der Interpreter für das FastCGISkript nur einmalig geladen, sowie das Skript nur einmalig interpretiert werden. Dies schlägt sich deutlich in der Performance des Ansatzes nieder: Im selben Zeitraum können deutlich mehr Anfragen bearbeitet werden. Zudem ist die Kommunikation zwischen Webserver und FastCGI-Skript von Umgebungsvariablen und Pipes auf TCP- und Unix-Sockets umgestellt worden. Somit können Webserver und FastCGI-Skript auf unterschiedlichen physikalischen Servern betrieben werden, was deren jeweilige Last reduziert und sich in besserer Performance auswirk
50
Skizzieren Sie den Ablauf eines FastCGI-Aufrufs, beginnend und endend beim Client
Ein Client stellt einen HTTP-Request auf ein FastCGI-Skript auf dem Webserver. Dieser nimmt den Request entgegen, wählt einen von potentiell mehreren FastCGI-ausführenden Servern aus (am besten, wenn dieser aktuell frei ist) und sendet über TCP-Sockets die Anfragedaten an diesen weiter (es kann sich jedoch bei FastCGI-Verver und Webserver auch um die gleiche Maschine handeln!). Auf diesem läuft das FastCGI-Skript bereits in einem Deamon, so dass dieser ohne Interpreter-Aufruf und Skriptinterpretation den Skriptcode ausführt. Dabei kann das Skript wie bei CGI auch mit der Datenbank kommunizieren; beispielsweise um Daten in die Datenbank zu speichern oder aus dieser auszulesen. Das Skript teilt dem Apache Webserver über die erste Zeile seiner Ausgabe Content-type mit, welcher Antworttyp erzeugt wurde; beispielsweise Content-type:text/html. Das erstellte Ergebnis sendet der FastCGI-Server wiederum über TCP-Sockets an den Apache Webserver zurück, der nun mit Hilfe des Content-Type und des restlichen Ergebnis eine HTTP-Response erzeugt und diese an den Client sendet.
51
Wie können Sie den Apache Webserver FastCGI-fähig machen?
Damit der Apache Webserver FastCGI ausführen kann, muss das Modul mod_fcgid installiert und dynamisch eingebunden sein. Zudem muss in der httpd.conf festgelegt werden, welche Dateien der Apache als FastCGI-Skripte interpretieren soll (AddHandler fcgid-script) und in welchem Verzeichnis FastCGISkripte ausgeführt werden dürfen (Options +ExecCGI).
52
Wie können bestehende CGI-Anwendungen in FastCGI-Anwendungen umgewandelt werden?
Die Überführung von CGI-Skripten in FastCGI-Skripte ist abhängig von der verwendeten Skriptsprache. Der grundlegende Ablauf ist gleich: Jede FastCGIfähige Sprache bietet Bibliotheken für die Verwendung von FastCGI. Diese müssen in das Skript eingebunden werden. Zudem muss eine „Endlosschleife“ um den Skriptcode gelegt werden, damit das Skript nach einem Durchlauf nicht beendet wird sondern als Hintergrundprozess weiterläuft. Normalerweise handelt es sich bei den „Endlosschleifen“ jedoch nicht um echte Endlosschleifen, sondern um Schleifen, die Steuersignale des Apache Webserver entgegen nehmen. Somit können die laufenden Hintergrundprozesse zusammen mit dem Apache Webserver beendet werden. Beispiel für die „Endlosschleife“ in Perl unter Verwendung des Models CGI::Fast;: while (my $cgi = CGI::Fast->new()) { # ... eigenliche Arbeit des Skripts ... }
53
Worin unterscheidet sich der PHP-Ansatz zum CGI-Ansatz?
Im Unterschied zu CGI ist der Apache Webserver für die Ausführung des PHP-Skript-Codes eigenverantwortlich. Hierfür wird das PHP-Modul mod_php verwendet, welches dem Apache die Funktionalität bereitstellt, PHP-Skriptcode ausführen zu können. Da der Interpreter nun Teil des Apache Webserver ist, muss dieser nicht mehr extra geladen werden, sondern ist direkt mit dem Start des Apache Webserver verfügbar. Weiterhin kann der PHP-Code direkt in die HTMLBeschreibung integriert werden, da der Apache bei entsprechenden Dateiendungen (z.B. .php) diese nach ausführbarem Code durchsucht, diesen genau an der angegebenen Stelle ausführt und dann das Ergebnis als HTTP-Response an den Client zurücksendet. Dementsprechend muss statischer HTML-Code nicht vom PHP-Skript über eine Ausgabe ausgegeben werden und der Content-Type ist durch die Datei vorgegeben
54
Was ist Node.js?
Node.js is eine JavaScript-Laufzeitumgebung, die auf der Chrome V8 JavaScript engine basiert und es ermöglicht, JavaScript serverseitig auszuführen. Während JavaScript klassischerweise als clientseitige Sprache zum Einsatz kommt, ist es mit Node.js nun möglich, JavaScript zur serverseitigen Entwicklung von Webanwendungen einzusetzen.
55
Ist es für Node.js-Webanwendungen notwendig, einen Webserver wie Apache oder nginx einzusetzen?
Nein. Eine Node.js-Webanwendung ist Server und Anwendung in „einem“. Dies unterscheidet sich von CGI- oder PHP-Webanwendungen, die selbst keinen Webserver implementieren, sondern über eine separate Webserversoftware wie den Apache ausgeliefert werden
56
Erklären Sie den Node.js-Event-Loop in groben Zügen.
Durch den Event-Loop is es Node.js möglich, zeitintensive Operationen an den Betriebssystemkernel auszulagern. Wenn die entsprechende Operation abgeschlossen ist, teilt der Kernel dies Node.js mit, woraufhin eine zuvor spezifizierte Callback-Funktion zu einer Queue hinzugefügt wird. Durch den Event-Loop werden die Callbacks aus diesen Queues zyklisch abgearbeitet. Der Event-Loop besteht aus mehreren Phasen: Beispielsweise werden in einer Phase Callbacks ausgeführt, die sich aus Timern ergeben (setTimeout(), setInterval). Eine andere Phase führt wiederum I/O-spezifische Callbacks aus (z.B. nach dem Lesen oder Schreiben von Dateien). Jede der Phasen verfügt über eine eigene Queue, in der Callbacks vom entsprechenden Typ angereiht und später ausgeführt werden. Wer sich für Details des Node.js-Event-Loops interessiert, kann diese im Artikel The Node.js Event Loop, Timers, and process.nextTick() nachlesen.
57
Erklären Sie den Unterschied zwischen blocking und non-blocking Funktionsaufrufen in Node.js
Blocking bedeutet, dass in Folge eines Funktionsaufrufs die Ausführung von nachfolgendem JavaScript-Code so lange warten muss, bis eine Operation außerhalb von JavaScript beendet wurde. Dies betrifft beispielsweise I/OOperationen wie das Lesen oder Schreiben von Dateien. Alle I/O-Methoden der Node.js-Standardbibliothek (z.B. im Modul fs) liegen auch in einer non-blocking-Version vor: Diese akzeptieren jeweils eine Callback-Funktion als Argument, die aufgerufen wird, sobald die Operation außerhalb von JavaScript beendet wurde (siehe Node.js-Event-Loop).
58
Erklären Sie das Prinzip der „Error-first callbacks“ in Node.js.
Die meisten asynchronen Node.js-Funktionen akzeptieren als Parameter eine Error-first callback -Funktion: Wenn die asynchrone Funktion mit der Abarbeitung ihrer Aufgabe fertig ist, ruft sie die Callback-Funktion auf. Im Fehlerfall übergibt sie den Fehler (Error) als erstes Argument an die Callback-Funktion, im Erfolgsfall null als erstens und das Ergebnis als zweites Argument.
59
Welche Funktion haben die Node.js-Module http, url und fs?
Das http-Modul dient unter anderem zum Erstellen von HTTP-Servern. Mit dem url-Modul kann man URLs parsen und beispielsweise den Pfad, QueryString oder Hash auslesen. Zur Interaktion mit dem File System gibt es das fsModul. Hiermit kann man unter anderem Dateien lesen und in diese schreiben. Die drei Module gehören zu den Node.js-Core-Modulen. D.h. sie kommen mit jeder Node.js-Installation „von Haus aus“ mit.
60
Wie können Sie mit Node.js URL-Routing implementieren? Wie können Sie auf HTTP-GET-Parameter zugreifen?
Unter URL-Routing verstehen wir die Definition von Anwendungsendpunkten (URLs) und deren Antworten auf Anfragen von Clients. Beispielsweise soll beim Aufruf der URL /index die Startseite ausgegeben werden oder beim Aufruf der URL /news die Nachrichten, usw. In Node.js kann man so ein Verhalten beispielsweise mit dem url-Modul umsetzen, siehe hierzu Listing 4. Die vollständige Datei ist im Moodle verfügbar. Auch der Zugriff auf GET-Parameter ist mit dem URL-Modul mittels let queryParameters = url.parse("url", true).query möglich. Über queryParameters.p kann man nun auf den Wert des GET-Parameters p zugreifen. Für eine große Menge an URLs ist dieses Vorgehen umständlich. Daher bedient man sich üblicherweise eines Frameworks wie Express und erledigt das Routing hiermit (Express behandeln wir nicht in dieser Veranstaltung!).
61
Was ist npm?
npm ist ein Paketmanager für Node.js. Ein Paket ist ein Verzeichnis, das eine package.json-Datei enthält. Diese definierte neben Version und Autor u.a. Abhängigkeiten, also welche anderen Pakete von diesem Paket benötigt werden. Über npm können von der „Node.js-Community“ bereitgestellte Pakete aus einer Registry heruntergeladen und in eigene Projekte eingebunden werden. Ein Paket besteht aus einem oder mehreren Modulen, die Funktionen für die Node.jsAnwendung bereitstellen.
62
Wie können Sie ein eigenes Node.js-Modul schreiben?
Um ein eigenes Node.js-Modul zu schreiben, kann man in seinem Projekt eine JavaScript-Datei anlegen und zu exportierende Funktionen oder Variablen über exports.funktionsname exportieren, z.B. exports . sum = function (a, b) { return a + b; }; Die JavaScript-Datei kann man dann über require('path/to/file') in andere JavaScript-Dateien einbinden. Wenn man das Modul jedoch in mehreren Projekten verwenden will und ggf. auch anderen Personen zur Verfügung stellen will, ist es besser, über den Paketmanager npm ein Paket mit dem Modul anzulegen.
63
Diskutieren Sie positive und negative Seiten von Node.js
JavaScript-Entwickler können dank Node.js JavaScript serverseitig einsetzen und somit die gleiche Sprache für Backend und Frontend verwenden. Für diese Entwickler ist die Einarbeitung in Node.js relativ einfach. Hinter Node.js steht eine aktive Community, außerdem sind dank npm und dem dazugehörigen Repository viele Module für Node.js verfügbar. Aufgrund des asynchronen Ausführungsmodells (Event-Loop) sind Node.js-Anwendungen zudem performant. Ein Nachteil von Node.js ist die API, die teils noch großen Schwankungen unterliegt und dadurch instabil ist. Zudem bietet Node.js bisher kein Mutltihreading, weshalb es für rechenintensive Anwendungen nicht geeignet ist. Ein weiterer Nachteil von Node.js sind die teilweise unsicheren und instabilen npmPakete
64
Was ist eine Software-Architektur?
Die Architektur eines Softwaresystems beschreibt dieses als Komponenten zusammen mit den Verbindungen, die zwischen den Komponenten bestehen. Eine Software-Architektur beschreibt noch nicht den detaillierten Entwurf, vielmehr geht es darum, die Zusammenhänge zwischen den Anforderungen und dem zu konstruierenden System zu beschreiben
65
Nennen Sie Einflussfaktoren auf die Entwicklung von Software-Architekturen.
Funktionale Anforderungen: wie Auftraggeber, Pflichten-, Lastenheft Nicht-Funktionale Anforderungen: wie Performance oder Wiederverwendbarkeit Technische Rahmenbedingungen wie verfügbare Systemsoftware oder Middleware Erfahrungen wie bestehende Architekturen, Design Patterns, Projekterfahrung
66
Weshalb sollten Sie vor der Entwicklung einer Webanwendung ein ArchitekturSchema für diese entwickeln?
Softwarearchitekturen sind unabhängig vom Web für alle IT-Anwendungen sinnvoll, die eine erhöhte Komplexität aufweisen. Somit können vor der tatsächlichen Implementierung die einzelnen Systemkomponenten erfasst und hinsichtlich ihrer Komplexität eingeschätzt werden. Auf dieser Erfassung ist eine Verteilung der Systemkomponenten auf Experten möglich, die sich mit der Implementierung der entsprechenden Komponenten auskennen. Zudem wird das Zusammenspiel der Systemkomponenten abstrahiert, was das Verständnis des Gesamtsystem erhöht und somit die Implementierung vereinfacht und Fehlerquellen minimiert. Ein weiterer Vorteil an Softwarearchitekturen ist, dass diese oft derart verständlich gezeichnet werden können, dass Kunden anhand dieser das fertige System erklärt bekommen können, ohne eine einzige Zeile Code zu erstellen. Auf diese Weise können auf der Kommunikation zwischen Kunde und Entwickler basierende Fehler und Missverständnisse vor der Entwicklung geklärt werden, was in niedrigeren Kosten, erhöhter Kundenzufriedenheit und weniger Nachbesserungen resultiert.
67
Was versteht man unter einem Tier? Geben Sie je ein Beispiel für eine 2-Tier und eine 3-Tier-Architektur an
Ein Tier ist eine „Hardware-Schicht“ und besteht aus einem Computer (oder einem Cluster von Computern). Jede dieser Hardware-Schichten führt eine oder mehrere „Software-Schichten“ (Layer) aus. Klassische Layer sind beispielsweise Präsentation, Anwendungslogik und Datenhaltung. Diese Layer kann man nun auf eine bis drei Tiers verteilen und erhält so 1-Tier, 2-Tier oder 3-TierArchitekturen
68
Was ist ein Design-Pattern und wozu wird es verwendet?
Design-Patterns (Entwurfsmuster) sind bewährte Lösungsansätze für wiederkehrende Probleme bei der Softwareentwicklung. Sie dienen als eine Art „Lösungsschablone“.
69
Erklären Sie das Design-Pattern „Model-View-Controller“ am Beispiel einer „klassischen“ Webanwendung.
Lösung: Das MVC-Pattern ist ein klassisches Entwurfsmuster zur Strukturierung von Softwarearchitekturen in die drei Einheiten Model, View und Controller. • Das Model enthält die für die jeweilige Anwendung notwendigen Datenmodelle zur Speicherung der Anwendungsdaten, sowie die zur Speicherung gehörige Geschäftslogik. • Die View enthält die Funktionalität zur Darstellung der Daten auf dem Benutzerinterface, sowie zur Weiterleitung der Benutzerinteraktionen an den Controller. • Der Controller enthält die Funktionalität zur Ausführung der Benutzerinterakationen auf das Datenmodell, sowie zur Anpassung der View gemäß der Benutzerinteraktion
70
Was ist ein Software-Framework?
Ein Framework ist ein wiederverwertbares Softwaresystem mit bereits implementierter, genereller Funktionalität. Softwareprojekte, die diese Funktionalitäten benötigen, können somit auf das Framework zurückgreifen, anstatt diese selbst zu entwickeln. Dadurch können Entwicklungskosten eingespart und Fehlerquellen durch nicht geprüfte Eigenentwicklungen vermieden werden. Beispiele für serverseitige Web-Frameworks sind Django (Python), Laravel (PHP) oder Express (JavaScript/Node.js).
71
Wann lohnt sich der Einsatz eines Frameworks für Software-Projekte?
In Frameworks ist ein nicht unerheblicher Einarbeitungsaufwand notwendig. Deshalb ist die Verwendung eines Frameworks erst dann empfehlenswert, wenn der zeitliche Einarbeitungsaufwand in die (korrekte) Nutzung des Frameworks geringer ist als die Zeitersparnis die man durch die Nutzung der Frameworkfunktionen gegenüber der Eigenentwicklung gewinnt. Zudem gibt es Anwendungsfälle, in denen es aus unterschiedlichen Gründen nicht ratsam ist auf ein Framework zurückzugreifen; beispielsweise bei der Entwicklung sicherheitskritischer Systeme um über das Framework keine unbekannten Hintertüren/Angriffsstellen in sein System zu integrieren
72
Was ist eine Template-Enginge? Was ist Smarty?
Eine Template-Enginge ist eine Software, die in Vorlagen (Templates) Platzhalter mit konkreten Inhalten füllt. In den Templates selbst soll keine BusinessLogik enthalten sein. Wir behandeln Template-Enginges am Beispiel von Smarty. Smarty ist eine „compilierende Template-Engine“ für PHP. Das bedeutet, dass das Template beim Ausführen (Aufrufen der Seite, die das Template verwendet) in reines PHP übersetzt wird. Solange sich nichts am Template ändert, wird das Template nicht erneut compiliert, sondern die compilierte Version verwendet. Dies bietet große PerformanceVorteile
73
Weshalb ist die Aufteilung der Entwicklung in Darstellungscode (Template) und Anwendungscode sinnvoll?
Der Hauptgrund für die Trennung ist, dass Designer und AnwendungsEntwickler weitestgehend unabhängig voneinander arbeiten können. Somit beeinträchtigen sich die jeweiligen Experten in ihrer Arbeit nicht. Insbesondere können Designer nicht versehentlich Sicherheitslücken und Bugs erzeugen, wenn sie Änderungen am Programmcode vornehmen und Anwendungs-Entwickler können das Design nicht kaputt machen, wenn sie an der Darstellungsbeschreibung Änderungen vornehmen. Zudem kann über den Weg eine schnellere Entwicklung erfolgen, da Designer und Anwendungs-Entwickler parallel arbeiten können und durch die Trennung Templates / Anwendungscode in verschiedenen Projekten wiederverwendet werden
74
Warum ist es ratsam im Template eine eigene Sprache und nicht eine etablierte Sprachen wie PHP zu verwenden.
Auch in Templates benötigt man oftmals Verzweigungen oder Schleifen. Daher muss eine Schnittstelle für den Designer gefunden werden um, grundlegende Programmierkonstrukte im Template zu verwenden. Da etablierte Sprachen wie PHP sehr mächtig und für nicht-Programmierer zu komplex in der Anwendung sind, ist es nicht empfehlenswert diese als Schnittstelle im Template zu verwenden. Insbesondere könnten Designer Funktionen verwenden, die das Gesamtsystem beeinträchtigen. Daher ist eine eigene Sprache notwendig, die möglichst einfach zu verwenden ist und die benötigten Funktionen bereitstellt. Beispielsweise bietet Smarty die Smarty Template Language als Schnittstelle zwischen Design und Anwendungscode an.
75
Welche Ordnerstruktur benötigt eine Smarty-Webanwendung?
Smarty selbst benötigt ein Verzeichnis für die Templates (templates) und ein Verzeichnis für die compilierten Templates (templates_c). Setzt man Konfigurationsdateien und Caching ein, benötigt Smarty zusätzlich je ein Verzeichnis 4 hierfür (configs und cache). Die Pfade zu den Verzeichnissen müssen dem SmartyObjekt bekanntgegeben werden. Für die Webanwendung benötigt man zudem ein Verzeichnis, in dem die über das Web aufrufbaren PHP-Dateien liegen (htdocs). Idealerweise gibt es noch mindestens ein weiteres Verzeichnis für den Anwendungscode („Businesslogik“, Datenbankzugriffe, etc.). Bei diesem Aufbau haben die PHP-Dateien in htdocs nur die Aufgabe, Funktionen der Business-Logik aufzurufen, implementieren selbst jedoch keine Business-Logik. Die angegebenen Verzeichnisnamen könnten auch anders gewählt werden! Die gesamte Ordnerstruktur könnte somit so aussehen: my-smarty-project/ htdocs/ # Alle ueber das Web aufrufbare Dateien logic/ # "Business-Logik" templates/ # Smarty-Templates templates_c/ # compilierte Smarty-Templates Damit die Inhalte aus htdocs tatsächlich über das Web erreichbar sind, muss der Apache entsprechend konfiguriert werden. Alternativ kann man einen symbolischen Link innerhalb des Apache-htdocs-Ordner auf den Smarty-htdocs-Ordner setzen
76
Smarty beherrscht Template-Inheritance. Was bedeutet das?
Durch Template-Inheritance ist es möglich, in einem „Eltern-Template“ Template-Blöcke zu definieren, die vom „Kind-Template“ verändert werden können. Beispiel aus der Smarty-Dokumentation: Man definiert ein „Eltern-Template“ layout.tpl mit Blöcken: {block name=title}Default Page Title{/block} {block name=body}{/block} Diese kann man nun in einem „Kind-Template“ erweitern: {extends file="layout.tpl"} {block name=title}My Page Title{/block} {block name=body}My HTML Page Body goes here{/block} Wichtig: Innerhalb der Blöcke kann nicht nur Text, sondern auch Smarty-Konstrukte verwendet werden! Durch Template-Inheritance ist es auf einfache Art möglich, Layouts für alle Seiten zu definieren (klassischerweise hat man hierfür früher Header und Footer mittels include eingebunden.)
77
Erklären Sie die grundlegende Funktionsweise von (Web-)Content-ManagementSystemen (im Folgenden CMS).
CMS bieten die Möglichkeit Inhalte im World Wide Web bereitzustellen, ohne dass Kenntnisse in HTML, CSS, Skriptsprachen, etc. benötigt werden. Hierfür bieten CMS eine Eingabemaske, über die Benutzer Inhalte eintragen können, sowie eine Schnittstelle, über die aus den eingetragenen Inhalten die Webseitenbeschreibung, bestehend aus HTML, CSS und ggf. JavaScript erzeugt und an den aufrufenden Client ausgeliefert wird.
78
Welche Vorteile bieten CMS?
CMS bieten verschiedene Vorteile. Der Hauptvorteil besteht darin, dass Benutzer Inhalte und Struktur der Webseite ohne HTML-Kenntnisse pflegen können, da das Layout der Webseite automatisch vom CMS erzeugt wird. Manche CMS unterstützen auch einer Versionshistorie der veröffentlichten Inhalte sowie das mehrsprachige Anlegen von Inhalten. Die Inhalte lassen sich in vielen CMS mit Zeitbeschränkungen versehen, sodass Inhalte zu einer bestimmten Zeit offline genommen oder erst zu einer bestimmten Zeit online genommen werden können. Darüber hinaus bieten CMS ein Benutzer-, Rollen- und Rechtekonzept. Dadurch ist es beispielsweise möglich, dass Benutzer nur in einem bestimmten Teil der Webseite Inhalte verändern dürfen. Welche Vorteile ein CMS genau bietet, hängt immer vom Funktionsumfang des jeweiligen CMS ab
79
Erklären Sie Funktionsweise sowie Vor- und Nachteile von statischen, dynamischen und hybriden CMS.
Bei dynamischen CMS wird zu jedem eingehenden HTTP-Request das auszuliefernde HTML-Dokument anhand des Templates sowie des angeforderten Datenbankinhalts neu erzeugt. Der Vorteil daran ist, dass die angeforderten Inhalte immer auf dem aktuellsten Stand sind. Der Nachteil ist, dass für jeden Zugriff die Webseiten-Beschreibung komplett neu erstellt werden muss. Insbesondere bei hoch frequentierten Webauftritten und komplexen Templates kann dies zu PerformanceProblemen bei der Abarbeitung von Requests führen. Viele CMS bieten jedoch komplexe Caching-Strategien, die dieses Problem zumindest abmildern. Statische CMS erzeugen mit Hilfe des Templates und der Datenbahninhalte zu einem definierten Zeitpunkt einen statischen HTML-Abzug der zu veröffentlichenden Inhalte im Dateisystem eines „Staging-Server“. Diese statischen HTMLDokumente werden an die Clients ausgeliefertt. Der Vorteil ist, dass auch bei mehrfachen Aufrufen derselben Webseite die HTML-Beschreibung erzeugt werden muss und anschließend diese einfach nur noch ausgeliefert wird. Dies ist deutlich performanter und stabiler als der dynamische Ansatz. Nachteilig an dem Ansatz ist, dass die Inhalte der statischen HTML-Dokumente nicht immer aktuell sind, wenn sich die Inhalte häufig ändern (beispielsweise bei Nachrichtenseiten). In diesem Fall müsste ständig zum Staging-Server exportiert werden, was sich jedoch nachteilig auf die Performance auswirkt. Hybride CMS sind eine Mischform aus statischem und dynamischem CMS: Sich häufig ändernde Inhalte werden dynamisch erzeugt (z.B. die News-Seite) während stabile Inhalte statisch vorgehalten werden (z.B. das Impressum).
80
Erklären Sie den Begriff „Cross Media Publishing“. Weshalb ist dieser für CMS von Interesse?
Die Idee von Cross-Media-Publishing ist, dass Inhalte medienneutral in einer zentralen Speicherstelle gespeichert werden; beispielsweise in einer Datenbank. Auf diese Weise können beliebige Daten-nutzende Techniken auf diese Quelle zugreifen und die Daten optimal für verschiedene Medien aufbereiten. Der große Vorteil daran ist, dass Daten nicht mehrfach in unterschiedlichen Formaten vorgehalten werden müssen. Dies spart Kosten, da weniger Personen sich mit der Datenpflege auseinandersetzen müssen und die Daten großteils automatisch aufgearbeitet und veröffentlicht werden können. Häufige wird Cross-Media-Publishing verwendet, um dieselbe Datenquelle für die Präsentation der Daten auf einer Webseite, für mobile Endgeräte und für Printmedien zu nutzen.
81
Welche TYPO3-Versionen werden zurzeit noch weiterentwickelt. Was ist in diesem Kontext LTS?
Aktuell werden von TYPO3 die Versionen 9 LTS und 8 LTS weiterentwickelt und bieten Long Term Support (LTS). Dies bedeutet, dass die verwendete Systemarchitektur für einen längeren Zeitraum (ca. 2-3 Jahre) durch die TYPO3-Community gewartet wird. Somit werden in dieser Zeit anfallende Bugund Security-Updates an der Software durchgeführt und über kleinere Updates auf den Markt verteilt. Für den Anwender besteht somit Planungssicherheit für den angegebenen Zeitraum, was den Umstieg auf das System attraktiver macht.
82
Erklären Sie die Software-Architektur von TYPO3.
Die Systemarchitektur ist in Abbildung 2 illustriert. TYPO3 basiert auf der Skriptsprache PHP, weshalb der Kern von TYPO3 komplett in PHP erstellt ist. Um dies über das Web bereit zu stellen, benötigt TYPO3 einen Webserver; beispielsweise den Apache Webserver. Die Inhalte werden in einer Datenbank gespeichert, die über die PHP-Komponenten von TYPO3 angesprochen wird. Hierfür wird beispielsweise eine MySQL-Datenbank vorgeschlagen. Die Grundfunktionalitäten von TYPO3 können über Extensions erweitert werden. Dabei gibt es eine klare Trennung zwischen eigenen Extensions, CommunityExtensions und Extensions der Core-Group. Nur bei letzteren ist sichergestellt, dass diese nach Updates der TYPO3-Cores noch funktionieren. Bei den ersten beiden sind eigene Validierungen nötig. Basierend auf dem TYPO3-Kern (sowie gegebenenfalls den Extensions) gibt es ein Backend, über welches der Webauftritt verwaltet werden kann. In diesem können beispielsweise Inhalte angelegt, verändert und gelöscht werden, das Template für den Webauftritt organisiert werden oder ein Nutzer-Management vorgenommen werden. Die tatsächliche Darstellung des Webauftritts erfolgt über das Frontend. In diesem sind die einzelnen Webseiten des Webauftritts aufrufbar, wobei hier im Backend getätigte Einschränkungen wie zum Beispiel Nutzer-Authentifizierung beim Aufruf vom Core automatisiert überprüft werden.
83
Nennen Sie Beispiele für TYPO3-Extensions sowie deren Nutzen
News-Extension über news, „schöne“ URLs über realurl.
84
Nennen Sie Nachteile von TYPO3.
TYPO3 ist sehr komplex, was den Einsteig schwer gestaltet. Extensions werden zum Teil nicht von den Core-Group entwickelt und sind daher teilweise instabil und können die Grundsoftware dadurch beeinflussen. TYPO3 stellt hohe Anforderungen an die zugrunde liegende Hardware. Die Konfigurationssprache TypoScript ist unbeliebt.
85
Was ist Autoloading?
In der objektorientierten PHP-Programmierung erzeugt man meistens eine eigene PHP-Datei für jede Klassendefinition. Um diese Klassen in anderen PHP-Dateien verwenden zu können, müssen diese mittels include (oder require) eingebunden werden. Mit steigender Anzahl der verwendeten Klassen, führt dies zu sehr vielen include-Anweisungen. Hier kommt Autoloading ins Spiel: Seit PHP 5 kann können über die spl_autoload_register()-Funktion Autolader (Funktionen) registriert werden, die es ermöglichen, dass Klassen und Schnittstellen automatisch geladen werden, wenn sie derzeit nicht definiert sind. Beispiel:
86
Skizzieren Sie, wie das ZEND-Framework einen HTTP-Request verarbeitet.
Lösung Theorie 10.2
87
Was ist Dependecy Injection?
Als Dependency Injection wird in der objektorientierten Programmierung ein Entwurfsmuster bezeichnet, das die Abhängigkeiten eines Objekts zur Laufzeit reglementiert: Benötigt ein Objekt beispielsweise bei seiner Initialisierung ein anderes Objekt, ist diese Abhängigkeit an einem zentralen Ort hinterlegt – es wird also nicht vom initialisierten Objekt selbst erzeugt.
88
Welche Funktion hat der ServiceManager des ZEND-Frameworks?
Der ServiceManager setzt Dependency Injection innerhalb des ZENDFrameworks um. D.h. der ServiceManager definiert wie – mit welchen Abhängigkeiten – Klassen instanziiert werden.
89
Was ist PSR-4?
PSR steht für PHP Standard Recommendation. PSR-4 definiert eine Autoloading-Spezifikation für PHP. Hierbei wird spezifiziert, wie ein „fully qualified class name“ der Form \(\)*\ auf eine PHP-Datei im Dateisystem durch einen Autoloader abgebildet wird. Hierbei wird ein Präfix des Namespaces auf ein Base-Directory abgebildet. Die folgenden SubNamespaces werden dann relativ zu diesem Base-Directory auf eine Ordnerstruktur abgebildet. Innerhalb dieser Ordnerstruktur wird die Datei .php geladen. Beispiel aus der letzten Übung: In composer.json definieren Sie das Autoloading über "autoload": { "psr-4": { "Application\\": "module/Application/src/", "Album\\": "module/Album/src/" } Hierdurch werden die PSR-4-Base-Directories für die Namespaces gesetzt. Für die Klasse AlbumController lautet der Namespace Album\Controller. Als „fully qualified class name“ ergibt sich Album\Controller\AlbumController. Wenn die Klasse AlbumController mittels use eingebunden wird, weiß der Composer Autoloader nun, dass die Datei module/Album/src/Controller/AlbumController.php geladen werden muss.
90
Convention over Configuration
Solange man sich als Entwickler an die Konvention des Frameworks hält, muss keine explizite Konfiguration vorgenommen werden. Beispielsweise verwenden viele Frameworks die Konvention, dass zu einer Modellklasse im Singular (z.B. student) die Datenbanktabelle im Plural (z.B. students) gehört.
91
CRUD:
steht für create, read, update und delete und bezieht sich auf die elementaren Operationen, um Datensätze zu erstellen, lesen, aktualisieren und löschen. Frameworks, die einen Entwickler bei der Erstellung einer CRUD-Anwendung unterstützt, bieten beispielsweise Generatoren, um HTML-Formulare oder Controller-Klassen zu erzeugen.
92
DRY:
steht für „Don’t repeat yourself“ und ist ein Prinzip, das besagt, Redundanz zu vermeiden oder zumindest zu reduzieren. Hierbei sind Frameworks oft hilfreich.
93
Was ist ein Modul innerhalb des ZEND-Frameworks?
Ein Modul kapselt Funktionalitäten, die der ZEND-Anwendung hinzugefügt werden. Hierbei kann es sich um Funktionalitäten für das Frontend halten, d.h. solche, mit denen ein Benutzer der ZEND-Anwendung über seinen Browser interagieren kann, oder um Funktionalitäten, die anderen Modulen bereitgestellt werden. Module sind wiederverwendbar und können somit auch in anderen ZEND-Anwendungen eingesetzt werden.
94
Welche Funktion hat der ModuleManager des ZEND-Frameworks?
Der ModuleManager lädt und initialisiert die in der ZEND-Anwendung installierten Modulen. Die zu ladenden Module werden in der Datei config/modules.config.php definiert.
95
Welche Schritte sind notwendig, damit ein Modul durch den ModuleManager des ZEND-Frameworks geladen wird?
Damit ein Modul durch den ModuleManager geladen wird, sind folgende drei Schritte notwendig: • composer.json muss so aktualisiert werden, sodass die Klassen des Moduls per Autoloading geladen werden können. • Im Namespace des neuen Moduls muss eine Module-Klasse erstellt werden (Module.php). • config/modules.config.php muss so konfiguriert werden, dass das Modul geladen wird.
96
In welcher Ordnerstruktur ist ein ZEND-Modul üblicherweise organisiert?
``` module/ # module-Ordner des Frameworks Name/ # Name des Moduls z.B. Blog config/ # Enthält module.config.php src/ # Enthält PHP-Quellcode controller/ # Enthält Controller-Klassen Factory # Enthält Factories Form # Enthält Formulare Model # Enthält Model-Klassen view/ # Enthält Templates (View) Die Standardordner lauten config/, src/ und view/. Die vorhandenen Unterordner von src/ hängen von der Funktion des Moduls ab. ```
97
Wie wird ein Modul im ZEND-Framework konfiguriert?
``` Jedes Modul besitzt eine Klasse Module.php. Diese Klasse besitzt eine Methode getConfig(). Die Methode liefert ein assoziatives Array von Konfigurationsparametern wie beispielsweise Routen. Üblicherweise definiert man dieses Array jedoch nicht direkt in getConfig() sondern in der Datei config/module.config.php. Diese Datei lädt man mittels include innerhalb von getConfig(). ```
98
Wozu dient das PostRepository im Tutorial?
Das PostRepository abstrahiert das Abrufen von Posts aus einer Datenquelle. Da es verschiedene Datenquellen gibt (z.B. relationale Datenbanken, dokumentenorientierte Datenbanken, Graphdatenbanken) erstellt man ein Interface PostRepositoryInterface. Dieses Interface wird von allen Klassen implementiert, die Posts aus einer Datenquelle abrufen. Im Tutorial gibt es nur eine konkrete Implementierung zum Abruf der Posts aus einer SQLite Datenbank. In allen anderen Klassen, die Zugriff auf Posts benötigen, referenziert man als Abhängigkeit das Interface und keine konkrete Implementierung dessen (hier kommt Dependency-Injection zum Einsatz!). Über den ServiceManager legt man dann fest, welche konkrete Implementierung für das PostRepositoryInterface verwendet werden soll. Dadurch ist es später leicht möglich, eine andere Implementierung zu verwenden, die als Datenquelle beispielsweise eine Graphdatenbank verwendet.
99
Wozu braucht man Factories im ZEND-Framework?
Factories dienen dazu, dem ServiceManager anzugeben, wie Klassen instaziiert werden sollen. Hierbei wird auch angegeben, welche konkrete Implementierung eines Interfaces verwenden werden soll, wenn ein Interface als Abhängigkeit vorliegt. Eine einfache, vom ZEND-Framework mitgeliferte Klasse ist die InvokableFactory. Diese instaziiert eine Klasse ohne Argumente.
100
Welche Funktion hat ein Hydrator im ZEND-Framework?
Ein Hydrator wandelt ein Array in ein Objekt um, sowie andersherum.
101
Was sind Routen? Welche wichtigen Route-Typen unterstützt das ZEND-Framework?
Routen definieren das Mapping zwischen URLs und Controllern, bzw. deren Methoden. Das ZEND-Framwork unterstützt mehrere Route-Typen. Die beiden wichtigsten sind Literal routes und Segment routes. Literal routes passen nur auf einen ganz bestimmten String, beispielsweise http:// domain.com/blog. Segment routes erlauben es hingegen, Platzhalter in den URLs zu definieren, beispielsweise http://domain.com/blog/1. Im Beispiel steht 1 an der Stelle eines Platzhalters. Meistens wird dieser Route-Type verwendet, um einen Identifier innerhalb der URL zu spezifizieren
102
Wie ermittelt das ZEND-Framework den Pfad zu einem Template?
Standardmäßig wird view/{namespace}/{controller}/{action}.phtm als Pfad zur View verwendet. Hierbei steht {namespace} für den Namespace des Moduls, {controller} für den Controller und {action} für die Action des Controllers, durch die die View erzeugt wird. Wenn man sich an diesen Standard hält, muss man den Pfad zur View nicht konfigurieren! Dies ist ein Beispiel für Convention over Configuration.