Added stuff
This commit is contained in:
parent
9b8ecc8555
commit
cd9a49a19a
10 changed files with 96 additions and 12 deletions
|
@ -3,7 +3,7 @@ Beleg SoSe 2025
|
||||||
|
|
||||||
EINLEITUNG
|
EINLEITUNG
|
||||||
|
|
||||||
Hier eine Kurzanleitung zum Kompilieren und ausführen. Eine ausführlichere
|
Hier eine Kurzanleitung zum Kompilieren und Ausführen. Eine ausführlichere
|
||||||
Beschreibung befindet sich im schriftlichen Teil der Belegarbeit.
|
Beschreibung befindet sich im schriftlichen Teil der Belegarbeit.
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,4 +35,4 @@ Die Dokumentation befindet sich im Ordner doc. Neu erstellt werden kann sie mit
|
||||||
|
|
||||||
ant doc
|
ant doc
|
||||||
|
|
||||||
Dafür wird zusätzlich zu den Abhängigkeiten oben noch Javadoc benötigt.
|
Dafür wird zusätzlich zu den Abhängigkeiten oben noch Javadoc benötigt.
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
|
|
||||||
<target name="doc">
|
<target name="doc">
|
||||||
<mkdir dir="doc"/>
|
<mkdir dir="doc"/>
|
||||||
<javadoc sourcepath="src" destdir="doc">
|
<javadoc destdir="doc">
|
||||||
<fileset dir="src">
|
<fileset dir="src">
|
||||||
<include name="**"/>
|
<include name="**"/>
|
||||||
</fileset>
|
</fileset>
|
||||||
|
|
23
src/Group.java
Normal file
23
src/Group.java
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
package hsmw.jotto5.beleg;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Beschreibt eine Gruppe von Resourcen.
|
||||||
|
*
|
||||||
|
* Speichert Referenzen auf die Elemente als UIDs in einem Array.
|
||||||
|
*/
|
||||||
|
public class Group extends Resource {
|
||||||
|
|
||||||
|
private ArrayList<String> members;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fügt eine Ressource in die Gruppe zu.
|
||||||
|
*
|
||||||
|
* Prüft nicht, ob die Ressource bereits in der Gruppe enthalten ist.
|
||||||
|
*/
|
||||||
|
public void addMember(String uid) {
|
||||||
|
members.add(uid);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -15,10 +15,11 @@ public class Main {
|
||||||
* @param args Die Programmargumente
|
* @param args Die Programmargumente
|
||||||
*/
|
*/
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
HttpServer s = HttpServer.create(new InetSocketAddress(8000), 0);
|
HttpServer s = HttpServer.create(new InetSocketAddress("127.0.0.1", 8000), 0);
|
||||||
|
|
||||||
// Kontexts werden nach längstem Matching ausgewählt (wieso?)
|
// Kontexts werden nach längstem Matching ausgewählt (wieso?)
|
||||||
// Alle unbekannten Anfragen die mit / starten werden also an die RootView gegeben
|
// Alle unbekannten Anfragen die mit / starten werden also an die RootView gegeben
|
||||||
|
// Statische Dateien werden auch von der RootView verarbeitet
|
||||||
// TODO: Error Handling!!!
|
// TODO: Error Handling!!!
|
||||||
s.createContext("/", new RootView());
|
s.createContext("/", new RootView());
|
||||||
s.createContext("/main", new StartView());
|
s.createContext("/main", new StartView());
|
||||||
|
|
|
@ -9,11 +9,14 @@ import java.util.ArrayList;
|
||||||
* Zugriff auf Daten ist Thread-sicher. Um ständiges Zusammenbauen von Objekten
|
* Zugriff auf Daten ist Thread-sicher. Um ständiges Zusammenbauen von Objekten
|
||||||
* zu vermeiden und um besser vom eigentlichen Backend zu abstrahieren sind viele
|
* zu vermeiden und um besser vom eigentlichen Backend zu abstrahieren sind viele
|
||||||
* einfache Abfragen als Methode umgesetzt.
|
* einfache Abfragen als Methode umgesetzt.
|
||||||
|
* <p>
|
||||||
|
* Denkbar ist zum Beispiel eine Implementation auf LDAP-Basis.
|
||||||
*/
|
*/
|
||||||
public class Model {
|
public class Model {
|
||||||
|
|
||||||
private ArrayList<Student> students;
|
private ArrayList<Student> students;
|
||||||
private ArrayList<Resource> resources;
|
private ArrayList<Resource> resources;
|
||||||
|
private ArrayList<Group> groups;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialisiert ein leeres Model.
|
* Initialisiert ein leeres Model.
|
||||||
|
@ -21,6 +24,7 @@ public class Model {
|
||||||
public Model() {
|
public Model() {
|
||||||
students = new ArrayList<Student>();
|
students = new ArrayList<Student>();
|
||||||
resources = new ArrayList<Resource>();
|
resources = new ArrayList<Resource>();
|
||||||
|
groups = new ArrayList<Group>();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,8 +29,9 @@ public class AuthView implements HttpHandler {
|
||||||
// TODO: Versuchen zu autorisieren
|
// TODO: Versuchen zu autorisieren
|
||||||
login = true;
|
login = true;
|
||||||
} else {
|
} else {
|
||||||
response = "<h1>Beleg - Anmeldung!</h1>";
|
response = Defaults.HTMLHEADER + "<h1>Beleg - Anmeldung!</h1>";
|
||||||
response += "<form method=\"POST\"><input type=\"text\" name=\"name\"><br><input type=\"password\" name=\"pass\"><br><input type=\"submit\">";
|
response += "<form method=\"POST\"><input type=\"text\" name=\"name\"><br><input type=\"password\" name=\"pass\"><br><input type=\"submit\">";
|
||||||
|
response += Defaults.HTMLFOOTER;
|
||||||
t.sendResponseHeaders(200, response.length());
|
t.sendResponseHeaders(200, response.length());
|
||||||
os.write(response.getBytes());
|
os.write(response.getBytes());
|
||||||
}
|
}
|
||||||
|
|
11
src/views/Defaults.java
Normal file
11
src/views/Defaults.java
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
package hsmw.jotto5.beleg.views;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enthält Parameter und Funktionen welche auf alle Views zutreffen.
|
||||||
|
*/
|
||||||
|
public class Defaults {
|
||||||
|
|
||||||
|
public static final String HTMLHEADER = "<!DOCTYPE html><html><title>Beleg SoSe 2025</title><link rel=stylesheet href=\"/style.css\"><head></head><body>";
|
||||||
|
public static final String HTMLFOOTER = "</body></html>";
|
||||||
|
|
||||||
|
}
|
|
@ -1,8 +1,11 @@
|
||||||
package hsmw.jotto5.beleg.views;
|
package hsmw.jotto5.beleg.views;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.OutputStream;
|
|
||||||
import com.sun.net.httpserver.*;
|
import com.sun.net.httpserver.*;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fängt alle Anfragen an "/" und unbekannte URLs ab.
|
* Fängt alle Anfragen an "/" und unbekannte URLs ab.
|
||||||
|
@ -14,11 +17,48 @@ import com.sun.net.httpserver.*;
|
||||||
*/
|
*/
|
||||||
public class RootView implements HttpHandler {
|
public class RootView implements HttpHandler {
|
||||||
|
|
||||||
|
private void handleFileOr404(HttpExchange t) throws IOException {
|
||||||
|
File f;
|
||||||
|
FileInputStream fis;
|
||||||
|
OutputStream os;
|
||||||
|
int len;
|
||||||
|
byte[] buf = new byte[4096]; // Puffer um die Datei einzulesen
|
||||||
|
|
||||||
|
f = new File("static" + t.getRequestURI().getPath());
|
||||||
|
|
||||||
|
fis = null;
|
||||||
|
os = t.getResponseBody();
|
||||||
|
try {
|
||||||
|
fis = new FileInputStream(f);
|
||||||
|
// siehe https://www.baeldung.com/java-inputstream-to-outputstream
|
||||||
|
t.sendResponseHeaders(200, f.length());
|
||||||
|
while ((len = fis.read(buf)) != -1)
|
||||||
|
os.write(buf, 0, len);
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
// TODO: proper 404 response
|
||||||
|
// Datei nicht gefunden, stacktrace also unnötig
|
||||||
|
t.sendResponseHeaders(404, 0);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO: proper 500 response
|
||||||
|
t.sendResponseHeaders(500, 0);
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
if (fis != null) fis.close();
|
||||||
|
os.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void handle(HttpExchange t) throws IOException {
|
public void handle(HttpExchange t) throws IOException {
|
||||||
// wir leiten an /main weiter, dort passiert dann die restliche Magie
|
// prüfen, ob WIRKLICH der Root-Endpunkt gemeint ist
|
||||||
t.getResponseHeaders().add("Location", "/main");
|
if (t.getRequestURI().getPath().equals("/")) {
|
||||||
t.sendResponseHeaders(308, 0); // 308 => "Permanent Redirect"
|
// wir leiten an /main weiter, dort passiert dann die restliche Magie
|
||||||
t.getResponseBody().close();
|
t.getResponseHeaders().add("Location", "/main");
|
||||||
|
t.sendResponseHeaders(308, 0); // 308 => "Permanent Redirect"
|
||||||
|
t.getResponseBody().close();
|
||||||
|
} else {
|
||||||
|
// entweder eine statische Datei oder ein ungültiger Pfad
|
||||||
|
handleFileOr404(t);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,8 @@ public class StartView implements HttpHandler {
|
||||||
String response;
|
String response;
|
||||||
OutputStream os;
|
OutputStream os;
|
||||||
|
|
||||||
response = "<h1>Beleg - Startseite!</h1><p>Bitte waehle aus einer der nachstehenden Optionen.</p>";
|
response = Defaults.HTMLHEADER + "<h1>Beleg - Startseite!</h1><p>Bitte waehle aus einer der nachstehenden Optionen.</p>";
|
||||||
|
response += "<p>Ich laufe unter " + System.getProperty("user.dir") + "</p>" + Defaults.HTMLFOOTER;
|
||||||
os = t.getResponseBody();
|
os = t.getResponseBody();
|
||||||
|
|
||||||
t.sendResponseHeaders(200, response.length());
|
t.sendResponseHeaders(200, response.length());
|
||||||
|
|
3
static/style.css
Normal file
3
static/style.css
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
* {
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue