Ist es möglich die Request paramter auf "null" zu

  • Themenstarter Themenstarter rony_19
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
R

rony_19

Gast
hallo,

ich programmiere gerade an einem Servlet, das Formularfelder mittels der Methode -neuerEintrag- einlesen und die eingelesenen Parameter in eine Datei schreiben soll, anschließend erfolgt mittels der Methode -leseEintraege- die Ausgabe aller gespeicherten Einträge auf einer Html Seite, die das Servlet selbst generiert.

Das Problem ist, dass bei der Aktualisierung der angezeigten Seite bzw. bei dem wiederholtem Aufruf des Servlets ohne Formulareintrag die Requestparameter des vorherigen Formulareintrags übernommen werden und die Datei bzw. html Ausgabe dadurch jedesmal um die vorherigen Einträge erweitert wird.
Meine Lösung wäre gewesen, die Request Parameter nach jedem Eintrag wieder auf null zu setzen, aber leider hat es nicht geklappt. Ich hatte es beispielsweise mit req.removeAttributes("artikelNr") ausprobiert, leider ohne Erfolg.

Danke vielmals für jederlei Hilfe.

Hier sind die Methoden neuerEintrag und leseEintraege:



Code:
public void neuerEintrag(HttpServletRequest req, HttpServletResponse res,PrintWriter out) throws IOException{	
		String artikelNr=req.getParameter("artikelNr");
		String beschreibung=req.getParameter("beschreibung");
		String preis=req.getParameter("preis");		
		if((!(artikelNr==""||beschreibung==""||preis==""))){					
			artikelNr = URLEncoder.encode(req.getParameter("artikelNr"),"UTF-8");
			beschreibung = URLEncoder.encode(req.getParameter("beschreibung"),"UTF-8");
			preis = URLEncoder.encode(req.getParameter("preis"),"UTF-8");				
			String deleteLine=req.getParameter("delete");					
			try{				
				FileWriter fw= new FileWriter(f,true);
				PrintWriter pw= new PrintWriter(fw);
				pw.print(artikelNr+"|");
				pw.print(beschreibung+"|");
				pw.println(preis);
				pw.close();	            
			}// zu try
			catch(IOException e){
				res.sendError(500,"IO Fehler\n"+e.getMessage());			
			}			
			out.println("<h1>IM2 - Aufgabe 17: Artikelverwaltung</h1><form action='/IM2/servlet/A17' method='post' style='background-color:gray;width:300px'><table cellpadding='5' cellspacing='5' border='0' ><tr>	<td ><font color='#ffffff'>Artikel-Nummer</font></td>	<td><input type='text' name='artikelNr'></td></tr><tr>	<td><font color='#ffffff'>Beschreibung</font></td>	<td><input type='text' name='beschreibung'></td></tr><tr>	<td><font color='#ffffff'>Preis</font></td>	<td><input type='text' name='preis' style='width:80'>&<font size='5' color='#ffffff'>€</font> </td></tr><tr>	<td></td>	<td style='vetical-align:bottom'><input type='submit' name='hinzufuegen' value='Hinzufuegen'>	<input type='reset' name='reset' value='Reset' style='width:50'></td></tr></table></form>");
			out.println("Danke für den Eintrag
");
			
		}//zu if artikelNr
		else{			
		out.println("<h1>IM2 - Aufgabe 17: Artikelverwaltung</h1><form action='/IM2/servlet/A17' method='post' style='background-color:gray;width:300px'><table cellpadding='5' cellspacing='5' border='0' ><tr>	<td ><font color='#ffffff'>Artikel-Nummer</font></td>	<td><input type='text' name='artikelNr'></td></tr><tr>	<td><font color='#ffffff'>Beschreibung</font></td>	<td><input type='text' name='beschreibung'></td></tr><tr>	<td><font color='#ffffff'>Preis</font></td>	<td><input type='text' name='preis' style='width:80'>&<font size='5' color='#ffffff'>€</font> </td></tr><tr>	<td></td>	<td style='vetical-align:bottom'><input type='submit' name='hinzufuegen' value='Hinzufuegen'>	<input type='reset' name='reset' value='Reset' style='width:50'></td></tr></table></form>");
		out.println("Formular nicht vollständig ausgefüllt
");
		}
	}// zu neuer Eintrag




public void leseEintraege (HttpServletRequest req, HttpServletResponse res,PrintWriter out) throws IOException,ServletException{		
		try{			
			if (f.canRead()){				
				FileReader fr = new FileReader(f);
				LineNumberReader lnr = new LineNumberReader(fr);
				String line;
				StringTokenizer st;
				int i=1;
				String artNr;
				String artBesch;
				String artPreis;			
				while((line=lnr.readLine())!=null){						
					st= new StringTokenizer(line,"|");					
					while(st.hasMoreTokens()){
						artNr=URLDecoder.decode(st.nextToken(),"UTF-8");
						artBesch=URLDecoder.decode(st.nextToken(),"UTF-8");
						artPreis=URLDecoder.decode(st.nextToken(),"UTF-8");
						out.println("<tr>");
						out.println("<td>"+artNr+"</td>");
						out.println("<td>"+artBesch+"</td>");
						out.println("<td>"+artPreis+"</td>");
						out.println("<td>&&&&[url='/IM2/servlet/A17?delete="+i+"']Artikel löschen[/url]</td>");
						out.println("</tr>");						
						i++;						
					}				
				}				
				lnr.close();
				fTemp.renameTo(f);				
			}// zu if f.canread			
		}// zu try
			catch(IOException e){
				res.sendError(500,"IO Fehler\n"+e.getMessage());
			}			
		}// schließt leseEinträge
 
Aktualisierung der angezeigten Seite bzw. bei dem wiederholtem Aufruf des Servlets ohne Formulareintrag die Requestparameter des vorherigen Formulareintrags übernommen werden und die Datei bzw. html Ausgabe dadurch jedesmal um die vorherigen Einträge erweitert wird.

Naja, beim Klick auf den Reload Button (ich denke, das meinst du damit) schickst du die Parameter wieder mit. Somit kommen die auch in deinem Servlet wieder an. Da kannst du mit remove nix machen.

Dir sollte klar sein, das mit jedem Ansprechen des Servlets neue Objekte für Request und Response entstehen. Du kannst so kein Request (erst recht nicht die Attribute, die darin liegen) beeinflussen, der in der Zukunft liegt.
 
Noch eine Frage:

ist dies für den Produktiven Einsatz gedacht, auf welchem dann einige User zugreifen werden, oder ist das nur zu Übungszwecken.

Solltest du Ersteres verfolgen, dann denke ich, dass du Probleme bekommen wirst. Du solltest mindestens die Ausgabe (View) von den Daten trennen. Und die Datenhaltung in einer Datei würde für kleinere Sachen schon noch reichen. Aber wenn du umfangreichere Daten erwartest, würde ich ne einfache Datenbank empfehlen.

Verfolgst du Zweites, dann mehr Code bitte 🙂 mindestens die doget und dopost Methoden (evtl. noch init). Es ist nämlich kein Zusammenhang zwischen deinen beiden Methoden erkennbar.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben