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