67

Tomcatにデプロイして、JAX-RSをいじっています。基本的には次のとおりです。

@Path("/hello")
@Produces({"text/plain"})
public class Hellohandler {

    @GET
    public String hello() {
        return "Hello World";
    }

}

ServletContextJAX-RS リソース内でを取得する方法はありますか?

4

5 に答える 5

103

さらに、@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
于 2009-11-29T05:55:11.087 に答える
9

他の人が指摘したように、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 アノテーションを使用する限り、任意のメソッド名を使用できます。

于 2013-01-06T15:15:21.583 に答える
5

このようにリソース注入を使用するだけで、

@Resource ServletContext servletContext;
于 2009-11-29T04:37:53.710 に答える
0

チェックアウト: http://markmail.org/message/isy6mdpoh66vyi6k#query:jersey%20getservletcontext%20-spring+page:1+mid:sa7n465kfgdoskv5+state:results

于 2010-06-30T21:52:51.127 に答える