# Webapp spielt verrückt



## chemiker (23. Dez 2011)

Hi Community,

ich wende mich mit einem Problem an euch, das mich bereits mehrere Tage beschäftigt.
Ich hab eine JAVA-Webapplikation, die auf einem Apache Tomcat Server v6 läuft. Ich verwende JRE6.

Nun zu meinem eigentlichen Problem:
- auf meinen JSPs werden keine .css files importiert und auch Bilder werden nicht geladen (egal, wie ich die URL setze, wobei sie richtig sein müsste)
- sobald ich einen absoluten Pfad eingebe, kommt bei mir immer die Seite, die ich als Startseite angelegt habe (kann also auch keine Bilder o.ä. direkt ansprechen, ich werde immer auf meine Startseite weitergeleitet)

Ich hab schon überlegt, ob es an der web.xml liegt, aber ich komm nicht dahinter, was falsch sein könnte.

Unten kleine Ausschnitte aus meinen Klassen / Dateien:

web.xml:

```
<web-app 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
			xmlns="http://java.sun.com/xml/ns/javaee" 
			xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 	
			xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
			id="WebApp_ID" version="2.5">
  <display-name>Simplective</display-name>
  <welcome-file-list>
  	<welcome-file>/</welcome-file>   
  </welcome-file-list>
  <servlet>
    <display-name>NavigationHandler</display-name>
    <servlet-name>NavigationHandler</servlet-name>
    <servlet-class>com.simplective.controller.NavigationHandler</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>NavigationHandler</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
```

NavigationHandler.java:

```
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		
		getServletContext().getRequestDispatcher("/pages/startpage.jsp").forward(request, response);
	}
```

aus der startpage.jsp:

```
<img src="images/logos/opensource.png" width=130px height=100px>
	<img src="/images/logos/opensource.png" width=130px height=100px>
	<img src="./images/logos/opensource.png" width=130px height=100px>
	<img src="../images/logos/opensource.png" width=130px height=100px>
```
Anmerkung: KEINS der Bilder wird angezeigt, es existiert aber!! Und liegt auch im richtigen Pfad!

Meine Ordnerstruktur:
angehängt

Beispiel-URL:
Egal, ob ich http://localhost:8080/Simplective/ aufrufe (was ja das Servlet anspricht, was auch an die richtige JSP-Seite weiterleitet) oder http://localhost:8080/Simplective/blablub_irgendeinblöder&SinnloserText.wasweißich eigebe, es kommt immer bei der gleichen JSP-Seite raus.

Ich wäre euch für jede Hilfe oder jeden Gedanken dankbar.
Wenn ihr mehr braucht, bitte einfach melden, ich lad euch alles hoch, solang es was hilft 

Viele Grüße
Stefan


----------



## mvitz (24. Dez 2011)

Hallo,

dein eigentliches Problem ist, dass dein url-pattern alles abfängt (und somit auch die Request zu deinen Bildern und deinen CSS Dateien). Du musst also hierfür ein anderes schreiben, oder dafür sorgen, dass dein Servlet eben auch Bilder und andere Dateien senden kann (was ich nicht empfehlen würde).

Das zweite Problem ist anschließend, dass du wissen willst, wie man am besten die URLs für solche Ressourcen zusammenbaut. Anbei ein funktionierendes Beispiel, wobei die hierfür die JARs für die JSTL benötigst, siehe Screenshot):

[XML]<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"
    id="WebApp_ID" version="2.5">
  <welcome-file-list>
    <welcome-file>/view</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>NavigationHandler</servlet-name>
    <servlet-class>com.simplective.controller.NavigationHandler</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>NavigationHandler</servlet-name>
    <url-pattern>/view/*</url-pattern>
  </servlet-mapping>
</web-app>[/XML]

```
package com.simplective.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class NavigationHandler extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        getServletContext().getRequestDispatcher("/pages/startpage.jsp").forward(req, resp);
    }
	
}
```


```
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  <head>
    <title>Test</title>
  </head>
  <body>
    <h1>Test</h1>
    <img src="/test/images/ordnerstruktur.png" />
    <img src="<c:url value="/images/ordnerstruktur.png" />" />
  </body>
</html>
```

Bei obigem Beispiel funktioniert jetzt allerdings auch das direkte aufrufen der JSP Dateien über /test/pages/startpage.jsp. Da man dies bei einem Frontcontroller Ansatz, den du gewählt hast, eigentlich vermeiden möchte, empfiehlt es sich, den pages Ordner unter WEB-INF abzulegen. Anschließend hast du nur noch über den RequestDispatcher Zugriff auf die JSPs und diese können nicht mehr direkt von außen erreicht werden.


----------



## chemiker (24. Dez 2011)

Hi mvitz,

vielen Dank für deine super Antwort!
War genau das, was mir gefehlt hat. Jetzt funktioniert alles 1-A 
Den pages-Ordner zu verschieben werd ich auch probieren, das wusste ich bis jetzt auch noch nicht.

Nochmal danke, Daumen hoch :toll:


----------

