2013-06-26 7 views
8

Sto creando una webapp in Tomcat usando la maglia. Non ho creato un servlet, uso solo la maglia ServletContainer e alcune classi di risorse.Ottieni i dati di configurazione da web.xml quando usi una maglia ServletContainer

mio 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> 

mio webapp ha la necessità di leggere alcuni valori di configurazione. Ho l'impressione che un buon modo per farlo è con il contesto-Parametri, in questo modo:

<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> 

È questo il modo migliore? Come posso accedere a questi parametri di contesto dalle mie classi di risorse?

Ecco un esempio di classe risorsa:

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

risposta

10

È possibile iniettare il ServletContext e cercare i parametri da lì. Qualcosa di simile:

public class PingResource { 

    @Context ServletContext context; 

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

} 
+0

Questo sembra buono. Ma presumo che restituisca un param di init. Che ne dici di un contesto param? Non vedo come ottenerlo da un ServletContext. – tallseth

+0

Non proprio ... controlla http://stackoverflow.com/questions/2069902/dd-elements-context-param-and-init-param-both-use-the-getinitparameter-me –

+0

Ho provato questo, ma il mio il contesto è nullo. – tallseth

4

seguito è un'istantanea che ha lavorato per me :)

// aggiunge importazioni

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

// aggiunge proprietà nella classe

@Context 
ServletContext context; 

// Usa il parametro context nei tuoi metodi

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

// aggiungere contesto al web.xml

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