2013-06-26 25 views
8

Tworzę aplikację webową w Tomcat, używając koszulki. Nie stworzyłem serwletu, używam tylko koszulki ServletContainer i niektórych klas zasobów.Uzyskaj dane konfiguracyjne z web.xml podczas korzystania z koszulki ServletContainer

Moja web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
     version="2.5"> 
    <servlet> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <servlet-class> 
      com.sun.jersey.spi.container.servlet.ServletContainer 
     </servlet-class> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>com.mycompany.myproduct.rest</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

Moje webapp musi przeczytać kilka wartości konfiguracyjnych. Mam wrażenie, że dobrym sposobem na to jest kontekst-Params, tak:

<web-app> 
    ... 
    <context-param> 
    <description>This is a context parameter example</description> 
    <param-name>ContextParam</param-name> 
    <param-value>ContextParam value</param-value> 
    </context-param> 
</web-app> 

Czy to najlepszy sposób? Jak uzyskać dostęp do tych parametrów kontekstu z moich klas zasobów?

Oto przykład klasy zasobów:

@Path("/api/ping") 
public class PingResource { 
    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String helloWorld() { 
     return "pong"; 
    } 
} 

Odpowiedz

10

można wstrzyknąć ServletContext i patrzeć parametry stamtąd. Coś jak:

public class PingResource { 

    @Context ServletContext context; 

    public String myServiceMethod() { 
     context.getInitParam("ContextParam"); 
    } 

} 
+0

To wygląda dobrze. Ale zakładam, że zwraca on parametr inicjujący. A co z paramem kontekstu? Nie widzę sposobu, aby uzyskać go z ServletContext. – tallseth

+0

Nie całkiem ... sprawdź http://stackoverflow.com/questions/2069902/dd-elements-context-param-and-init-param-both-use-getinitparameter-me –

+0

Próbowałem tego, ale mój Kontekst jest pusty. – tallseth

4

Poniżej jest migawka, że ​​pracował dla mnie :)

// dodać PRZYWOZOWI

import javax.servlet.ServletContext; 
import javax.ws.rs.core.Context; 

// dodać właściwość w klasie

@Context 
ServletContext context; 

// Użyj parametru kontekstowego w swoich metodach

String companyName = this.context.getInitParameter("companyName"); 

// dodać kontekst do web.xml

<context-param> 
    <description>Context Parameter Test</description> 
    <param-name>companyName</param-name> 
    <param-value>Test Organization, Incorporated</param-value> 
</context-param>