# Servlet -> JSP forward und relative Pfade



## egrath (2. Jun 2008)

Hallo,

ich bin gerade dabei mich mit JSP und Servlets zu beschäftigen - habe dabei folgendes Problem:


 Wenn ich aus dem Servlet mittels eines RequestDispatchers zu einem JSP forwarde, so werden die in diesem JSP relativ referenzierten Elemente (Images, Stylesheets) nicht gefunden

Ich nehme an, dass das Problem deshalb besteht weil der forward vermutlich nichts anderes macht als die Ausgabe des JSP Dokuments in den Ausgabestrom zum Browser zu schreiben - und da das Serlvet in einem anderen Pfad liegt als das JSP werden die eingebetteten Dinge nicht mehr gefunden.

/index.jsp:

```
<%@page language="Java" contentType="text/html" pageEncoding="UTF-8"%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <form action="servlets/MyServlet" method="POST">
            <input type="submit" value="Click!" />
        </form>
        [img]img/back.png[/img]
    </body>
</html>
```

MyServlet.java:

```
package egrath.test;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

@SuppressWarnings( "serial" )
public class MyServlet extends HttpServlet
{
    @Override
    public void init( ServletConfig conf )
    throws ServletException
    {
        super.init( conf );
    }
    
    @Override
    public void doGet( HttpServletRequest req, HttpServletResponse resp )
    throws ServletException, IOException
    {
        doPost( req, resp );
    }
    
    @Override
    public void doPost( HttpServletRequest req, HttpServletResponse resp )
    throws ServletException, IOException
    {        
        this.getServletContext().getRequestDispatcher( "/index.jsp" ).forward( req, resp );
    }
}
```

Der Testcode hier sollte eigentlich nichts anderes machen als nach einem Klick auf den Button in der JSP das Servlet zu aktivieren, welches wiederum auf das JSP forwardet. (Tuts auch, nur die Grafik wird nicht mehr dargestellt)

Das Servlet ist nach /servlets/MyServlet gemappt.

Kann man dieses verhalten irgendwie modifizieren dass ich weiterhin relative Pfade in den JSP's verwenden kann?

Danke und Grüsse,
Egon


----------



## maki (2. Jun 2008)

Nimm doch absolute URL um Ressourcen in JSPs zu verwenden.
/deinWebappContext/img/...


----------



## egrath (2. Jun 2008)

Hallo,

ja das könnte ich und dann würde es auch funktionieren. Da ich allerdings die JSP's nicht händisch oder in der IDE erstelle sondern im Dreamweaver sehe ich dadurch nicht die Grafiken im WYSIWYG Editor ;-)

Wenns nicht anders geht muss ich es wohl oder übel eh so machen und seh halt dann im Editor nur die Platzhalter der Grafiken. Aber vielleicht gibts ja eine Möglichkeit ;-)

Grüsse,
Egon


----------



## HLX (2. Jun 2008)

Wie sieht denn die web.xml aus?


----------



## egrath (2. Jun 2008)

Hallo,

web.xml:

```
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <display-name>JSP Test Application</display-name>
    <servlet>
        <description>Simple Servlet Test</description>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>egrath.test.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/servlets/MyServlet</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
```

... wurde von NetBeans erzeugt, von mir wurde nur der eintrag für das Servlet hinzugefügt (auch über die IDE)

Grüsse,
Egon

/edit: Nachtrag

Mittlerweile löse ich es so, dass ich in den JSP's vor jedes referenzierte Element den aktuellen Context Path schreibe, also z.b:


```
[img]${pageContext.request.contextPath}/img/back.png[/img]
```

... gefällt mir halt nicht sonderlich von der Lösung her aber wenns nicht anders geht werde ich damit leben.


----------



## maki (2. Jun 2008)

> ... gefällt mir halt nicht sonderlich von der Lösung her aber wenns nicht anders geht werde ich damit leben.


Ist imho die beste Lösung 

Absolute URLs + parametrisierter Context


----------

