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
Q

Was versteht man unter Modulen von Drittanbietern?

A

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)

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

Was versteht man unter einer bedingten Direktive? Geben Sie ein Beispiel an

A

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

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

. Erklären Sie zwei simple Techniken, mit denen Sie Verzeichnisse eines Apache
Webservers vor unberechtigtem Zugriff schützen können

A

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

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

Nennen Sie Vorteile des hybriden Laufzeitmodells für den Apache Webserve

A

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.

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

Welche Funktion hat das Apache-Modul mod_rewrite?

A

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.

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

Welche Funktion haben die Direktiven RewriteCond und RewriteRule des ApacheModuls mod_rewrite?

A

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

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

Wie können Sie in einer RewriteCond auf ein HTTP-Header-Feld zugreifen?

A

In einer RewriteCond lässt sich mittels %{HTTP:header} auf das HTTPHeader-Feld header eines HTTP-Requests zugreifen

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

Wie können Sie in einer RewriteRule einen HTTP-Redirect (HTTP-Weiterleitung)
anstatt eines internen Umschreibens der URL realisieren?

A

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!

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

Wie können Sie PHP in den Apache Webserver einbinden?

A

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

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

Welche Funktion hat die Datei php.ini?

A

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

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

Welche Funktionen haben die folgenden Direktiven der php.ini:
display_errors, ignore_user_abort, include_path und upload_max_filesize.

A

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

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

Mit welcher PHP-Erweiterung können Sie von PHP aus auf MySQL-Datenbanken
zugreifen?

A

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!)

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

Wann bietet sich die Verwendung des nginx-Webservers im Vergleich zum Apache
Webserver an?

A

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

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

. Was versteht man unter einem hybriden Webservermodell?

A

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.

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

Wie können Sie den nginx konfigurieren?

A

Analog zur httpd.conf des Apache besitzt auch der nginx eine zentrale
Konfigurationsdatei namens nginx.conf

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

Wie können Sie den nginx als Reverse-Proxy verwenden und Caching aktivieren?

A

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

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

Was sind ServerSideIncludes (SSI)?

A

: 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
Q

Wie ist ein SSI-Befehl aufgebaut und weshalb ist dies so?

A

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
Q

Nennen Sie Beispiele für den praktischen Nutzen von SSI.

A

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
Q

Welche Dateiendung wird für Dateien mit enthaltenem SSI-Code verwendet?

A

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
Q

Weshalb verwendet man nicht einfach die Dateiendung .html für SSI-Code enthaltende Dateien?

A

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
Q

Wie können Sie SSI-Code enthaltende Dateien mit der Dateiendung .html bereitstellen?

A

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
Q

Nennen Sie die Hauptnachteile von CGI.

A

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
Q

Erklären Sie die grundlegende Funktionsweise von FastCGI.

A

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
Q

Wie löst FastCGI dadurch die Nachteile des CGI-Ansatzes?

A

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
Q

Skizzieren Sie den Ablauf eines FastCGI-Aufrufs, beginnend und endend beim
Client

A

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
Q

Wie können Sie den Apache Webserver FastCGI-fähig machen?

A

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
Q

Wie können bestehende CGI-Anwendungen in FastCGI-Anwendungen umgewandelt werden?

A

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
Q

Worin unterscheidet sich der PHP-Ansatz zum CGI-Ansatz?

A

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
Q

Was ist Node.js?

A

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
Q

Ist es für Node.js-Webanwendungen notwendig, einen Webserver wie Apache oder
nginx einzusetzen?

A

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
Q

Erklären Sie den Node.js-Event-Loop in groben Zügen.

A

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
Q

Erklären Sie den Unterschied zwischen blocking und non-blocking Funktionsaufrufen in Node.js

A

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
Q

Erklären Sie das Prinzip der „Error-first callbacks“ in Node.js.

A

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
Q

Welche Funktion haben die Node.js-Module http, url und fs?

A

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
Q

Wie können Sie mit Node.js URL-Routing implementieren? Wie können Sie auf
HTTP-GET-Parameter zugreifen?

A

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
Q

Was ist npm?

A

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
Q

Wie können Sie ein eigenes Node.js-Modul schreiben?

A

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
Q

Diskutieren Sie positive und negative Seiten von Node.js

A

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
Q

Was ist eine Software-Architektur?

A

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
Q

Nennen Sie Einflussfaktoren auf die Entwicklung von Software-Architekturen.

A

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
Q

Weshalb sollten Sie vor der Entwicklung einer Webanwendung ein ArchitekturSchema für diese entwickeln?

A

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
Q

Was versteht man unter einem Tier? Geben Sie je ein Beispiel für eine 2-Tier und
eine 3-Tier-Architektur an

A

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
Q

Was ist ein Design-Pattern und wozu wird es verwendet?

A

Design-Patterns (Entwurfsmuster) sind bewährte Lösungsansätze für
wiederkehrende Probleme bei der Softwareentwicklung. Sie dienen als eine Art
„Lösungsschablone“.

69
Q

Erklären Sie das Design-Pattern „Model-View-Controller“ am Beispiel einer „klassischen“ Webanwendung.

A

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
Q

Was ist ein Software-Framework?

A

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
Q

Wann lohnt sich der Einsatz eines Frameworks für Software-Projekte?

A

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
Q

Was ist eine Template-Enginge? Was ist Smarty?

A

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
Q

Weshalb ist die Aufteilung der Entwicklung in Darstellungscode (Template) und
Anwendungscode sinnvoll?

A

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
Q

Warum ist es ratsam im Template eine eigene Sprache und nicht eine etablierte
Sprachen wie PHP zu verwenden.

A

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
Q

Welche Ordnerstruktur benötigt eine Smarty-Webanwendung?

A

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
Q

Smarty beherrscht Template-Inheritance. Was bedeutet das?

A

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
Q

Erklären Sie die grundlegende Funktionsweise von (Web-)Content-ManagementSystemen (im Folgenden CMS).

A

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
Q

Welche Vorteile bieten CMS?

A

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
Q

Erklären Sie Funktionsweise sowie Vor- und Nachteile von statischen, dynamischen
und hybriden CMS.

A

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
Q

Erklären Sie den Begriff „Cross Media Publishing“. Weshalb ist dieser für CMS
von Interesse?

A

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
Q

Welche TYPO3-Versionen werden zurzeit noch weiterentwickelt. Was ist in diesem
Kontext LTS?

A

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
Q

Erklären Sie die Software-Architektur von TYPO3.

A

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
Q

Nennen Sie Beispiele für TYPO3-Extensions sowie deren Nutzen

A

News-Extension über news, „schöne“ URLs über realurl.

84
Q

Nennen Sie Nachteile von TYPO3.

A

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
Q

Was ist Autoloading?

A

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
Q

Skizzieren Sie, wie das ZEND-Framework einen HTTP-Request verarbeitet.

A

Lösung Theorie 10.2

87
Q

Was ist Dependecy Injection?

A

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
Q

Welche Funktion hat der ServiceManager des ZEND-Frameworks?

A

Der ServiceManager setzt Dependency Injection innerhalb des ZENDFrameworks um. D.h. der ServiceManager definiert wie – mit welchen Abhängigkeiten – Klassen instanziiert werden.

89
Q

Was ist PSR-4?

A

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
Q

Convention over Configuration

A

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
Q

CRUD:

A

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
Q

DRY:

A

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
Q

Was ist ein Modul innerhalb des ZEND-Frameworks?

A

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
Q

Welche Funktion hat der ModuleManager des ZEND-Frameworks?

A

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
Q

Welche Schritte sind notwendig, damit ein Modul durch den ModuleManager des
ZEND-Frameworks geladen wird?

A

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
Q

In welcher Ordnerstruktur ist ein ZEND-Modul üblicherweise organisiert?

A
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
Q

Wie wird ein Modul im ZEND-Framework konfiguriert?

A
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
Q

Wozu dient das PostRepository im Tutorial?

A

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
Q

Wozu braucht man Factories im ZEND-Framework?

A

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
Q

Welche Funktion hat ein Hydrator im ZEND-Framework?

A

Ein Hydrator wandelt ein Array in ein Objekt um, sowie andersherum.

101
Q

Was sind Routen? Welche wichtigen Route-Typen unterstützt das ZEND-Framework?

A

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
Q

Wie ermittelt das ZEND-Framework den Pfad zu einem Template?

A

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.