Tomcat 如何在应用程序范围内从JAX-RS服务中的web.cml检索参数?

Tomcat 如何在应用程序范围内从JAX-RS服务中的web.cml检索参数?,tomcat,jax-rs,Tomcat,Jax Rs,我的问题有两个:首先,我需要在JAX-RS应用程序中从web.xml访问上下文参数。其次,我只需要为应用程序执行一次(应用程序范围)。我正在部署到tomcat6,如果这有什么不同的话 问题1:如何在JAX-RS中创建应用程序范围的“bean” 问题2:在这个bean中,如何从web.xml访问上下文参数 干杯 这似乎不起作用: import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest

我的问题有两个:首先,我需要在JAX-RS应用程序中从web.xml访问上下文参数。其次,我只需要为应用程序执行一次(应用程序范围)。我正在部署到tomcat6,如果这有什么不同的话

  • 问题1:如何在JAX-RS中创建应用程序范围的“bean”
  • 问题2:在这个bean中,如何从web.xml访问上下文参数
干杯

这似乎不起作用:

import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Context;
import com.sun.jersey.spi.resource.Singleton;

@Singleton
public class ApplicationBean 
{
    @Context
    HttpServletRequest request;

    @PostConstruct
    public void init()
    {
        // do stuff
    }
}

Q1:@Singleton注释将使您的资源成为

问题2:您可以将请求对象注入到JAX-RS资源中,并从中获取任何上下文参数:

@GET
@Path("/my")
public String get(@Context HttpServletRequest request) {
    request.getServletContext().getInitParameter("my-param");


谢谢,这很有帮助。在标记为
code
@Singleton
code
的类中,是否有在构造时始终调用的方法?或者我需要使用类似于
code
@PostConstruct
code
?另外:在
code
@Singleton
code
类中,是否有任何方法可以在没有请求的情况下获取上下文参数值?您应该能够将@Context-HttpServletRequest作为类属性注入,然后可以在\@PostConstruct方法中使用,但是要小心,因为范围是应用程序,它可能不会在后续调用中反映当前的实际请求。什么不起作用@后构造需要CDI或EJB。您使用的是完整的JavaEE服务器吗?如果您只使用像Tomcat这样的web容器,那么这实际上是行不通的……默认情况下,JAX-RS将为每次调用创建一个新的资源实例,我认为您无法通过CDI或EJB来改变这种行为……@Singleton来自javax.inject(CDI)或javax.EJB(EJB),我担心这两种方法都需要EE。。。如果你不能换成玻璃鱼,你可以看看我。
@Context 
HttpServletRequest request;

@PostConstruct
public void init() {
    request.getServletContext().getInitParameter("my-param"); 
}