Changed stuff

This commit is contained in:
joss 2025-04-29 15:49:21 +02:00
parent b46a50ba06
commit 3b9087864e
4 changed files with 67 additions and 350 deletions

View file

@ -33,12 +33,11 @@ public abstract class DataObject {
} }
/** /**
* Bindet das DataObject an ein Model. * Setzt das Model.
* *
* Ältere Bindings gehen dabei verloren. * Nur aus dem Model zu verwenden!
*/ */
public void bind(Model m) { protected void setModel(Model m) {
m.add(this);
this.model = m; this.model = m;
} }

View file

@ -73,19 +73,20 @@ public class Model {
g3.addMember("students/ltorva"); g3.addMember("students/ltorva");
} }
/**
* Fügt ein neues DataObject hinzu, also bindet es an das Model.
*/
public void add(DataObject a) {
// TODO: Auf doppelte UIDs überprüfen!
this.objs.put(a.uid, a);
a.setModel(this);
}
/* /*
* Folgende Funktionen sind nur durch die DataObject-Objekte * Folgende Funktionen sind nur durch die DataObject-Objekte
* zu verwenden, und sind daher protected. * zu verwenden, und sind daher protected.
*/ */
/**
* Fügt ein neues DataObject hinzu, also bindet es an das Model.
*/
protected void add(DataObject a) {
// TODO: Auf doppelte UIDs überprüfen!
this.objs.put(a.uid, a);
}
/** /**
* Fügt eine neue Objekt-Beziehung hinzu. * Fügt eine neue Objekt-Beziehung hinzu.
*/ */

View file

@ -1,334 +0,0 @@
%!PS-Adobe-3.0
%%Creator: groff version 1.23.0
%%CreationDate: Mon Apr 28 09:15:13 2025
%%DocumentNeededResources: font Helvetica-Bold
%%+ font Helvetica
%%DocumentSuppliedResources: procset grops 1.23 0
%%Pages: 4
%%PageOrder: Ascend
%%DocumentMedia: Default 595 842 0 () ()
%%Orientation: Portrait
%%EndComments
%%BeginDefaults
%%PageMedia: Default
%%EndDefaults
%%BeginProlog
%%BeginResource: procset grops 1.23 0
%!PS-Adobe-3.0 Resource-ProcSet
/setpacking where{
pop
currentpacking
true setpacking
}if
/grops 120 dict dup begin
% The ASCII code of the space character.
/SC 32 def
/A/show load def
/B{0 SC 3 -1 roll widthshow}bind def
/C{0 exch ashow}bind def
/D{0 exch 0 SC 5 2 roll awidthshow}bind def
/E{0 rmoveto show}bind def
/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
/G{0 rmoveto 0 exch ashow}bind def
/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
/I{0 exch rmoveto show}bind def
/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
/K{0 exch rmoveto 0 exch ashow}bind def
/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
/M{rmoveto show}bind def
/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
/O{rmoveto 0 exch ashow}bind def
/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
/Q{moveto show}bind def
/R{moveto 0 SC 3 -1 roll widthshow}bind def
/S{moveto 0 exch ashow}bind def
/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
% name size font SF -
/SF{
findfont exch
[exch dup 0 exch 0 exch neg 0 0]makefont
dup setfont
[exch/setfont cvx]cvx bind def
}bind def
% name a c d font MF -
/MF{
findfont
[5 2 roll
0 3 1 roll % b
neg 0 0]makefont
dup setfont
[exch/setfont cvx]cvx bind def
}bind def
/level0 0 def
/RES 0 def
/PL 0 def
/LS 0 def
% Enable manual feed.
% MANUAL -
/MANUAL{
statusdict begin/manualfeed true store end
}bind def
% Guess the page length.
% This assumes that the imageable area is vertically centered on the page.
% PLG - length
/PLG{
gsave newpath clippath pathbbox grestore
exch pop add exch pop
}bind def
% BP -
/BP{
/level0 save def
1 setlinecap
1 setlinejoin
DEFS/BPhook known{DEFS begin BPhook end}if
72 RES div dup scale
LS{
90 rotate
}{
0 PL translate
}ifelse
1 -1 scale
}bind def
/EP{
level0 restore
showpage
}def
% centerx centery radius startangle endangle DA -
/DA{
newpath arcn stroke
}bind def
% x y SN - x' y'
% round a position to nearest (pixel + (.25,.25))
/SN{
transform
.25 sub exch .25 sub exch
round .25 add exch round .25 add exch
itransform
}bind def
% endx endy startx starty DL -
% we round the endpoints of the line, so that parallel horizontal
% and vertical lines will appear even
/DL{
SN
moveto
SN
lineto stroke
}bind def
% centerx centery radius DC -
/DC{
newpath 0 360 arc closepath
}bind def
/TM matrix def
% width height centerx centery DE -
/DE{
TM currentmatrix pop
translate scale newpath 0 0 .5 0 360 arc closepath
TM setmatrix
}bind def
% these are for splines
/RC/rcurveto load def
/RL/rlineto load def
/ST/stroke load def
/MT/moveto load def
/CL/closepath load def
% fill the last path
% r g b Fr -
/Fr{
setrgbcolor fill
}bind def
% c m y k Fk -
/setcmykcolor where{
pop
/Fk{
setcmykcolor fill
}bind def
}if
% g Fg -
/Fg{
setgray fill
}bind def
% fill with the "current color"
/FL/fill load def
/LW/setlinewidth load def
/Cr/setrgbcolor load def
/setcmykcolor where{
pop
/Ck/setcmykcolor load def
}if
/Cg/setgray load def
% new_font_name encoding_vector old_font_name RE -
/RE{
findfont
dup maxlength 1 index/FontName known not{1 add}if dict begin
{
1 index/FID ne
2 index/UniqueID ne
and
{def}{pop pop}ifelse
}forall
/Encoding exch def
dup/FontName exch def
currentdict end definefont pop
}bind def
/DEFS 0 def
% hpos vpos EBEGIN -
/EBEGIN{
moveto
DEFS begin
}bind def
/EEND/end load def
/CNT 0 def
/level1 0 def
% llx lly newwid wid newht ht newllx newlly PBEGIN -
/PBEGIN{
/level1 save def
translate
div 3 1 roll div exch scale
neg exch neg exch translate
% set the graphics state to default values
0 setgray
0 setlinecap
1 setlinewidth
0 setlinejoin
10 setmiterlimit
[]0 setdash
/setstrokeadjust where{
pop
false setstrokeadjust
}if
/setoverprint where{
pop
false setoverprint
}if
newpath
/CNT countdictstack def
userdict begin
/showpage{}def
%
% Any included setpagedevice should be ignored.
% See: http://www.w-beer.de/doc/ps/.
%
/setpagedevice{}def
mark
}bind def
/PEND{
cleartomark
countdictstack CNT sub{end}repeat
level1 restore
}bind def
end def
/setpacking where{
pop
setpacking
}if
%%EndResource
%%EndProlog
%%BeginSetup
%%BeginFeature: *PageSize Default
<< /PageSize [ 595 842 ] /ImagingBBox null >> setpagedevice
%%EndFeature
%%IncludeResource: font Helvetica-Bold
%%IncludeResource: font Helvetica
grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
def/PL 841.89 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron
/Zcaron/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
/Helvetica@0 ENC0/Helvetica RE/Helvetica-Bold@0 ENC0/Helvetica-Bold RE
%%EndSetup
%%Page: 1 1
%%BeginPageSetup
BP
%%EndPageSetup
1.2 LW 362.834 289.795 99.212 289.795 DL/F0 30/Helvetica-Bold@0 SF
(BELEGARBEIT)147.824 349.795 Q 362.834 385.795 99.212 385.795 DL/F1 10
/Helvetica@0 SF -1.98 -.45(Fr a)342.824 519.795 T(u).45 E/F2 10
/Helvetica-Bold@0 SF(Jocel)275.184 533.795 Q(yn Rose Otto)-.15 E/F3 16
/Helvetica-Bold@0 SF(Entwic)114.21 585.795 Q(klung einer Studierenden-)
-.32 E(verwaltungssoftware)203.682 609.795 Q F1(2025)340.594 657.795 Q 0
Cg EP
%%Page: 2 2
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Helvetica@0 SF -.5(Fa)153.154 63 S(kult\344t).5 E/F1 10
/Helvetica-Bold@0 SF -2.68(Ang e)2.78 F(wandte Computer)-.15 E 2.78(-u)
-.2 G(nd Bio)-2.78 E(wis-)-.15 E(sensc)304.584 77 Q(haften)-.1 E .4 LW
362.834 98 99.212 98 DL/F2 16/Helvetica-Bold@0 SF(BELEGARBEIT)248.162
119 Q .64 LW 362.834 133 99.212 133 DL(Entwic)114.21 301.795 Q
(klung einer Studierenden-)-.32 E(verwaltungssoftware)203.682 325.795 Q
F0 -.3(Au)328.524 435.795 S -2.63(tor in:).3 F F1(Jocel)275.184 449.795
Q(yn Rose Otto)-.15 E F0(Seminarg)291.644 477.795 Q .15(ru)-.1 G(ppe:)
-.15 E(IF24wS2-B)313.374 491.795 Q(Studiengang:)303.904 519.795 Q(Ange)
164.054 533.795 Q -.15(wa)-.2 G(ndte Inf).15 E -2.53(or matik,)-.3 F
(Softw)2.78 E(areentwic)-.15 E(klung)-.2 E -2.63(Pr \374f)332.674
561.795 R -2.48(er :)-.3 F(Kn)262.884 575.795 Q(ut Altroggen, M. Sc.)-.1
E(Einreichung:)307.254 603.795 Q(Mittw)238.584 617.795 Q(eida, irgendw)
-.1 E(ann 2025)-.15 E 0 Cg EP
%%Page: 3 3
%%BeginPageSetup
BP
%%EndPageSetup
.5 LW 524.408 45.181 99.712 45.181 DL/F0 18/Helvetica-Bold@0 SF
(I. Inhaltsverz)99.212 101.181 Q(eic).18 E(hnis)-.18 E/F1 10/Helvetica@0
SF(Erster Punkt)99.212 143.181 Q 33.22(...... 1).3 F(Zw)99.212 171.181 Q
(eiter Punkt)-.1 E 33.22(... 2)2.63 F -2.63(Dr itter)99.212 199.181 R
-.4(Punkt .....)2.78 F(3)36 E 0 Cg EP
%%Page: 4 4
%%BeginPageSetup
BP
%%EndPageSetup
.5 LW 524.408 45.181 99.712 45.181 DL/F0 18/Helvetica-Bold@0 SF
(Einleitung)99.212 101.181 Q/F1 16/Helvetica-Bold@0 SF -.48(Au)99.212
157.181 S(fgabenstellung).48 E/F2 10/Helvetica@0 SF .039
(Das Ziel dieser Arbeit ist das Schreiben einer Softw)99.212 185.181 R
(are)-.15 E 2.819(,w)-.15 G .039(elche das V)-2.919 F(erw)-.8 E .039
(alten v)-.15 F .038(on Studierenden)-.25 F 2.379
(einer Hochschule ef\214zient er)99.212 199.181 R 2.38
(m\366glicht. Dazu soll die Softw).25 F 2.38
(are aus gegebenen Beziehungen)-.15 F 1.924(einen Stundenplan gener)
99.212 213.181 R 1.924(ieren k).15 F 1.923
(\366nnen und dabei Ressourcen wie zum Beispiel R\344ume und)-.2 F -1.2
(Te)99.212 227.181 S .163(chnik automatisch aufteilen. F\374r die V)1.2
F(erw)-.8 E .163(endung der Softw)-.1 F .163(are soll so)-.15 F -.1(wo)
-.15 G .163(hl f\374r Studierende als).1 F
(auch f\374r Dozierende und die V)99.212 241.181 Q(erw)-.8 E
(altung ein W)-.15 E -2.38(eb-basier tes)-.3 F(Interf)2.78 E
(ace angeboten w)-.3 E(erden.)-.1 E F1(Spezi\214kation)99.212 283.181 Q
F2 1.214(Die Softw)99.212 311.181 R 1.214(are soll in J)-.15 F -.2(av)
-.2 G 3.993(ag)-.05 G -2.63(eschr ieben)-3.993 F -.1(we)3.993 G 1.213
(rden. Dabei soll w).1 F 1.213(enn m\366glich auf die Optionen der)-.1 F
(Standardbib)99.212 325.181 Q .942(liothek zur)-.2 F<fc63>.15 E(kgeg)-.2
E .15(ri)-.1 G(ff)-.15 E .942(en w)-.3 F .942
(erden, besonders f\374r die Implementation des W)-.1 F -2.48(ebser v)
-.3 F(ers)-.25 E(f\374r das Interf)99.212 339.181 Q(ace)-.3 E 2.78(.O)
-.15 G -2.63(bjektor ientier ung)-2.78 F(soll w)2.78 E 2.78(os)-.1 G
(inn)-2.78 E -.25(vo)-.2 G(ll ange).25 E -.1(we)-.2 G(ndet w).1 E
(erden.)-.1 E F1(Pr)99.212 381.181 Q(ob)-.32 E(lemanal)-.16 E(yse)-.24 E
(L\366sungsansatz)99.212 437.181 Q 0 Cg EP
%%Trailer
end
%%EOF

View file

@ -23,9 +23,60 @@
Das Ziel dieser Arbeit ist das Schreiben einer Software, welche das Verwalten von Studierenden einer Hochschule effizient ermöglicht. Dazu soll die Software aus gegebenen Beziehungen einen Stundenplan generieren können und dabei Ressourcen wie zum Beispiel Räume und Technik automatisch aufteilen. Für die Verwendung der Software soll sowohl für Studierende als auch für Dozierende und die Verwaltung ein Web-basiertes Interface angeboten werden. Das Ziel dieser Arbeit ist das Schreiben einer Software, welche das Verwalten von Studierenden einer Hochschule effizient ermöglicht. Dazu soll die Software aus gegebenen Beziehungen einen Stundenplan generieren können und dabei Ressourcen wie zum Beispiel Räume und Technik automatisch aufteilen. Für die Verwendung der Software soll sowohl für Studierende als auch für Dozierende und die Verwaltung ein Web-basiertes Interface angeboten werden.
.H2 Spezifikation .H2 Spezifikation
Die Software soll in Java geschrieben werden. Dabei soll wenn möglich auf die Optionen der Standardbibliothek zurückgegriffen werden, besonders für die Implementation des Webservers für das Interface. Objektorientierung soll wo sinnvoll angewendet werden. Die Software soll in Java geschrieben werden. Dabei soll wenn möglich auf die Optionen der Standardbibliothek zurückgegriffen werden, besonders für die Implementation des Webservers für das Interface. Objektorientierung soll wo sinnvoll angewendet werden.
.sp
.H1 Hauptteil .H1 Hauptteil
.br .br
.H2 Problemanalyse .H2 Problemanalyse und Lösungsansätze
Das Kernproblem der Arbeit ist der Algorithmus zum Erstellen der Stundenpläne und Aufteilen von Ressourcen. Die Komplexität des Algorithmus wird in diesem Abschnitt analysiert. Um die oben genannten Ziele zu erreichen muss die Arbeit eine Reihe an Problemen lösen. Grundlegender Bestandteil ist das Erfassen und Speichern von Informationen über Studierende, Dozierende, weitere Ressourcen, Studiengänge und deren Beziehungen. Ein weiteres zu lösendes Problem besteht in der Präsentation der Daten für die Benutzenden. Kernproblem der Arbeit ist dann das Verwenden der Daten um eine Ressourcenverteilung, also unter Anderem einen Stundenplan, zu erzeugen.
.H2 Lösungsansatz
Keinen. Zur Aufgabentrennung ist die Anwendung mit einer Art Model-View-Controller Pattern entworfen. Dabei ist das Model dafür zuständig den Zugriff auf die Daten zu gewährleisten, die View übernimmt die Anzeige der Daten und der Controller beinhaltet die Steuerlogik für Interaktionen mit dem Benutzenden. In dem Fall einer Webanwendung kann eine View dann jeweils einem Endpunkt entsprechen - so ist es in dieser Anwendung umgesetzt. Ein Endpunkt ist in diesem Kontext das Dokument welches durch einen bestimmten Pfad unter der Webanwendung erreichbar ist, beispielsweise \fC/auth\fR für den Endpunkt welcher die Anmeldemaske bereitstellt. Das Erfassen der Daten kann über diese Endpunkte beziehungsweise die Dokumente darunter erreicht werden.
Nach dem Pattern erfolgt das Speichern der Daten nun in einem Model. Das Model kann flexibel entworfen werden, theoretisch auch als Interface, um verscheidenartige Speichermethoden zu ermöglichen. Anbindungen an ein LDAP-Verzeichnis oder eine relationale Datenbank sind beispielsweise denkbar. Da persistente Speicherung nicht Teil der Aufgabenstellung ist wurde in dieser Implementierung darauf verzichtet und das Model arbeitet vollständig volatil, speichert alle Informationen also lediglich im Hauptspeicher. Anbinden an eine Datenbank beispielweise ist aber fast trivial, da ausschließlich die \fCModel\fR-Klasse neu implementiert werden muss. Die Daten selber können nun mithilfe von Oblektorientierung dargestellt werden, dazu mehr in den Implementationsdetails.
Ein weiterer Zentraler Punkt der Arbeit ist der Algorithmus zur Ressourcenverteilung.
.TODO Scheduling-Algorithmus!\"
.H2 Architektur
Die vorliegende Software ist in Java geschrieben und arbeitet stark mit Objektorientierung. Auf externe Abhängigkeiten außerhalb des JDKs wurde der Einfachheit halber verzichtet.
Der gesamte Code der Anwendung befindet sich im Paket \fChsmw.jotto5.beleg\fR. Direkt in diesem Paket befindet sich die Main-Klasse mit dem Einstiegspunkt. Darunter befindet sich das Paket \fCviews\fR, in dem die Klassen für die einzelnen Views liegen, und das Paket \fCdata\fR, in dem alle Klassen implementiert sind die sich mit Datenverwaltung und Abfrage beschäftigen, zum Beispiel das Model.
.H3 Datenverwaltung
Die zentrale Klasse der Datenverwaltung ist die Klasse \fCDataObject\fR. Sie stellt die Superklasse für alle im Model verwalteten Objekte dar. Ihre Implementation ist sehr einfach gehalten.
.sp
.TS
tab(;) box center;
cb
-
l
l
l
-
l.
DataObject
# model: Model
# uid: String
# displayName: String
# DataObject(String uid, String displayName)
# setModel(Model): void
+ getModel(): Model
+ getDisplayName(): String
+ setDisplayName(String displayName): void
.TE
.sp
Das DataObject behält selber eine Referenz auf das Model zu dem es gehört. Die UID ist ein String, welcher eine eineindeutige Zeichenkette für das Objekt enthält. Strukturiert werden kann sie als Hierarchie mit / als Trennzeichen, zum Beispiel \fCstudents/jotto5\fR. Das ist nicht benötigt, aber einige Views verwenden diese Syntax für eine etwas bessere Übersicht. Der DisplayName ist ein frei wählbarer String welcher einen menschenlesbare Namen für das Objekt enthält, im Fall einer Studierenden Person zum Beispiel eine Zeichenkette im Format \fCVorname, Nachname\fR.
Die Klasse enthält einen Konstruktor der die UID und den Anzeigenamen initialisiert. Dieser ist bewusst protected gehalten, da die DataObject-Klasse selber nicht instanziiert werden soll und nur als Superklasse dient. Der Setter für das Model ist nur aus dem Model zu verwenden und daher protected.
Von dem DataObject erben nun mehrere Klassen, welche spezifischere Felder und Methoden beinhalten können, zum Beispiel die Klasse \fCStudent\fR oder die Klasse \fCGroup\fR. Das hat den Vorteil dass das Model selber sich nur um die Verwaltung einer Liste von DataObjects kümmern muss ohne die genaue Semantik zu kennen oder eine Trennung zwischen verschiedenen Typen machen zu müssen. Für das Verwenden der Objekte werden dann Javas Möglichkeiten der Reflexion bzw. Introspektion benutzt.
.TODO Model erklären!\"
.H3 Der Webserver und die Views
Der Webserver selber ist mithilfe der Bibliotheken aus dem JDK entwickelt, und nutzt die Klassen aus \fCcom.sun.net.httpserver\fR. Dazu wird die Klasse \fCHttpServer\fR in der Main-Methode einmal instanziiert und die Endpunkte werden festgelegt. Dafür wird vor dem Start des Webservers für jeden Endpunkt ein \fCHttpContext\fR erzeugt und an eine View gebunden. Die Routing-Logik wird dann vom \fCHttpServer\fR selbst übernommen.
Die Views selber befinden sich als einzelne Klassen im Paket \fChsmw.jotto5.beleg.views\fR. Sie erben von \fCcom.sun.net.httpserver.HttpHandler\fR und implementieren ihre \fChandle\fR-Methode. Diese Methode wird aufgerufen wenn der an die View gebundene Endpunkt angefragt wird, und verarbeitet einen als Argument übergebenen \fCHttpExchange\fR.
Manche Views bieten interaktive Möglichkeiten an, zum Beispiel Formulare. Diese Views prüfen bei jedem Aufruf den Http-Anfragetyp. Bei einer GET-Anfrage wird einfach nur das Formular zurückgegeben. Wenn die benutzende Person ein Formular abschickt wird es als POST-Request übergeben, in diesem Fall führt die View Logik zum Bearbeiten des Models aus.
In der Regel ist jede View für genau einen Endpunkt zuständig. Die RootView ist eine Ausnahme. Sie wird auch für alle nicht zugeordneten Endpunkte aufgerufen. In diesem Fall prüft die RootView nach einer Datei mit dem angefragten Namen im Ordner \fCstatic\fR. Das wird zum Beispiel für CSS-Stylesheets und Bilder verwendet. Wenn es keine Datei mit dem Namen gibt wird schlussendlich ein Http-404-Fehler geworfen.
Besonders ist auch die Klasse \fChsmw.jotto5.beleg.views.Defaults\fR. Sie stellt selber keine View dar, bietet aber statische Methoden und Variablen an welche zwischen allen Views geteilt werden, zum Beispiel ein Grundgerüst für die HTML-Dokumente welche zurückgegeben werden.