Problem mit Servlet

Status
Nicht offen für weitere Antworten.

siba

Bekanntes Mitglied
Hallo!


Untenstehendes jsp wird an ein Servlet weitergeleitet, das eine Formularüberprüfung durchführen soll! Sollte das Feld leer sein, soll es eine Fehlermeldung bringen und ansonsten soll der Produktname gespeichert werden. Aber irgendwie tut es weder das eine noch das andere. Was mache ich falsch?


Code:
<%@page language="java"	%>

<%@page contentType="text/html"%>

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 


<html>
    <head>
    <link rel="stylesheet" href="Styles/stil.css" type="text/css">
        <title>Produkteingabe</title>
    </head>
    <body>
        <form name="Produkteingabeformular" action="<%= request.getContextPath() %>/ProduktServlet" method="GET">
            <table>
                <tr>
                    <td>Produktname</td>
                    <td><input type="text" name="Produktname" /></td>
                </tr>
                
                <tr>
                    <td colspan="2" align="center"><input type="submit" name="Eingabe" value="Eingabe" class="button" /></td>
                </tr>
            </table>
        </form>  
    </body>
</html>


Code:
package Servlets;

import Daten.Produktdaten;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import Klassen.Produkt;

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


public class ProduktServlet extends HttpServlet {
   public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		request.getSession().removeAttribute("errors");

		Map errors = new HashMap();
		Produkt newProduct = null;

		String name = null;
            
		

		if (request.getParameter("Eingabe") != null) {

			if (request.getParameter("Produktname") != null
					&& request.getParameter("Produktname").length() > 0) {
				name = request.getParameter("Produktname");
			} else {
				errors.put("name", "Produktname fehlt!");
                                    System.out.println("Produktname fehlt!");
			}
			
			if (errors.size() > 0) {

				request.getSession().setAttribute("errors", errors);
				Produkt errorProduct = new Produkt();
				errorProduct.setName(name);
				
			} else {
				newProduct = new Produkt();		
				newProduct.setName(name);
				
				System.out.println("Neues Produkt angelegt: " + newProduct);

				Produktdaten dao = new Produktdaten();
				dao.speichern(newProduct);
			}
		} 
	}
   }
 

Ralf Ueberfuhr

Bekanntes Mitglied
Beim schnellen Drüberfliegen solltest du nicht den Request-Parameter "Eingabe", sondern "Produktname" im Servlet auslesen.

Dem Button einen Value zu geben ist nicht sinnvoll, bzw. kannst du dafür auch gleich den neueren <button>-Tag verwenden.
 

Ralf Ueberfuhr

Bekanntes Mitglied
Ok, das war auch Blödsinn, zumindest, was den Parameter im Servlet angeht.

--> Wo hast du denn den entsprechenden Tag in deiner JSP?
--> Auf welche JSP leitet dein Servlet denn weiter? Sollte ja im Fehlerfall wieder deine o.g. JSP sein.
--> Was soll im Erfolgsfall passieren? Eine Bestätigungsseite? Falls du dann auch auf o.g. JSP weiterleitest, und er den Namen anzeigen soll, musst du das Input-Feld mit dem eingegebenen Wert füllen.

Was heißt denn, dass er es nicht speichert? Woran erkennst du es? Solltest du zumindest newProduct dann nicht in der Session ablegen, um es auf ner JSP wieder auszulesen?

Oder leitest du auf eine Übersicht weiter, die alle Produkte anzeigt und dafür erneut auf die Datenbasis zugreift? Falls Letzteres, liegt es wohl nicht an der JSP oder am Servlet, sondern an der speichern(...)-Methode.
 

siba

Bekanntes Mitglied
Also, eigentlich in ferner Zukunft :) sollte das Servlet im Fehlerfalle wieder zu diesem jsp führen! Aber im Moment funktioniert nicht einmal folgendes:

Code:
public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
                                 
                                 Produktdaten produktdaten = new Produktdaten();
                                 Produkt produkt = new Produkt();
                                 produkt.setName(request.getParameter("Produktname"));
                                 //oder:produkt.setName("neu");
                                 produktdaten.speichern(produkt);
}

An der speichern-Methode liegt es nicht, habe ich bereits gestest! Ich habe obenstehenden Code in eine andere Klasse kopiert und mit produkt.setName("neu") ausprobiert und "neu" wurde gespeichert! Der Befehll request.getParameter("Produktname")); gibt auch die den eingegebenen Namen wieder, wenn man es in eine HTML-Seite verpackt! Also landet meine jsp-Seite samt dem Prdouktnamen im richtigen Servlet, aber das war es! So jetzt bin ich mit meinem Latein ein bißchen am Ende!
 

Ralf Ueberfuhr

Bekanntes Mitglied
Und wo bleibt da die Weiterleitung per Dispatcher auf eine Folgeseite? Im Moment bearbeitest du die Anfrage, gibst aber keine Antwort an den Client zurück.


Ich glaube der Befehl hieß
Code:
getServletContext(). getRequestDispatcher(jspUrl).forward(request, response);
 

Ralf Ueberfuhr

Bekanntes Mitglied
Der Dispatcher sorgt für eine Weiterleitung von einer J2EE-Komponente zu einer anderen. Wenn du nur das Servlet aufrufst, dann arbeitet es seine Zeilen Quellcode ab und fertig. Wenn du dem Client ne Antwort geben willst, dann entweder über diesen OutputStream (response.getWriter()) oder durch Weiterleiten auf eine JSP oder evtl. ein anderes Servlet.

Die Zeile
Code:
request.getRequestDispatcher("meineNaechsteSeite.jsp").forward(request, response);
muss demzufolge dort stehen, wo dein Servlet fertig ist mit der Abarbeitung des requests. Da du zwischen Erfolg und Misserfolg unterscheidest, kommt diese Zeile wohl 2mal rein, mit unterschiedlichen Weiterleitungszielen.

Also dein Code mit den Weiterleitungen:
Code:
    if (errors.size() > 0) {

            request.getSession().setAttribute("errors", errors);
            Produkt errorProduct = new Produkt();
            errorProduct.setName(name);
            request.getRequestDispatcher("eingabeSeite.jsp").forward(request, response);

            
         } else {
            newProduct = new Produkt();      
            newProduct.setName(name);
            
            System.out.println("Neues Produkt angelegt: " + newProduct);

            Produktdaten dao = new Produktdaten();
            dao.speichern(newProduct);
            request.getRequestDispatcher("erfolgsSeite.jsp").forward(request, response);

         }
 

siba

Bekanntes Mitglied
Hat dies den gleichen Effekt wie response.sendRedirect(request.getContextPath() + "/erfolgsSeite.jsp");?

Aber es bleibt immer noch das Problem, daß mein Produkt nicht gespeichert wird! Das Produkt sollte in einem txt-File gespeichert werden mithilfe eines ObjectOutputStream. Die Klasse Produktdaten, die dies tun soll, funktioniert auch, aber nicht mit meinem Servlet! Brauche ich hierfür einen Listener?
Und wenn ja, wie sollte dieser aussehen?
 

Ralf Ueberfuhr

Bekanntes Mitglied
Also ich bin kein J2EE-Experte, auch erst seit 5 Wochen im Gebiet tätig.

response.sendRedirect(...) könnte denselben Effekt haben, ich bin mir aber nicht sicher, ob es wirklich dasselbe ist. Die Javadocs werden es verraten. Unterschiede könnte es bezüglich der Parameter geben (z.B. läuft alles in einem Request ab oder sind es dann 2).

Wenn dein Produkt nicht gespeichert wird, dann liegt es wohl daran, dass du aufs Dateisystem zugreifst. Aus einem J2EE-Container hast du aber nicht die Rechte für diesen Schreibzugriff. Schau mal evtl. unter JCA (J2EE Connector Architecture) nach. Vielleicht äußert sich diesbezüglich auch mal jemand anderes im Forum.
 

KSG9|sebastian

Top Contributor
- Wird die doGet bzw. doPost-Methode aufgerufen?
- Wie sieht die speichern-Methode der Produktdaten aus?Wenn du auf eine Textdatei im Dateisystem Zugreifen willst dann:

# leg die .txt-Datei in deinem Webprojekt an
# greif mittels super.getServletContext().getRealPath("meineTextdatei.txt"); drauf zu
# Kann sein dass die Textdatei nur temporär besteht.

Einfach nach dem Speichern den Pfad (super.getServletContext()...) ausgeben und schauen ob die Datei geschrieben wurde.

Gruß
 

siba

Bekanntes Mitglied
Ich habe sie inzwischen gefunden! Sie liegt im bin-Verzeichnis von Tomcat! Trotzdem vielen Dank an Euch alle!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Problem: Servlet in JSP einbinden mit <jsp:include> Allgemeines EE 3
0 Problem mit librarys javax.servlet.http.HttpServletRequest cannot be resolved Allgemeines EE 1
M servlet --> jsp - problem beim umstrukturieren Allgemeines EE 5
D Servlet Problem über Server Allgemeines EE 26
H Servlet problem Allgemeines EE 10
E Tomcat/Servlet Problem - Servlet wird nicht gefunden Allgemeines EE 8
M Problem mit Servlet Allgemeines EE 2
E Servlet/JSP/JavaBean- Problem Allgemeines EE 1
D Problem mit Update von ApacheHttpClient von 5.2 auf 5.3 Allgemeines EE 10
D Problem mit redundanten Servern Allgemeines EE 7
Azemaria JSF: Problem bei der einfachsten Applikation Allgemeines EE 2
P JPA Internal Problem Nullpointer Allgemeines EE 10
S MessageDrivenBean Problem beim Zugriff auf Stateful EJB Allgemeines EE 2
M Glassfish Deployment-Problem unter Eclipse Allgemeines EE 0
B Problem beim Lesen des Codes... Allgemeines EE 2
R JPA Problem beim Speichern eines Users Allgemeines EE 2
S WebSocket Problem Allgemeines EE 0
F Eclipse/Java EE Debug-Problem Allgemeines EE 1
Raidri [SEAM] rich:dataTable sortBy Problem Allgemeines EE 6
T Problem mit den Beispielen von Apache Allgemeines EE 5
W JSF Validator Problem HTTP Status 500 Allgemeines EE 2
E JBoss 7.1 Datasource Problem Allgemeines EE 2
M JSP Problem -unbestimmte Anzahl von Werten Transportieren Allgemeines EE 9
S Problem mit EJB Verständnis Allgemeines EE 4
B Problem beim einbinden einer CSS in eine JSP Allgemeines EE 8
F JSP Problem mit Datenbankanbindung über Glassfishserver Allgemeines EE 4
S java Entities Problem Allgemeines EE 19
S Embedded JBoss Problem beim Deployment Allgemeines EE 4
E Session Problem Allgemeines EE 9
F problem mit nullpointer bei DB zugriff Allgemeines EE 2
A Erste Schritte... Problem mit Hibernate Allgemeines EE 15
ruutaiokwu jboss problem - work-verzeichnis muss manuell gelöscht werden??? Allgemeines EE 5
Stillmatic sendRedirect Problem! Allgemeines EE 3
M Problem mit Lookup auf EJB3 mit Glassfish Allgemeines EE 11
X JBoss InitialContext problem Allgemeines EE 5
LordZed Problem mit dem einbinden von Bibliotheken, die sich gegenseitig verwenden Allgemeines EE 5
H GWT Problem beim Ausführen Allgemeines EE 8
Q Problem mit JMS und Weblogic 10 Allgemeines EE 5
E Performance-Problem beim ersten Request Allgemeines EE 4
G Multi User Problem Allgemeines EE 8
G Datasource Problem Allgemeines EE 1
J OOP Java Array Problem Allgemeines EE 2
T Problem mit Java Transaction API Allgemeines EE 2
D Problem mit EJB: Bean soll Objekt eigener Klasse zurückgeben Allgemeines EE 2
N JavaMail Problem Allgemeines EE 4
N JBoss Problem mit Bibliothek in unterschiedlichen Versionen Allgemeines EE 2
A Tomcat -- JSP: komisches Problem Allgemeines EE 11
W Speicher-Problem bei WebApp unter Tomcat, Struts, Hibernate Allgemeines EE 3
B Problem mit ActionListener Allgemeines EE 13
G Simples JSF-Projekt in Eclipse - Problem Allgemeines EE 9
O eclipse - tomcat: Problem bei einfachem Webservice Allgemeines EE 16
J Problem mit EJB Aufruf und DualCore Rechner Allgemeines EE 4
J ejb3.0 datenbank problem Allgemeines EE 2
J Problem mit Zurück-Button Allgemeines EE 2
T Tomcat: JNDI + JDBC Problem Allgemeines EE 3
J problem mit jsp/js Allgemeines EE 2
B Help - EJB2 - Problem mit Hybernate und "LIMIT" Allgemeines EE 6
B JSTL Problem Allgemeines EE 8
byte Tomcat Deployment Problem (HTTP Status 503) Allgemeines EE 8
S Problem mit t:selectOneRadio und ValueChangeListener Allgemeines EE 2
S Problem mit Struts und tiles Allgemeines EE 4
B Problem mit JBoss-4.2.1.GA Allgemeines EE 8
N Tiles - JSF Problem Allgemeines EE 3
M JSF & EJB "Bean not bound" Problem Allgemeines EE 4
V MYSQL JDBC;java.lang.ClassNotFoundException; Problem Eclipse Allgemeines EE 3
megachucky JMS - Problem mit TemporaryQueue Allgemeines EE 2
G Problem mit MimeType/ContentType Allgemeines EE 4
E Java Mail problem Allgemeines EE 5
Y XFire - Maven Build Problem Allgemeines EE 2
D JSP Problem mit equals? Allgemeines EE 2
A Eclipse Start-Problem Allgemeines EE 5
S JSF - Custom converter Problem Allgemeines EE 3
Y JSF Uhrzeitausgabe Problem Allgemeines EE 4
Y JSF - rendered Problem Allgemeines EE 1
Zed JSF h:inputText h:outputText update Problem Allgemeines EE 2
K mysql treiber problem wenn import java.sql.* bei _servlet_ Allgemeines EE 2
S JDBC Mysql Connection Problem - datasource null Allgemeines EE 3
T Session-Problem Allgemeines EE 2
R Tiles - Layout-Problem wegen Leerzeichen Allgemeines EE 6
G Tomcat / Eclipse oder Web.xml Problem Allgemeines EE 11
S Netbeans 5.5 Visual Web Pack Problem mit INSERT und PK Allgemeines EE 4
D JSF Problem mit Action Allgemeines EE 2
F Klassen und zugriffs Problem "Help wanted"! Allgemeines EE 16
D <input type="file"> Problem Allgemeines EE 6
N Struts - Problem mit <html:link> Action Allgemeines EE 3
A Problem / Fehler beim Einbinden einer Klasse in ein JSP Allgemeines EE 20
G Session Problem Allgemeines EE 5
T Ant Compiler Problem Allgemeines EE 9
T Problem dem Zaehler in mein Java - Code Allgemeines EE 2
A Hibernate-Problem mit MySQL-Cluster Allgemeines EE 6
G Problem mit Benutzerverwaltung Allgemeines EE 3
S Hibernate Mapping Problem Allgemeines EE 3
S Hibernate INSERT Problem Allgemeines EE 11
S Dummes JSP-Problem Allgemeines EE 8
P EJB-Installations-Problem Allgemeines EE 4
S CSS Problem in JSP Allgemeines EE 16
C Problem mit html:optionsCollection Allgemeines EE 4
R HILFE: Problem mit JSF examples Allgemeines EE 10
R Problem mit value-expression Allgemeines EE 7
R Problem mit for-schleife in JSP tag Allgemeines EE 8

Ähnliche Java Themen


Oben