tomcat - JAX-RS 리소스에서 서벌렛컨텍스트 받기




servlets java-ee (4)

다른 사람들이 언급했듯이, 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, void setXXX (Foo foo)에 대한 표준 자바 빈 명명 패턴을 따르고 @Context 어노테이션을 사용하는 한 원하는 모든 메소드 이름을 사용할 수 있습니다.

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

이처럼 자원 주입을 사용하면됩니다.

@Resource ServletContext servletContext;





application-variables