获取JAX-RS资源中的ServletContext

我正在玩JAX-RS,部署在Tomcat上。 这基本上是:

@Path("/hello") @Produces({"text/plain"}) public class Hellohandler { @GET public String hello() { return "Hello World"; } } 

有没有什么办法可以在我的JAX-RS资源中获得ServletContext

此外, @Resource注释可能无法正常工作。 尝试这个

 @javax.ws.rs.core.Context ServletContext context; 

直到你达到服务方法,注射才会发生

 public class MyService { @Context ServletContext context; public MyService() { print("Constructor " + context); // null here } @GET @Path("/thing") { print("in wizard service " + context); // available here 

在实现ServletContextListener时,servlet上下文也是可用的。 这样可以在启动时轻松加载连接string等参数。 您可以在web.xml中定义侦听器类,在web应用程序启动时加载您的ServletContextListener。

在web.xml文件中,添加<listener><context-param>标签。 <listener>指定在启动时调用的类。 <context-param>标签定义了您的Web应用程序中可用的上下文参数。

首先,在web.xml文件中包含<listener><context-param>标签:

 <web-app> <!-- ... --> <listener> <listener-class>com.your.package.ServletContextClass</listener-class> </listener> <!-- Init parameters for db connection --> <context-param> <param-name>your_param</param-name> <param-value>your_param_value</param-value> </context-param> <!-- ... --> </web-app> 

现在按如下所示创buildservlet上下文类。

 public class ServletContextClass implements ServletContextListener { public void contextInitialized(ServletContextEvent arg0) { //use the ServletContextEvent argument to access the //parameter from the context-param String my_param = arg0.getServletContext().getInitParameter("your_param"); }//end contextInitialized method @Override public void contextDestroyed(ServletContextEvent arg0) { }//end constextDestroyed method } 

您现在可以select哪个静态variables来分配您已经读取的参数。 这允许您在启动时读取参数一次,并通过您分配给它的静态variables重复使用很多次。

只要使用像这样的资源注入,

 @Resource ServletContext servletContext; 

正如其他人所指出的,servletContext可以在现场级别注入。 它也可以在方法级别注入:

 public static class MyService { private ServletContext context; private int minFoo; public MyService() { System.out.println("Constructor " + context); // null here } @Context public void setServletContext(ServletContext context) { System.out.println("servlet context set here"); this.context = context; minFoo = Integer.parseInt(servletContext.getInitParameter("minFoo")).intValue(); } @GET @Path("/thing") public void foo() { System.out.println("in wizard service " + context); // available here System.out.println("minFoo " + minFoo); } } 

这将允许您使用可用的servletContext执行额外的初始化。

明显的注意 – 你不必使用方法名setServletContext 。 只要您遵循setter的标准java bean命名模式,就可以使用任何方法名称, void setXXX(Foo foo)并使用@Context注释。

查看: http : //markmail.org/message/isy6mdpoh66vyi6k#query : jersey%20getservletcontext%20-spring+page :1+ mid : sa7n465kfgdoskv5+state : results