2 Stimmen

Java, NetBean : Zugriff auf web.xml-Kontextparameter von einer Webdienstmethode aus?

Ich bin neu in Java, also entschuldigen Sie meine lahmen Fragen:)

Ich versuche, einen Webdienst in Java NetBeans 6.1 zu erstellen, aber ich habe einige Probleme mit Konfigurationsparametern (wie .settings in .net).

Wie kann man solche Einstellungen in einem Java-Webdienst speichern und darauf zugreifen?

Gibt es eine Möglichkeit, Kontextparameter aus web.xml in einer Webmethode zu lesen?

Wenn nein, welche Alternativen gibt es für die Speicherung Ihrer Konfigurationsvariablen wie Pfadnamen?

Dankeschön

4voto

James Schek Punkte 17598

Gibt es eine Möglichkeit, Kontextparameter aus web.xml in einer Webmethode zu lesen?

Nein, das ist nicht so einfach mit dem Standardprogramm möglich. Das Webdienstsystem (JAX-WS) kennt die Servlet-Engine (Tomcat) nur minimal. Sie sind so konzipiert, dass sie isoliert sind.

Wenn Sie die Kontextparameter verwenden wollten, müsste Ihre Webdienstklasse den ServletContextListener implementieren und die gewünschten Parameter im Initialisierungsparameter abrufen (oder den Kontext zur späteren Verwendung speichern). Da die Servlet-Engine und JAX-WS jeweils unterschiedliche Instanzen des Objekts haben würden, müssten Sie die Werte in einem statischen Member speichern.

Wie Lars bereits erwähnt hat, sind die Eigenschaften-API oder JNDI die besten Möglichkeiten, da sie in Java enthalten sind und ziemlich bekannte Methoden zum Abrufen von Optionen sind. Verwenden Sie Classloader.getResource(), um die Eigenschaften in einem Webkontext abzurufen.

3voto

Lars Westergren Punkte 2045

Wenn Sie Servlets verwenden, können Sie die Parameter in web.xml konfigurieren:

<servlet>
  <servlet-name>jsp</servlet-name>
  <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
      <param-name>fork</param-name>
      <param-value>false</param-value>
     </init-param>
</servlet>

Diese Eigenschaften werden in einem ServletConfig-Objekt an die "init"-Methode Ihres Servlets übergeben.

Eine andere Möglichkeit ist, die Umgebungsvariablen Ihres Systems mit

System.getProperty(String name);

Dies ist jedoch nur für kleine Programme und Tests zu empfehlen.

Es gibt auch die Eigenschaften-API, wenn Sie ".properties"-Dateien verwenden möchten. http://java.sun.com/javase/6/docs/api/java/util/Properties.html

Schließlich glaube ich, dass die Suche nach Konfigurationen mit JNDI bei der Entwicklung von modernen Web-Service-Anwendungen ziemlich üblich ist, Netbeans und App-Container haben eine ziemlich gute Unterstützung dafür. Googeln Sie es.

1 Stimmen

Bitte lesen Sie die Frage genauer. Sie sollten eine konkrete Antwort auf die konkrete Frage geben: "Zugriff auf web.xml-Kontextparameter von einer Webdienstmethode aus?". Dennoch geben Sie einige nützliche Alternativen an.

0 Stimmen

Kontext-param != init-param ( factorypattern.com/ )

1voto

dosER_42 Punkte 11
MessageContext ctx = MessageContext.getCurrentThreadsContext();       
Servlet wsServlet = (Servlet) ctx.getProperty(HTTPConstants.MC_HTTP_SERVLET);         
ServletConfig wsServletConfig = wsServlet.getServletConfig();                 
ServletContext wsContext = wsServletConfig.getServletContext();

0voto

StartupGuy Punkte 7196

Ich denke, die richtige Antwort ist ... wie immer ... "Es kommt darauf an". Wenn Sie nur eine kleine Implementierung mit einem einzigen Server betreiben, dann hängt es stark von der WS-Technologie ab, die Sie verwenden wollen. Einige machen den Servlet-Kontext und die Context-Params leicht zugänglich, andere nicht, in diesem Fall kann der Zugriff auf Eigenschaften aus einer Eigenschaftsdatei einfacher sein. Werden Sie eine Reihe von Servern in einer Umgebung mit gleichmäßiger Lastverteilung und hohem Datenverkehr haben, in der die Einstellungen für alle Server sofort und zentralisiert aktualisiert werden müssen, falls ein Failover eintritt? Wenn das der Fall ist, wollen Sie dann wirklich die Konfigurationsdateien für alle Server in der Farm aktualisieren? Wie synchronisieren Sie diese Änderungen mit all diesen Servern? Ist das für Sie von Bedeutung? Wenn Sie Pfadnamen in einer Konfigurationsdatei speichern, wollen Sie wahrscheinlich in der Lage sein, die Pfadnamen auf einem anderen Host zu aktualisieren, falls ein bestimmter Host ausfällt (" \file_server_host\doc_store " --> " \backup_file_server_host\doc_store "In diesem Fall kann es tatsächlich besser sein, die Ausfallsicherung stattdessen über DNS durchzuführen. Es gibt zu viele Variablen. Es kommt wirklich auf das Design, die Bedürfnisse und den Umfang der Anwendung an.


Wenn Sie der Einfachheit halber nur ein einfaches Äquivalent zu einer Einstellungsdatei wünschen, sollten Sie eine Eigenschaftsdatei verwenden. Hier ist ein Beispiel, wo ich dies kürzlich in einem Projekt verwendet habe: https://github.com/sylnsr/docx4j-ws/blob/master/src/docx4j/TextSubstitution.java

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X