PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servlet von (statischer) HTML-Seite aus ansprechen


Der_Korken
2012-12-06, 13:24:04
Hallo, ich hoffe jemand kann mir dem kleinen Problem helfen, das ich habe.

Ich habe eine HTML-Seite erstellt und möchte von dieser aus auf ein Servlet weiterleiten, welches ich geschrieben habe. Dazu kann ich z.B. im Header folgende Zeile verwenden:

<meta http-equiv="refresh" content="0; http://localhost:8080/myProject/login/">

Das Web-Projekt heißt myProject und das Servlet soll über "/login/" angesprochen werden. Die aufrufende HTML-Seite befindeet sich auch im Projektordner, da wo auch der "WEB-INF"-Ordner ist.

Hier der Code der web.xml für das Servlet-Mapping:


...
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>login.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login/*</url-pattern>
</servlet-mapping>
...

Das funktioniert auch soweit ganz gut, das Problem ist aber, dass es nur dann funktioniert, wenn ich die HTML-Seite von meinem Rechner aus aufrufe, sprich von dem Rechner, wo das Servlet gehostet ist. Andere Rechner können so nicht auf das Servlet zugreifen, wenn sie dem Link aus der HTML-Datei folgen. Wie kann ich die Adresse in der HTML-Datei so umbiegen, dass sie auch von jedem Rechner aus funktioniert?

Wenn ich den Host weglasse und nur "/login/" benutze, dann bekomm ich immer die Fehlermeldung, dass eine solche Datei nicht existiert. Das ist natürlich richtig, sie existiert im File-System nicht, aber ich will ja auch das Servlet haben und keine Datei.

Da steh ich gerade ziemlich aufm Schlauch ...

Black-Scorpion
2012-12-06, 18:34:14
Logisch, weil jeder Rechner bei dem Link auf seinen Rechner sucht.

Localhost = der Rechner von dem der Link aufgerufen wird.

Damit es im Netzwerk funktioniert musst du am einfachsten deine IP angeben.

Der_Korken
2012-12-06, 19:31:12
You don't say :D

Das Problem war, dass das ganze auf einem beliebigem Host laufen können soll. Da kann ich natürlich nicht in die Dateien irgendwelche konstanten IPs reinschreiben. Mittlerweile hab ich das Problem mit ein wenig Hilfe aber gelöst bekommen. Falls irgendwer mal danach sucht, schreib ichs trotzdem mal auf:

1. Es heißt "login" und nicht "/login/". Ohne "/" am Anfang wird "login" als symbolischer Name und nicht als Pfad/Datei angesehen.

2. Das URL-Pattern heißt jetzt "/login" statt "/login/*". Mit letzterem hab ichs nicht mehr getestet

3. Ich hab es immer im Browser mit "localhost:8080/myProject/login" versucht. Damit funktionierte es nie. Da es aber in der Entwicklungsumgebung (Eclipse) funktionierte wurde ich stutzig und siehe da: Mit "127.0.0.1:8080/myProject/login" funktioniert alles perfekt. Den Unterschied versteht zwar keiner, aber immerhin hab ichs durch Zufall irgendwann mal rausgefunden :freak:

Schönen Abend noch :cool:

Gast
2012-12-07, 09:24:22
Das Problem war, dass das ganze auf einem beliebigem Host laufen können soll. Da kann ich natürlich nicht in die Dateien irgendwelche konstanten IPs reinschreiben.
Dafür hat man eigentlich Domains erfunden :)

Gast
2012-12-09, 23:37:39
ne so macht man das aber nich..

dafür gibts servervariablen

wenn z.b einmal die anwendung auf port 80 rennt und dann wieder auf 8080 ist das ganze kaputt.

für sowas gibts sogenannte servervariablen, das sind variablen die serverseitig schon vordefiniert sind. in php z.b. sind das so dinger wie PHP_SELF oder PHP_HOME oder keine ahnung. unter asp.net und jsp gibts diese variablen auch leider habe ich vergessen wie diese sich nennen.

ausserdem sollte man nicht unbedingt durch ein meta refresh auf eine seite weiterleiten. normalerweise löst man sowas per script, indem man eine funktion aufruft, die die weiterleitung dann vornimmt, was in der regel dann auch ohne besondere zeitverzögerung funktionieren sollte, wenn das zielscript auf dem selben server liegt. ansonsten besteht noch die möglichkeit das script direkt in eine einzige datei einzubinden und die daten erst anzuzeigen wenn man z.b. auf einen link klickt, oder durch weiterleitung nur über eine bestimmte url weiterleitet (in php mod_rewrite, gibts in asp.net und jsp ebenfalls) das wäre je nach anforderung vielleicht eleganter.

Gast
2012-12-09, 23:43:39
und siehe da: Mit "127.0.0.1:8080/myProject/login" funktioniert alles perfekt. Den Unterschied versteht zwar keiner, aber immerhin hab ichs durch Zufall irgendwann mal rausgefunden :freak:
ich glaube nicht dass localhost und 127.0.0.1 dasselbe repräsentiert. eigentlich sollte aber der aufruf unter localhost aber auch funktionieren. könnte sein dass das per default irgendwo in einer konfigurationsdatei bzw. der adminoberfläche deaktiviert ist oder die anmeldungsart wurde nicht genau spezifiziert (erinnere mich leider nicht mehr an die details..).