ERLEDIGT
JA
JA
ANTWORTEN
3
3
ZUGRIFFE
1551
1551
EMPFEHLEN
-
06.03.08 10:49 #1
- Registriert seit
- Mar 2008
- Beiträge
- 10
Hallo,
ich habe eine kurze Frage: Ich habe ein Servlet, dass eine Konfigurationsdatei erhalten soll, die es beim Start lesen soll. Das Servlet ist zusammen mit anderen Servlets in einem war-File verpackt. Ich möchte es jetzt so machen, dass die Konfigurationsdatei außerhalb des war-Archivs (aber noch auf dem AS) abgelegt werden soll; schließlich soll der Admin nicht das war neu packen müssen.
Aber wie greife ich jetzt auf die Datei zu? Mein Context-Root zeigt immer nur auf den Root in dem War-File...
Vielen Dank für Eure Antworten,
Martin
-
06.03.08 13:12 #2
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
schau mal hier:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
package de.tutorials.web; import java.io.IOException; import java.util.Collections; import java.util.Map; import java.util.Properties; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class for Servlet: ExampleServlet * */ public class ExampleServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { // oder besser key als init parameter in der servletdefintion im web.xml // ablegen public static final String CONFIGRUATION_FILE_NAME = "de.tutorials.web.config.properties"; static final long serialVersionUID = 1L; Map<?, ?> readOnlyConfigurationSettingsMap; /* * (non-Java-doc) * * @see javax.servlet.http.HttpServlet#HttpServlet() */ public ExampleServlet() { super(); } @Override public void init(ServletConfig config) throws ServletException { super.init(config); Properties properties = new Properties(); try { properties.load(getServletContext().getClass().getClassLoader() .getResourceAsStream(CONFIGRUATION_FILE_NAME)); } catch (IOException e) { e.printStackTrace(); } this.readOnlyConfigurationSettingsMap = Collections.unmodifiableMap(properties); } /* * (non-Java-doc) * * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, * HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().println("Hallo " + readOnlyConfigurationSettingsMap.get("foo")); } /* * (non-Java-doc) * * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, * HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } }
Damit kannst du ein File (hier: de.tutorials.web.config.properties) ins TOMCAT_HOME/lib Verzeichnis legen (bei Tomcat 6) und darauf zugreifen.
de.tutorials.web.config.properties
Code :1
foo=Bar
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
06.03.08 18:27 #3
- Registriert seit
- Mar 2008
- Beiträge
- 10
Hallo,
vielen Dank für die schnelle Antwort!
Ich habe das auch gleich ausprobiert jedoch nicht mit sonderlich viel Erfolg. Bestimmt stelle ich mich einfach nur blöd an...
Ich habe einen JBoss AS (hätte ich dazu sagen sollen, SORRY) und habe wie beschrieben das property-file in den lib-Ordner gelegt (JBoss basiert ja in punkto Servlets auf TomCat).
Jedoch scheint die Ressource nicht gefunden zu werden:
java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Unknown Source)
at java.util.Properties.load0(Unknown Source)
at java.util.Properties.load(Unknown Source)
at com.merobase.WSExec.ReqPageGen.init(ReqPageGen.java:59)
in Zeile 59 steht: properties.load(getServletContext().getClass().getClassLoader()
.getResourceAsStream(CONFIG_FILE_NAME))
Meine Anwendung liegt in /server/default/deploy; ausprobiert habe ich die Datei in /server/default/lib abzulegen...
Btw: Neben den property-files wollte ich auch templates für Velocity extern (da der Benutzer die anlegen dürfen soll) ablegen; ist es architektonisch in Ordnung die ebenfalls im lib-Verzeichnis abzulegen?
Vielen Dank und sorry für die blöde Frage,
Martin
-
06.03.08 19:09 #4
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
eine Möglichkeit wäre es die Konfigurationsdatei im JBOSS_HOME/server/XXX/data Verzeichnis abzulegen.
Anschließend kann man dann so darauf zugreifen:
Das Problem hierbei ist das File IO innerhalb eines Servlets laut J2EE/JEE Spec nicht unterstützt ist.Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
package de.tutorials.web; import java.io.FileInputStream; import java.io.IOException; import java.util.Collections; import java.util.Map; import java.util.Properties; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class for Servlet: ExampleServlet * */ public class ExampleServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { // oder besser key als init parameter in der servletdefintion im web.xml // ablegen public static final String CONFIGRUATION_FILE_NAME = "de.tutorials.web.config.properties"; public final static String JBOSS_DATA_DIR_LOCATION = System.getProperty("jboss.server.data.dir"); static final long serialVersionUID = 1L; Map<?, ?> readOnlyConfigurationSettingsMap; /* * (non-Java-doc) * * @see javax.servlet.http.HttpServlet#HttpServlet() */ public ExampleServlet() { super(); } @Override public void init(ServletConfig config) throws ServletException { super.init(config); Properties properties = new Properties(); try { properties.load(new FileInputStream(JBOSS_DATA_DIR_LOCATION +"/" + CONFIGRUATION_FILE_NAME)); } catch (IOException e) { e.printStackTrace(); } this.readOnlyConfigurationSettingsMap = Collections.unmodifiableMap(properties); } /* * (non-Java-doc) * * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, * HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().println("Hallo " + readOnlyConfigurationSettingsMap.get("foo")); } /* * (non-Java-doc) * * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, * HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } }
Desweiteren wird dein Servlet somit von JBoss abhängig, wenn man hier keine Indirektion (ConfigurationProviderStrategy) einführt...
Eine Alternative dazu wäre noch das sogenannte Exploded Deployment:
http://wiki.jboss.org/wiki/Wiki.jsp?...odedDeployment
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
Ähnliche Themen
-
Zugriff auf externe Dateien
Von dark_ghost im Forum PHPAntworten: 0Letzter Beitrag: 07.01.09, 17:42 -
Zugriff auf eine externe CSS-Datei
Von webzwonull im Forum Javascript & AjaxAntworten: 0Letzter Beitrag: 27.04.07, 17:16 -
Zugriff auf externe Datenbank
Von Radhad im Forum C/C++Antworten: 2Letzter Beitrag: 10.01.07, 16:49 -
Zugriff auf externe Anwendungen mit C#
Von axel2 im Forum .NET ArchivAntworten: 14Letzter Beitrag: 16.11.04, 10:15 -
Zugriff auf externe MySql DB
Von Chaser im Forum Visual Basic 6.0Antworten: 10Letzter Beitrag: 30.11.02, 20:47





Zitieren

Login





