Tomcatにデプロイして、JAX-RSをいじっています。基本的には次のとおりです。
@Path("/hello")
@Produces({"text/plain"})
public class Hellohandler {
@GET
public String hello() {
return "Hello World";
}
}
ServletContext
JAX-RS リソース内でを取得する方法はありますか?
Tomcatにデプロイして、JAX-RSをいじっています。基本的には次のとおりです。
@Path("/hello")
@Produces({"text/plain"})
public class Hellohandler {
@GET
public String hello() {
return "Hello World";
}
}
ServletContext
JAX-RS リソース内でを取得する方法はありますか?
さらに、@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
他の人が指摘したように、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を使用する必要はありません。セッターの標準の Java Bean 命名パターン、 void setXXX(Foo foo)に従い、@Context アノテーションを使用する限り、任意のメソッド名を使用できます。
このようにリソース注入を使用するだけで、
@Resource ServletContext servletContext;