문제

나는 Jax-Rs와 함께 Tomcat에 배포하고 있습니다. 기본적으로 :

@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 Naming Pattern을 따르는 한 원하는 메소드 이름을 사용할 수 있습니다. void setxxx (foo foo) @Context 주석을 사용하십시오.

ServletContextListener를 구현할 때도 서블릿 컨텍스트를 사용할 수 있습니다. 따라서 시작시 연결 문자열과 같은 매개 변수를 쉽게로드 할 수 있습니다. 웹 애플리케이션을 시작할 때 ServletContextListener를로드하는 Web.xml에서 청취자 클래스를 정의 할 수 있습니다.

web.xml 파일 내부에 추가하십시오 <listener>그리고 <context-param> 태그. 그만큼 <listener> 스타트 업에서 호출되는 클래스를 지정합니다. 그만큼 <context-param> 태그는 웹 애플리케이션 내에서 사용 가능한 컨텍스트 매개 변수를 정의합니다.

먼저 포함 <listener>그리고 <context-param> Web.xml 파일의 태그 :

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

이제 다음과 같이 서블릿 컨텍스트 클래스를 만듭니다.

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
}

이제 읽은 매개 변수를 할당 할 정적 변수를 선택할 수 있습니다. 이를 통해 시작시 매개 변수를 한 번 읽고 할당 한 정적 변수를 통해 여러 시간을 재사용 할 수 있습니다.

이와 같은 자원 주입 만 사용하십시오.

@Resource ServletContext servletContext;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top