# ResourceBundle in Servlets verwenden



## Rokko_11 (29. Dez 2009)

Hi! 
Kaum (na ja.. 2 Stunden is her  ) ist das alte Problem gelöst, stoße ich gleich auf das neue!

Meine problembereitende Klasse besitzt im Quelltext die Zeile:
ResourceBundle b = ResourceBundle.getBundle("binding");
In dem Ordner Projekt/build/classes befindet sich auch dieses binding.properties.

Schreibe ich nun eine Testmethode, findet mein Programm diese Propertie auch. So solls ja auch sein.

Schmeiße ich allerdings meinen Apache-Server an und versuche, dieses Properties über ein Servlet zu finden, scheitere ich kläglich.
Habe das binding.properties auch bereits in jeden erdenklichen Ordner reingeschoben...

Hat wer ne Ahnung?


----------



## X3TitanCore (30. Dez 2009)

Wo liegt den die Datei bei dir auf dem Server. Die sollte ja in WEB-INF/classes liegen. Dort dindet sie das Servlet dann auch.


----------



## Rokko_11 (30. Dez 2009)

Also... die Datei liegt bei mir unter workspace/DynamicWebProjekt1/WebContent/WEB-Inf/classes
Der Ordner classes war allerdings nicht bereits vorhanden, sondern musste extra erstellt werden. Ist auch nur diese eine einzige Datei drinne...

Gibt es vielleicht Probleme mit den Packages? Die Klasse, die das properties haben will, befindet sich nicht im defaultpackage.


----------



## X3TitanCore (30. Dez 2009)

Eigentlich nicht. Im classes Ordner liegen die bei mir auch drin. Kriegst du irgendeine Exception?


----------



## Rokko_11 (30. Dez 2009)

X3TitanCore hat gesagt.:


> Eigentlich nicht. Im classes Ordner liegen die bei mir auch drin. Kriegst du irgendeine Exception?



jo tu ich!

Im Browser:


> description The server encountered an internal error () that prevented it from fulfilling this request.
> 
> exception
> 
> ...



und in der Eclipse-Console:



> 30.12.2009 17:21:00 org.apache.catalina.core.StandardWrapperValve invoke
> SCHWERWIEGEND: Servlet.service() for servlet fileUpload threw exception
> java.util.MissingResourceException: Can't find bundle for base name binding, locale de_DE
> at java.util.ResourceBundle.throwMissingResourceException(Unknown Source)
> ...



Und grad das Problem: LoadSave in Zeile 50 steht geschrieben:
		ResourceBundle b = ResourceBundle.getBundle("binding");


Servlets und LoadSave sind in zwei verschiedenen Packages.


----------



## X3TitanCore (30. Dez 2009)

Normalerweise sollte er das so finden. Kannste mal den Code posten damit man das mal testen kann?


----------



## Rokko_11 (30. Dez 2009)

Den kompletten Code poste ich nicht. Das was ich da bekommen habe, ist an Unübersichtlichkeit nicht zu übertreffen 

Aber hab das alles jetzt mal auf das nötigste runtergebrochen (aber keine Sorge... funktioniert immer noch nicht  )

Alles befindet sich im DynamicWebProjekt namens testProjekt.

2 Packages: neuesPackage1 und neuesPackage2

in neuesPackage1 enthalten sind die 2 Klassen "testAufruf.java" und "verteilerservlet.java"
in neuesPackage2 enthalten ist nur "aufzurufendeKlasse.java"

Dann gibts noch ein html-File "aufrufendesHTML.html"

Quellcode testAufruf.java


> package neuesPackage1;
> public class testAufruf {
> public static void main(String [] args) {
> neuesPackage2.aufzurufendeKlasse.a();
> ...



Quellcode verteilerservlet.java


> package neuesPackage1;
> import java.io.IOException;
> import javax.servlet.ServletException;
> import javax.servlet.http.HttpServlet;
> ...



quellcode aufzurufendeKlasse.java:


> package neuesPackage2;
> import java.util.ResourceBundle;
> public class aufzurufendeKlasse {
> public static void a() {
> ...



Quellcode aufrufendesHTML.html


> <html>
> <body>
> <form id="file" name="file" method="post"
> action="/testProjekt/verteilerservlet">
> ...



Quellcode web.xml



> <?xml version="1.0" encoding="UTF-8"?>
> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
> <display-name>testProjekt</display-name>
> <servlet>
> ...



und dort scheitert es bereits dran...
Rufe ich testAufruf.java auf, klappt alles. Drücke ich jedoch auf den Button des html, klappt nix mehr...
Die binding.properties kann in diesem Fall ja auch leer sein... Ich wäre ja schon über eine andere Fehlermeldung froh


----------



## X3TitanCore (30. Dez 2009)

Als ich habe das jetzt mal so wie von dir beschrieben nachgebaut und bekomme keine Exception.
Was ich geändert habe ist der Post link im Formular zu 

http://127.0.0.1:8080/TestProjekt/Verteilerservlet

Klick ich den Button an gibt er mit meine Test Propertie aus. Du solltest dir auch angewöhnen Klassen immer mit einem Großbuchstaben zu beginnen.

Die Ausgabe erfolgt dann über


```
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	PrintWriter p = response.getWriter();
	p.write(ResourceBundle.getBundle("binding").getString("Test"));
}
```

Was ich nicht weiß, ist warum Deine TestAufruf Klasse eine main Methode hat. Die gibt es eigentlich nicht bei einer Webanwendung. Es wird das Servlet vom Container initialisiert, sonst nix. Alle anderen Objekte erzeugst du über die Initialisierung aus dem Servlet heraus.


----------



## Rokko_11 (30. Dez 2009)

Hi!

die Mainmethode habe ich nur dafür gedacht, um mir selbst zu zeigen, dass der Aufruf über die mainmethode keinen Fehler, über das servlet jedoch einen Fehler wirft...

Schad, dass das bei dir geht 
muss wahrscheinlich irgendwo in der Einstellung des Apacheservers mal rumkonfiguiert worden sein...
Ich fang dann mal an zu suchen 

Auf jeden fall riesen Dank!


----------



## X3TitanCore (30. Dez 2009)

Änder doch bei dir auch mal den Link so wie bei mir. Mit deinem ging das bei mir auch nicht, da der Tomcat ja als Standartport 8080 hat.


----------



## Rokko_11 (30. Dez 2009)

Hm... Hab jetzt alles mit Groß/Kleinschreibung geändert, Link angepasst, klappt aber leider immer noch nicht 
Die properties-Datei muss in Web-Inf/classes liegen?
Ist das normal, das der classes-Ordner manuell erstellt werden muss und auch nach x-maligem aktualisieren nicht im Eclipse-Project-Explorer angezeigt wird?


----------



## X3TitanCore (30. Dez 2009)

Die Datei muß im classes Ordner liegen. Nein der Ordner wird von Eclipse automatisch erzeugt. Dort packt Eclipse auch alle kompilierten Klassen rein. Du mußt mit rechts auf deinen Projektordner klicken und dann Run As dann Run on Server. Wenn nicht vorhanden mußt du den Server angeben. Auch die properties packt er automatisch dort rein.


----------



## Rokko_11 (30. Dez 2009)

Tausend Dank! Jetzt geht's so halb 
Das lag irgendwie alles an dem classes-Ordner. Bei mir erstellt er sich nicht automatisch :-/ deswegen musste ich ihn per Hand erstellen, dann mit refresh in den Eclipse-Package-Explorer anzeigen lassen...

Dann gings irgendwie. Hört sich nicht gesund an, gell ;-)

Danke für die Geduld!


----------



## X3TitanCore (30. Dez 2009)

Kein Problem.


----------

