Servlets Rest easy和init参数-如何访问?

Servlets Rest easy和init参数-如何访问?,servlets,jboss,config,resteasy,Servlets,Jboss,Config,Resteasy,我希望在我的web.xml中有一些init参数,然后在应用程序中检索它们,我知道当我有一个普通的servlet时,我可以这样做。然而,使用resteasy,我将HttpServletDispatcher配置为默认servlet,因此我不太确定如何从rest资源访问它。这可能是完全简单的,或者我可能需要使用不同的方法,无论哪种方式,了解你们的想法都是很好的。下面是我的web.xml <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-in

我希望在我的web.xml中有一些init参数,然后在应用程序中检索它们,我知道当我有一个普通的servlet时,我可以这样做。然而,使用resteasy,我将HttpServletDispatcher配置为默认servlet,因此我不太确定如何从rest资源访问它。这可能是完全简单的,或者我可能需要使用不同的方法,无论哪种方式,了解你们的想法都是很好的。下面是我的web.xml

<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>RestEasy sample Web Application</display-name>
<!-- <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>true</param-value>
</context-param>  -->

 <listener>
     <listener-class>
         org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
     </listener-class>
 </listener>

 <servlet>
     <servlet-name>Resteasy</servlet-name>
     <servlet-class>
         org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
     </servlet-class>
     <init-param>
         <param-name>javax.ws.rs.Application</param-name>
         <param-value>com.pravin.sample.YoWorldApplication</param-value>
     </init-param>
 </servlet>

 <servlet-mapping>
     <servlet-name>Resteasy</servlet-name>
     <url-pattern>/*</url-pattern>
 </servlet-mapping>

</web-app>

RestEasy示例Web应用程序
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
放松
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
javax.ws.rs.Application
com.pravin.sample.YoWorldApplication
放松
/*

我的问题是如何在init参数中设置一些内容,然后在restful资源中检索它。如有任何提示,将不胜感激。谢谢大家

使用@Context注释向方法中注入您想要的任何内容:

@GET
public Response getWhatever(@Context ServletContext servletContext) {
   String myParm = servletContext.getInitParameter("parmName");
}
通过@Context,您可以注入HttpHeaders、UriInfo、Request、HttpServletRequest、HttpServletResponse、ServletConvig、ServletContext、SecurityContext

如果您使用此代码,请执行以下操作:

public class MyApplication extends Application {
  public MyApplication(@Context Dispatcher dispatcher) {
    MyClass myInstance = new MyClass();
    dispatcher.getDefautlContextObjects().
         put(MyClass.class, myInstance);
  }
}

@GET
public Response getWhatever(@Context MyClass myInstance) {
   myInstance.doWhatever();
}

为了让问题更清楚,如果我有多个restful资源,我希望能够为每个资源设置init参数,然后在该资源中检索。如果有更好的方法,我也会很高兴。。。所以任何人?我明白你的意思,如果你能通过web.xml而不是代码来完成这件事,你会很好吗?但是谢谢你的回复!回答得好,@pravin如果这个答案对你有帮助的话,你应该接受它。谢谢你忘了这么做出于各种原因,我确实从resteasy转移到apache cxf,但这是正确的答案。@马克,谢谢你的回答,但是有没有办法将initParameter设置为ServletContext?我们可以设置属性,但没有提供setInitParameter方法。如果使用自定义类尝试此方法,则会出现以下错误:
@Context annotation仅允许在类型为的方法参数上使用'[javax.ws.rs.core.HttpHeaders、javax.ws.rs.core.UriInfo、javax.ws.rs.core.Request、javax.servlet.http.HttpServletRequest、javax.servlet.HttpServletResponse、javax.servlet.ServletContext、javax.ws.rs.core.SecurityContext]。
因此它似乎并不适合自定义创建的类,有解决方法吗?