servlet-mapping auf dynamische URLs

Antoras

Top Contributor
Hallo,

ich hab eine dynamisch URL mit der ein Servlet aufgerufen werden soll. Das Problem ist nur, dass das ganze in einer Endlosschleife endet, die mein Servlet immer und immer wieder aufruft. Wenn ich das Servlet direkt aufrufe funktioniert alles, mit einer URL-Erweiterung geht es aber nicht. Was stimmt daran nicht?

web.xml:
[XML]<servlet>
<servlet-name>test</servlet-name>
<servlet-class>de.example.web.DynamicUrlTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/test/*</url-pattern>
</servlet-mapping>[/XML]

Servlet:
Java:
public class DynamicUrlTest extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		req.setAttribute("test", "es geht");
		RequestDispatcher r = req.getRequestDispatcher("test.jsp");
		r.forward(req, resp);	
	}
}

JSP:
HTML:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
	<c:out value="${test}" default="es geht nicht" /><br />
	<a href="test/test">link</a>
</body>
</html>
 
Zuletzt bearbeitet:

mvitz

Top Contributor
Irgendwie hast du dich ein bisschen unklar ausgedrückt.

Was genau machst du und was genau möchtest du damit erreichen?

Evtl. solltest du anstelle von r.forward(...) lieber r.include(...) nutzen?
 

Antoras

Top Contributor
Ich möchte erreichen, dass beim Aufruf des url-paths
Code:
/test
und auch aller untergeordneten searchpaths immer nur das Servlet
Code:
DynamicUrlTest
aufgerufen wird. Grund: Die Pfade existieren nicht und deren Inhalte müssen erst aus der DB geladen werden. Dazu muss ich aber dem Server sagen, welches Servlet er aufrufen soll wenn ein solcher Pfad eingegeben werden soll.

Dies wollte ich mit dem url-pattern
Code:
/test/*
erreichen.

Und noch was zum Unterschied zwischen include() und forward(): Wenn ich nur ein Servlet habe, das den Request verarbeitet (das JSP-generierte mal ausgenommen), dann macht es doch eigentlich keinen Unterschied welche Methode ich nutze, oder? Das ist doch nur wichtig wenn ich selbst mehrere Servlets aufrufe?
 

musiKk

Top Contributor
Das Problem ist doch vielleicht, dass Du z. B. den Pfad [c]/test/gibts/nicht[/c] aufrufst und Dein Servlet macht daraus [c]/test/gibts/test.jsp[/c] (wobei ich mir da nicht sicher bin) und nochmal und nochmal. Ich habe das jetzt nicht im Kopf, wie das mit absoluten und relativen Angaben aussieht, aber hilft es vielleicht, wenn der Pfad nicht [c]test.jsp[/c], sondern [c]/test.jsp[/c] ist oder so?
 

Antoras

Top Contributor
Ja, das Servlet ruft sich selbst immer und immer wieder auf, das hab ich auch schon festgestellt. Ich hab nur keine Ahnung warum es das macht. :bahnhof:
Wo soll ich den Pfad ändern? In der web.xml muss sowieso immer ein Slash vor der URL stehen. Und in der JSP darf kein Slash vor dem Link stehen, sonst würde ja auf das ROOT-Directory zugegriffen werden. Dann müsste ich den kompletten absoluten Pfad setzen - und das ergibt das gleiche Ergebnis.
 

mvitz

Top Contributor
du solltest einfach auf musiKk hören...

Java:
...
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
            IOException {
        req.setAttribute("test", "es geht");
        RequestDispatcher r = req.getRequestDispatcher("/test.jsp");
        r.forward(req, resp);
    }
...

funktioniert bei mir einwandfrei ohne Rekursion.
 

Antoras

Top Contributor
Ok, das geht doch noch nicht so wie ich mir das vorgestellt hatte:

Wenn ich Ressourcen zu meiner JSP hinzufügen möchte (z.B. CSS-Stylesheets) funktioniert das nur für den Pfad
Code:
test
, nicht aber für
Code:
test/test
. Wenn ich die Ressourcen von
Code:
test/test
aus laden möchte, dann lädt der Server nur eine weitere tiefere Ebene (also
Code:
test/test/test
).
Die URLs im HTML-Quelltext bleiben aber die gleichen (
Code:
test/test
). Wie kann ich diese andauernde Rekursion verhindern?
 

mvitz

Top Contributor
Oder setze den Link über c:url z.B. so:
HTML:
...
<link rel="stylesheet" type="text/css" href="<c:url value="/test.css" />" />
...

Damit wird daraus immer:

HTML:
...
<link rel="stylesheet" type="text/css" href="http://[server]/[context]/test.css" />
...

Dein CSS darf sich in dem Fall aber auf keinen Fall im Ordner "test" befinden.
 

Antoras

Top Contributor
Wähle mal einen anderen Namen als "test" für alles mögliche ;)
testLink, testMapping, etc. pp.
Ok, werd mir Mühe geben.

Oder setze den Link über c:url z.B. so:
HTML:
...
<link rel="stylesheet" type="text/css" href="<c:url value="/test.css" />" />
...
Das hat super funktioniert. Danke dir.

Jetzt hab ich nur noch ein Problem: Jedes Mal wenn ich von
Code:
test/dynTest
aus das Servlet aufrufe, wird die dynamische URL an den Pfad gehängt. D.h. den nächsten Pfad den ich bekommen würde, wäre
Code:
test/test/dynTest
usw. Wie kann ich verhindern, dass jedes Mal noch mal der url-path des Servlets zur URL hinzugefügt wird?
 

Antoras

Top Contributor
Hm, das hatte ich vorhin probiert, aber da hat das nichts gebracht. Muss ich wohl was falsch gemacht haben. :bahnhof:

Aber so wie es aussieht läuft das jetzt alles so wie ich mir das vorgestellt habe. Nochmal vielen vielen Dank an alle!

Ach ja, etwas nebensächliches: Um nochmal auf ne Frage von mir von weiter vorne zurück zu kommen:
Und noch was zum Unterschied zwischen include() und forward(): Wenn ich nur ein Servlet habe, das den Request verarbeitet (das JSP-generierte mal ausgenommen), dann macht es doch eigentlich keinen Unterschied welche Methode ich nutze, oder? Das ist doch nur wichtig wenn ich selbst mehrere Servlets aufrufe?
 
Zuletzt bearbeitet:

mvitz

Top Contributor
Also ich habe bisher immer forward benutzt. Evtl. hast du bei dem <c:url> das Value nicht mit einem beginnenden / angegeben?
 

Antoras

Top Contributor
Das Vergessene Slashzeichen kann der Fehler gewesen sein, aber ka. Jetzt geht es auf jeden Fall und das ist die Hauprsache.
 

Antoras

Top Contributor
Mir ist jetzt doch noch ein Fehler aufgefallen:

Vom Servlet möchte ich gern mit der Methode
Code:
getRequestURI()
an den Pfad kommen, damit ich den dazu gehörenden Content laden kann. Das Problem ist nur, dass mir die Methode einen falschen Pfad zurückgibt. Wenn ich in den Browser die URL
Code:
server.de/test/dyn
eingebe gibt mir die Methode
Code:
/test/test
zurück, also zwei Mal den Pfad auf den das Servlet gemapped ist.

Ich hab mir zu Testzwecken ein kleines Codebeispiel gebaut, bei dem ich kurioserweise den richtigen Pfad zurück gegeben bekomme. In meinem Webprojekt funktioniert es hingegen nicht und ich kann nicht erkennen was ich dort falsch gemacht hab. Kann sich jemand vorstellen woran dieses Problem liegen könnte?
 
Zuletzt bearbeitet:

Antoras

Top Contributor
Bei der Methode hatte ich zuerst das gleiche Problem, dass der Pfad, mit dem ich das Servlet aufrufe, nicht korrekt zurückgegeben wurde. Ich hab den Fehler jetzt aber gefunden:

Ich hab ein POST-Formular, das mein Servlet aufruft. Dabei hatte ich nicht bedacht, dass der Aufruf des Servlets ja auch über eine dynamische URL erfolgen muss. Hab jetzt also an den action-value den dynamisch generierten Pfad angehängt und jetzt gehts. ;)

Hoffe, dass das jetzt das vorerst letzte Problem war.

mfg
Antoras
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Servlet-Mapping Allgemeines EE 9
T Servlet-Mapping und Welcome-File-List unter Websphere? Allgemeines EE 2
G Jakarta Servlet API 5.0 Allgemeines EE 1
pkm Frage wegen AJAX-Zugriff auf ein Servlet Allgemeines EE 1
Dimax Servlet Servlet Kommunikation Allgemeines EE 18
K Unterschied zwischen JSP & Servlet gegenüber REST mittels JAX-RS Allgemeines EE 1
Dimax Servlet läuft in Eclipse, aber nicht im Browser Allgemeines EE 74
M URL Servlet Request getParameter Allgemeines EE 2
M Servlet Methoden Aufruf im Servlet Allgemeines EE 10
J 404 Not found (Servlet) Allgemeines EE 1
J Asynchrones Servlet löst NullPointerException aus Allgemeines EE 5
E Servlet Servlet das richtige? Allgemeines EE 11
B HTTP-Header-Inspektor-Servlet Allgemeines EE 1
N JSP Servlet mit JSP ansprechen Allgemeines EE 2
F Mehrere Bilder aus MySQL DB via Servlet darstellen. Allgemeines EE 1
J FTP und Servlet Allgemeines EE 11
H Post an Servlet Allgemeines EE 2
A Binärdatei vom Servlet erzeugen lassen Allgemeines EE 3
S Servlet Authentication Filter Allgemeines EE 0
S LDAP JAAS oder Servlet Allgemeines EE 0
G Problem: Servlet in JSP einbinden mit <jsp:include> Allgemeines EE 3
F eigene Anwendung per Servlet Container starten Allgemeines EE 9
F Servlet Daten im Speicher ablegen Allgemeines EE 3
L Servlet ClassNotFoundException Servlet Allgemeines EE 3
G Allgemeine Frage zu Authentifizierung mittels Servlet API Allgemeines EE 2
J Servlet "package does not exist" Allgemeines EE 5
0 Servlet mit ArrayList Allgemeines EE 3
E Servlet unter mehreren Adressen Allgemeines EE 16
S Pfad-Zugriff über Servlet-init() Allgemeines EE 2
E Servlet Wie kann ich ohne Hilfe von Eclipse in JBoss mein servlet aufrufen Allgemeines EE 2
S Servlet.service() threw exception Allgemeines EE 4
A Servlet erkennt request Objekt nicht Allgemeines EE 8
G Direkter Zugriff auf Servlet- doPost Allgemeines EE 15
G Servlet doGet, doPost Allgemeines EE 3
A Kodierungsproblem bei Parameterübergabe von Browser an Servlet (GET) Allgemeines EE 2
0 Problem mit librarys javax.servlet.http.HttpServletRequest cannot be resolved Allgemeines EE 1
MQue Ajax - Servlet Allgemeines EE 2
MQue Servlet Allgemeines EE 9
S [Design] Dynamischer EJB Aufruf von Servlet Allgemeines EE 3
S Servlet auf JBoss 5? Allgemeines EE 11
B HttpSession bekommen wenn nicht in Servlet Allgemeines EE 8
MQue Servlet / Button Allgemeines EE 5
S In Eclipse werden die "Servlet-Klassen" nicht gefu Allgemeines EE 2
U javax.faces und javax.servlet cannot be resolved Allgemeines EE 2
W Potentielles Memory Leak bei Servlet Allgemeines EE 6
B unterschied servlet und bean Allgemeines EE 2
Escorter Servlet .sar und jede Menge .jar Archive Allgemeines EE 2
N Servlet und JSF (URL-Rewriting)? Allgemeines EE 3
A jsf: Servlet aufrufen, wie geht das? web.xml Fehler? Allgemeines EE 13
N Servlet zyklisch aktualisieren Allgemeines EE 2
zilti Verbindung Applet <-> Servlet Allgemeines EE 5
ARadauer Servlet Bild Rückgabe Allgemeines EE 2
I Über Formular Daten zu Servlet Allgemeines EE 36
H Servlet - Zwischenmeldung anzeigen bei längerer Berechnung Allgemeines EE 2
G Ordner mit Umlauten einlesen - Servlet Allgemeines EE 3
A web.xml für Servlet in Tomcat 5.5 erstellen Allgemeines EE 2
M Zwei Buttons in einem Servlet Allgemeines EE 2
M Servlet lässt sich nicht aufrufen Allgemeines EE 6
A web.xml für Servlet in Tomcat erstellen Allgemeines EE 6
B Servlet Allgemeines EE 3
G EJB - EJB wird nicht ins Servlet geladen Allgemeines EE 3
K load-on-startup -> in der Servlet Klasse Allgemeines EE 6
G Objekt an Servlet übergeben - oder Objekt global definieren? Allgemeines EE 4
W Was bei Servlet-Entwicklung alles beachten? Allgemeines EE 8
R Zugriff auf Filter Servlet Allgemeines EE 10
I JBOSS Jsp Files Pfad im Servlet? Allgemeines EE 4
N Servlet-Request abbrechen? Allgemeines EE 3
D Java Servlet mit Radio Buttons Allgemeines EE 2
G Servlet debugging Allgemeines EE 8
N Thread von Servlet aus starten Allgemeines EE 16
N JSP: Collection im Servlet überwachen (mit AJAX)? Allgemeines EE 5
J Socket daten darstellen per jsp,servlet Allgemeines EE 2
W servlet über https Allgemeines EE 2
L Servlet kann Funktion nicht aufrufen Allgemeines EE 3
B Parameterübergane von Servlet an JSP funktioniert nicht ? Allgemeines EE 2
M Aus einem Servlet auf ein anderes zugreifen ? Allgemeines EE 2
G Servlet Serializable Allgemeines EE 2
B Servlet-Api.jar auf JBoss? (Migration von Tomcat zu JBoss) Allgemeines EE 4
H Servlet - Importieren von Code Allgemeines EE 2
P Java Servlet - Umgang mit Verlinkungen Allgemeines EE 7
M Wert aus Servlet an normale Klasse übergeben Allgemeines EE 2
E Servlet soll JFRame öffnen. Jframe.setvisible schlägtfehl Allgemeines EE 2
M servlet --> jsp - problem beim umstrukturieren Allgemeines EE 5
D Servlet Problem über Server Allgemeines EE 26
K Servlet per Formular aufrufen Allgemeines EE 8
L sessions mit servlet oder jsp ? Allgemeines EE 9
B JSF - Servlet mit Parametern über einen Link öffnen Allgemeines EE 3
D Binärdaten im Servlet entgegen nehmen, aber wie? Allgemeines EE 5
T Servlet-Instanzen und ServletContext Allgemeines EE 2
L speichern von daten mittels servlet in xml Allgemeines EE 8
N Collection überwachen (Servlet + AJAX) Allgemeines EE 3
N Liste mit Checkboxen an Servlet übergeben? Allgemeines EE 3
T Wie Datenbank und Servlet koppeln? Allgemeines EE 3
G Ladeseite anzeigen lassen während das Servlet noch arbeitet? Allgemeines EE 6
P Tomcat Servlet POST Daten als Array Allgemeines EE 2
P PDF per Servlet übertragen, danach keinen Inhalt mehr Allgemeines EE 12
N JSP kann Servlet nicht aufrufen! :-( Allgemeines EE 2
J Servlet Parameter aus web.xml übergeben, wie zugreifen? Allgemeines EE 2
L servlet.jar ? Allgemeines EE 2
K Servlet: Respone.redirect mit POST-Parametern Allgemeines EE 5

Ähnliche Java Themen

Neue Themen


Oben