# Formularweiterleitung an Servlet



## kwonilchang (24. Sep 2010)

Hallo!

Versuche, mich in Servlets/JSP einzuarbeiten. Allerdings macht mir die Weiterleitung zwischen den einzelnen Komponenten ziemliche Schwierigkeiten. Ich programmiere mit Eclipse Java EE.

Folgendes Problem: Ich habe ein Projekt login. Im src-Ordner befinden sich meine Servlets. Das Startservlet wird im Eclipse ausgeführt und das Forward auf eine JSP-Seite klappt auch. Die JSP-Seite enthält ein Formular. Bei Betätigung des Submitbuttons sollen die eingegebenen Daten an ein anderes Servlet geleitet werden. Mein Problem liegt hier nun in der Definition des action im form-Tag. Ich habe es schon mit absoluten Links zu den .java und .class -Dateien der Servlets versucht, aber das klappt alles nicht.

Kann mir jemand sagen, wie ich hier den Speicherort des zweiten Servlets in der action deklarieren muss?

Danke schonmal und viele Grüße!


----------



## Atze (25. Sep 2010)

in den servlets interessiert der speicherort garnicht! die aufgerufene url ist entscheidend. in deiner web.xml legst du mit dem servlet-mapping ja fest, welches servlet bei den entsprechenden aufrufen greifen sollen.


```
<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>test.HelloServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
```

wenn der aufruf der action hier in dem falle mit ".../hello" endet, trifft das url-pattern und das servlet mit dem namen "hello" wird aufgerufen. im tag "servlet" wird dann nach dem ort (klasse im package) gesucht und dieses angesprochen.


----------



## JohannisderKaeufer (25. Sep 2010)

Die URL unter der Servlets erreicht werden können wird in der web.xml festgelegt.
Die nötigen Daten sind meist diese
[XML]
<servlet>
  <servlet-name/>
  <servlet-class/>
</servlet>
<servlet-mapping>
  <servlet-name/>
  <url-pattern/>
</servlet-mapping> [/XML]

Die web.xml ist einmal unter Webcontent/Web-Inf/web.xml zu finden oder in Eclipse JEE-View als Deployment Descriptor.
Abhängig davon was dort definiert, bzw. nicht definiert wurde, befindet sich das Servlet unter unter der in url-pattern angegebenen Adresse.

Diese Adresse ist dann auch das Ziel deines Formulars.


----------



## kwonilchang (25. Sep 2010)

Danke euch beiden für eure Antworten. Ich komm aber immer noch nicht weiter...

Nach dem Abschicken des Formulars bekomme ich die Fehlermeldung, dass das zweite Servlet nicht verfügbar ist. Habe gerade in der web.xml das zweite Servlet mal als Startservlet eingetragen. So wird es ohne Probleme aufgerufen. :-(

Hier mal im Code:
 web.xml

```
<welcome-file-list>
    <welcome-file>start-servlet</welcome-file>
  </welcome-file-list>
  
  <servlet>
  <servlet-name>servlet2</servlet-name>
  <servlet-class>StartServlet</servlet-class>
  </servlet>
  
  <servlet>
  <servlet-name>servlet3</servlet-name>
  <servlet-class>LoginCheckServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>servlet2</servlet-name>
    <url-pattern>/start-servlet</url-pattern>
    </servlet-mapping>
    
    <servlet-mapping>
    <servlet-name>servlet3</servlet-name>
    <url-pattern>/login-check-servlet</url-pattern>
  </servlet-mapping>
```

Aufruf des zweiten Servlets (login-check-servlet) im Formular:


```
<form action="/login-check-servlet" method="post">
```

Muss ich in der web.xml einen kompletten Pfad als URL-Pattern abspeichern? Oder einen kompletten Pfad als action eintragen? Wenn ja, welchen? Ich habe schon alles mögliche ausprobiert. 

Ach ja, das Formular ist in einer JSP-Seite im Ordner workspace\Login\WebContent\WEB-INF\jsp
Die Servlets liegen in workspace\Login\src


----------



## Atze (25. Sep 2010)

eigentlich sollte der gesamte packagepfad angegeben werden unter <servlet-class>.
obs im default-package auch geht ohne angabe weiß ich jetzt garnicht. aber jede anständige anwendung sollte sowieso gefühlsmäßig in ner package struktur untergebracht sein, imho!


----------



## kwonilchang (26. Sep 2010)

Danke nochmal. Muss gestehen, dass ich mit den Packages immer durcheinander komme und deshalb lieber ohne arbeite. Den Fehler beim Aufruf in der action hab ich jetzt gefunden. Im Pfad bin ich statt mit einem . mit .. zurückgesprungen. Jetzt läuft soweit mal alles.


----------

