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
|
||||
|
||||
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.
|
||||
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<target name="doc">
|
||||
<mkdir dir="doc"/>
|
||||
<javadoc sourcepath="src" destdir="doc">
|
||||
<javadoc destdir="doc">
|
||||
<fileset dir="src">
|
||||
<include name="**"/>
|
||||
</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
|
||||
*/
|
||||
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?)
|
||||
// Alle unbekannten Anfragen die mit / starten werden also an die RootView gegeben
|
||||
// Statische Dateien werden auch von der RootView verarbeitet
|
||||
// TODO: Error Handling!!!
|
||||
s.createContext("/", new RootView());
|
||||
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
|
||||
* zu vermeiden und um besser vom eigentlichen Backend zu abstrahieren sind viele
|
||||
* einfache Abfragen als Methode umgesetzt.
|
||||
* <p>
|
||||
* Denkbar ist zum Beispiel eine Implementation auf LDAP-Basis.
|
||||
*/
|
||||
public class Model {
|
||||
|
||||
private ArrayList<Student> students;
|
||||
private ArrayList<Resource> resources;
|
||||
private ArrayList<Group> groups;
|
||||
|
||||
/**
|
||||
* Initialisiert ein leeres Model.
|
||||
|
@ -21,6 +24,7 @@ public class Model {
|
|||
public Model() {
|
||||
students = new ArrayList<Student>();
|
||||
resources = new ArrayList<Resource>();
|
||||
groups = new ArrayList<Group>();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -29,8 +29,9 @@ public class AuthView implements HttpHandler {
|
|||
// TODO: Versuchen zu autorisieren
|
||||
login = true;
|
||||
} 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 += Defaults.HTMLFOOTER;
|
||||
t.sendResponseHeaders(200, response.length());
|
||||
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;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
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.
|
||||
|
@ -14,11 +17,48 @@ import com.sun.net.httpserver.*;
|
|||
*/
|
||||
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 {
|
||||
// wir leiten an /main weiter, dort passiert dann die restliche Magie
|
||||
t.getResponseHeaders().add("Location", "/main");
|
||||
t.sendResponseHeaders(308, 0); // 308 => "Permanent Redirect"
|
||||
t.getResponseBody().close();
|
||||
// prüfen, ob WIRKLICH der Root-Endpunkt gemeint ist
|
||||
if (t.getRequestURI().getPath().equals("/")) {
|
||||
// wir leiten an /main weiter, dort passiert dann die restliche Magie
|
||||
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;
|
||||
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();
|
||||
|
||||
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