Über Formular Daten zu Servlet

Status
Nicht offen für weitere Antworten.

IceTi

Bekanntes Mitglied
Hallo,

ich möchte in einer JSP Datei über ein Formular einem Servlet Daten schicken.
Das Servlet steht soweit und hat auch die doPost Methode.

Doch was genau muss ich beim Formular bei action="" angeben?
Der Name des Servlets funktioniert leider nicht.
Eine web.xml habe ich auch nicht.

Danke
 
Du brauchst grundsätzlich eine web.xml. Diese sollte u.a. folgenden Eintrag enthält

Code:
<servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>myPackage.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/callMyServlet</url-pattern>
</servlet-mapping>

Das URL-Pattern führt dich dann innerhalb der Anwendung zum Servlet.
 
Bei der action="" trage ich dann also "callMyServlet" ein, oder?

Leider funktioniert das so immer noch nicht.
Die xml Datei liegt bei mir im WEB-INF Odrner (ich arbeite mit Eclipse)
 
Den Context deiner Webanwendung, willst sie ja wohl kaum als Root Context laufen lassen.
 
???

Es soll ein Registrierungsformular werden.
Hat doch aber nichts mit dme Problem zu tun oder ?
 
IceTi hat gesagt.:
???

Es soll ein Registrierungsformular werden.
Hat doch aber nichts mit dme Problem zu tun oder ?
Wenn das Problem ist, dass du dich offensichtlich nicht genug mit Servlets auseinandrgesetzt hast, dann schon 😉

Sorry, aber der Context ist wichtig, eine der Grundlagen.

Du willst doch sicher das deine Anwendung auch auf einem Tomcat Server normal laufen kann, oder?
 
Gut

Zum Registrieren hast ja sicher nen Button oder irgendwas mit dem de auf das Servlet verlinken kannst. 🙂

im form teil und action schreib ich normal nie was außer ich glaube, wenn du statt Button Submit als input type nimmst kannste da das Servlet reinschreiben. bin ich etz aba ned sicher... Auf jeden Fall solltest du im form teil einen Namen haben und als methode eben post oder get je nach dem was du nutzt.

So. Meine methode ist es im javascript teil eine function zu definieren z.b.:

Code:
<script type="text/javascript">

	function subm()
	{
		document.form1.action="<%=getServletContext().getContextPath()%>/LoginServlet";
		document.form1.submi.value="login";
		document.form1.submit();
		document.form1.submi.value="";
	}

</script>

So. Da die normalen Buttons doof sind sag ich ihm noch, dass er doch bitte beim click die function laden soll:

Code:
<input type="button" name="btSend" value="Anmelden" onclick="subm()" />
<input type="hidden" name="submi" />

mit "onclick"

dieses komische hiddenfeld braucht man, weil.... gute frage ich weiß nur, dass der button irgendwie zu blöd zum kommunizieren ist und deswegen das hidden-feld dafür einspringen muss ^^

So. Ist das nun geschafft, sollte eigentlich beim klick auf den Button das gewünschte Servlet (hier: LoginServlet) gestartet werden. Dort kann man dann mit den übergebenen Parametern (hier: "login") alles anstellen was man möchte.

So mach ich das zumindest immer. Gibt bestimmt noch schönere wege 🙂


cya
 
Ja genau ich habe einen Button.
Es wird halt nur das Servlet nicht gefunden... habe ich jetz schon mit vielen Beispielen vergliechen, ich finde einfach keinen Fehler mehr ...
 
IceTi hat gesagt.:
Es läuft ja schon auf einem TomCat...
Ich denke es liegt irgendwie am Pfad...
Das glaubst du vielleicht 😉

In manchen IDEs/Tomcat Plugins wird immer er ROOT context verwendet, keine gute Idee imho, auf dem Prod Server gibt's dann 404 Fehler.

Es ist schon möglich eine Webapp ohne Kontext zu betreiben, aber sehr schäbig.
Es ist aber nicht möglich eine vernünftige Webapp ohne Grundkenntnisse zu schreiben.

"Bildung bremst nicht.."
 
Code:
<%=getServletContext().getContextPath()%>
Na also, da hat jemand seine Hausaufgaben gemacht 🙂
 
Ja aber kann ich das nicht einfach anders schrieben dann ?
Oder wie mache ich diesen Kontext ?
 
IceTi hat gesagt.:
Es wird halt nur das Servlet nicht gefunden... habe ich jetz schon mit vielen Beispielen vergliechen, ich finde einfach keinen Fehler mehr ...

Kannst ja evtl. mal Codeschnipsls posten, vielleicht findet ja jmd. was und ist dann auch noch so nett es zu sagen. 🙂
 
Und die Lösung?

So viel Zeit sollte sein.....Finde ich... 🙂
(Und Haken setzen nicht vergessen ^^)
 
<%=getServletContext().getContextPath()%>

hat es ermöglicht, dass das servlet auch gefunden wurde... dann hatten wir eine leere seite vor uns.

Die Ausgaben auf der folgenden Seite haben uns dann nochmal kurz geärgert, aber das ging dann auch fix...

Jetzt müssen wir die Registrierung weiter coden, also fertig ist es noch nicht. Aber immerhin wissen wir nun wie wir weiter kommen 🙂

Danke nochmal
 
Hi,

ich habe es nun geschafft Daten von einem Formular an ein Servlet zu schicken.
Doch wird dann halt das Servlet im Browser angezeigt.
Wie mache ich das, dass das Servlet eine anderen Seite aufruft ?

Oder welche Möglichkeiten gibt es da noch, das Servlet erst gar nicht anzuzeigen?

DANKE
 
Heho,

also wenn ich mich nicht täusche musst du dem Servlet in der verwendeten Methode (post/get) sagen, dass es die JSP wieder aufrufen soll.

Das müsste in etwa so aussehen:

Code:
protected void doPost / doGet(HttpServletRequest request, HttpServletResponse response)
{
     ...
     request.getRequestDispatcher(index.jsp).forward(request, response);
}

Dann solltest du aber natürlich alles was du ausgeben möchtest in die JSP laden.
Und falls du bei richtigem Login zu einer anderen Seite möchtest logischerweise das index.jsp einfach durch AndereSeiteDieGeladenWerdenSoll.jsp ersetzen. :-D

Ich schau morgen aba nochmal nach ob das wirklich so ging... :###

Edit: Jop. Passt so wie es dasteht. Man kann statt forward auch include nehmen, was genau allerdings der Unterschied ist wissen wohl nur Google und Wikipedia ;-)
 
Mich hat das mit dem Kontext ein wenig verwirrt, denn bei mir hat es so geklappt:

Code:
<html>
<head>
<title>Mail Versand</title>
</head>
<body>


<form action="modules/mail">


To:

<input name="to" type="text" size="30" maxlength="30"></p>


Subject:

<input name="sub" type="text" size="30" maxlength="40"></p>


Message:

<textarea name="msg" cols="50" rows="10"></textarea></p>
<input type="submit" value=" Absenden "></form>
</body>
</html>

und wenn ich versuch, den Kontext einzubauen, sagt er, dass er die Methode getContextPath() nicht findet, was mach ich falsch?

Code:
<html>
<head>
<title>Mail Versand</title>
</head>
<body>


<form action="<%=getServletContext().getContextPath()%>/modules/mail">


To:

<input name="to" type="text" size="30" maxlength="30"></p>


Subject:

<input name="sub" type="text" size="30" maxlength="40"></p>


Message:

<textarea name="msg" cols="50" rows="10"></textarea></p>
<input type="submit" value=" Absenden "></form>
</body>
</html>

mit
Code:
<%=request.getContextPath()%>
gehts auch wieder. Bekomm ich da ein anderes ServletContext-Objekt zurück als ihr, dass er die Methode getContextPath() nicht findet?
 
Man kann statt forward auch include nehmen, was genau allerdings der Unterschied ist wissen wohl nur Google und Wikipedia icon_wink.gif
Steht auch in der Doku und in jedem halbwegs guten Servlet Buch 😉
In diesem Falle wäre der forward wohl die richtige Wahl.

und wenn ich versuch, den Kontext einzubauen, sagt er, dass er die Methode getContextPath() nicht findet, was mach ich falsch?
Nach welchen Servletstandard arbeitet deine Webapp?
 
Meinst du die specification-Version? Das ist 2.4. Ich nehm halt das servlet-api.jar welches beim Tomcat 5.5.23 dabei ist
 
Ok, alles klar, hab gerade nachgeschaut, gibts erst ab spec 2.5, danke für den Denkanstoß!
Warum funktioniert es aber auch mit action="modules/mail"? Die webapp läuft nicht als root, liegt ganz normal unter webapps...
 
Niki hat gesagt.:
Ok, alles klar, hab gerade nachgeschaut, gibts erst ab spec 2.5, danke für den Denkanstoß!
Warum funktioniert es aber auch mit action="modules/mail"? Die webapp läuft nicht als root, liegt ganz normal unter webapps...
Wie heisst denn deine Webapp? (Ist normalerweise auch der Context)

Es ist möglich einer Webapp mehrere Contexte zuzuweisen, allerdings werden diese dann wie unterschiedliche Anwendungen behandelt, da kann man sich ganz tolle Fehler damit bauen, die erst in der Produktion richtig auffallen 😉
 
Es dürfte nur gehen wenn die jsp nicht im ordner jsp liegt, sondern im root von der webapp! Jetzt ist mir das ganze auch klar warum man den context angeben soll!
 
Es funktioniert eben beides, mit dem context und ohne dem context in der action, also: /kfa/modules/mail und modules/mail
Dann läuft deine Anwendung einmal als ROOT Context, und einmal als kfa.

Sorry, aber eine andere Erklärung gibt es dafür nicht, denn der Context muss stimmen, sonst gibt nen 404 Fehler vom Server.

Wie startest du den Tomcat Server? Aus der IDE? Das WTP Tomat Plugin zB verändert die Tomcat Konfig dauerhaft, das Tomcat Plugin von Sysdeo auch.
Eine frische und saubere (!) Tomcat installation zum testen sollte helfen es herauszufinden, einfach manuell deployen.

Das würde im Produktivbetrieb zum ernsthaften Problem werden, lieber jetzt lösen.
 
Ich starte meine webapp nie aus der IDE, genau aus solchen Gründen.
Ich bezweifle dass meine Applikation als root gestartet wird. Soweit ich das verstanden habe lag der Fehler daran, dass die jsp im Ordner jsp liegt, und er dann als url : kfa/jsp/modules/mail verwendet hat, wenn man als action "modules/mail" verwendet.
Wenn ich aber als action "<%=request.getContextPath()%>/modules/mail" verwende ist die url /kfa/modules/mail weil der context /kfa ist, dann findet er auch das Servlet
Lieg ich richtig?
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben