# speichern von daten mittels servlet in xml



## leo476 (20. Apr 2007)

hallo,
ich brauche mal eure hilfe. ich möchte gerne daten in einem xml datei schreiben und das ganze über ein servlet.
mein servlet sieht so aus:

```
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import Model.Artikel;
import Model.Kunde;


public class Controller extends HttpServlet{

	public void doGet(HttpServletRequest requ,HttpServletResponse resp)
	throws ServletException, IOException{
		
		Artikel.ArtikelLöschen(4);
		
		resp.setContentType("text/html");
		
		double ver = 1.6;
		
		PrintWriter out = resp.getWriter();
		out.println("<html>");	
		out.println("-=Controller=-  Version:"+ver);
		out.println("
artikel 4 auf false gesetzt");
		out.println("</html>");
		out.close(); 
	}
}
```


so funktioniert es irgednwie nicht.....

wenn ich das ganze aber in eclipse laufen lasse und zwar so :


```
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import Model.Artikel;
import Model.Kunde;


public class Controller extends HttpServlet{

	public void doGet(HttpServletRequest requ,HttpServletResponse resp)
	throws ServletException, IOException{
				
		resp.setContentType("text/html");
		
		double ver = 1.6;
		
		PrintWriter out = resp.getWriter();
		out.println("<html>");	
		out.println("-=Controller=-  Version:"+ver);
		out.println("
artikel 4 auf false gesetzt");
		out.println("</html>");
		out.close(); 
	}

public static void main(String[] args) {

Artikel.ArtikelLöschen(4);

}
}
```

dann funktiert es ohne probleme.. wenn ich im firefox dann mein servlet aufrufe dann startet er die funktion zum löschen des artikels irgednwie nicht.

was muss ich tun ?


danke euch !!


----------



## Ullenboom (20. Apr 2007)

Klappt das mit dem Servlet denn überhaupt? Also sieht man generiertes HTML? Was macht denn die ArtikelLöschen()-Funktion?


----------



## Guest (20. Apr 2007)

ja.. also servlet wird ganz normal ausgeführt...nur es regt sich nichts.


die funktion sieht so aus:


```
public static void ArtikelLöschen(int Anr) {
		ArtikelAttributÄndern(Anr, "Aktiv", "false");
	}
```


```
public static void ArtikelAttributÄndern(int Anr, String attribute,
			String wert) {
		boolean gefunden = false;
		try {
			SAXBuilder builder = new SAXBuilder();
			Document doc = builder.build("XML/Artikelstamm.xml");
			Element Stamm = doc.getRootElement();
			Iterator Artikelliste = Stamm.getChildren("Artikel").iterator();
			while (Artikelliste.hasNext()) {
				Element Artikel = (Element) Artikelliste.next();
				if (Anr == Artikel.getAttribute("Anr").getIntValue()) {
					gefunden = true;
					if (Artikel.getChildText(attribute) == null) {
						System.out
								.println("Unbekanntes Attribut: " + attribute);
						break;
					}
					Artikel.removeChild(attribute);
					Element eNeuesAttribut = new Element(attribute);
					eNeuesAttribut.addContent(new Text(wert));
					Artikel.addContent(eNeuesAttribut);
					// XML File schreiben
					XMLOutputter outp = new XMLOutputter(Format
							.getPrettyFormat());
					outp.output(doc, new FileOutputStream(new File(
							"XML/Artikelstamm.xml")));
				}
			}
			if (gefunden == false) {
				System.out.println("Artikel " + Anr + " wurde nicht gefunden.");
			}
		} catch (Exception any) {
			any.printStackTrace();
			System.out.println("Datei nicht gefunden! " + any.getMessage());
		}
	}
```

wenn man es in der main startet läuft es ja auch ohne probleme.. nur halt nicht per webbrowser....
ist das denn sonst alles richtig ?? 

danke


----------



## Ullenboom (20. Apr 2007)

Gib's denn in dem Server Log eine Ausnahme zu sehen oder steht im Log, dass OK war? (Probleme könnten die Pfade machen.)


----------



## Guest (20. Apr 2007)

meinst du die catalina log ??

da steht das drin. weiss nicht ob dir das weiterhilft.



```
INFO: Starting Servlet Engine: Apache Tomcat/5.5.23
20.04.2007 15:10:28 org.apache.catalina.core.StandardHost start
INFO: XML validation disabled
20.04.2007 15:10:32 org.apache.coyote.http11.Http11BaseProtocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
20.04.2007 15:10:33 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
20.04.2007 15:10:33 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/170  config=null
20.04.2007 15:10:33 org.apache.catalina.storeconfig.StoreLoader load
INFO: Find registry server-registry.xml at classpath resource
20.04.2007 15:10:34 org.apache.catalina.startup.Catalina start
INFO: Server startup in 6579 ms
```


----------



## Ullenboom (20. Apr 2007)

Ich meine die Datei stdout_____.log. Da kommt das rein, was von System.out kommt. Da müssten deine Ausgaben drinstehen, oder eben eine Exception.


----------



## Guest (20. Apr 2007)

perfekt.. das wusste ich gar nicht 


vielen dank !!

Fehler:

Datei nicht gefunden! C:\Programme\Apache Software Foundation\Tomcat 5.5\XML\Artikelstamm.xml (Das System kann den angegebenen Pfad nicht finden)

also werd ich mich darum mal kümmern.

Vielen Dank !


----------



## Guest (20. Apr 2007)

also mus ich den xml ordner ausserhalb des projektordners anlegen ?? oder kann man das ganze auch irgednie dynamisch anlegen ?


----------



## KSG9|sebastian (20. Apr 2007)

wenn die Datei im gleichen Package wie die Klasse liegt:

InputStream in = getClass().getResourceAsStream("datei.xml");

Wenn die Datei im WebContent-Ordner liegt, also direkt unter tomcat/webapps/deineWebapp, dann

String path = super.getServletContext().getRealPath("datei.xml");


----------

