2016-07-18 2 views
1

쿼리 매개 변수를 읽는 웹 응용 프로그램이 있습니다. 이 매개 변수를 사용하여 외부 app-source에서 일부 데이터를 가져옵니다.JavaEE CDI 삽입 - HttpServletRequest/Response를 삽입 할 수 없습니다.

@WebServlet(name = "SomethingServlet", urlPatterns = {"/"}, loadOnStartup = 0) 
public class SomethingServlet extends HttpServlet { 

    @Inject 
    InterfaceOfDesire objectOfDesire; 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     objectOfDesire.doSomething(); 
    } 
} 

InterfaceOfDesire 한 번 구현 (기압) 인 인터페이스입니다 : 웹 응용 프로그램은 간단한 서블릿이다. 따라서 애매 모호하지 않아야합니다.

public interface InterfaceOfDesire { 
    void doSomething(); 
} 


public class ClassOfDesire implements InterfaceOfDesire { 
    @Override 
    public void doSomething() { 
     // do something very cool 
    } 
} 

그리고 마지막으로 중요한 것은 구현 클래스의 종류를 해결하는 리졸버가 (ATM에서만 1)

public class SomethingResolver { 
    @Inject 
    private HttpServletRequest request; 
    @Inject 
    private HttpServletResponse response; 

    @Inject 
    public SomethingResolver(ServletContext servletContext) { 
     // do something with the servlet context 
    } 

    @Produces 
    public InterfaceOfDesire getInstance() { 
     // do something with request and response 
     // afterwards return object 
     return new ClassOfDesire(); 
    } 
} 

는 지금은 오류를

WELD-001408: Unsatisfied dependencies for type HttpServletResponse with qualifiers @Default 

무엇 오전를 얻을 수 내가 잘못하고있어?

+0

'@ Inject'와'@ Named' + scope annotation ('@ ApplicationScoped' 등)을 사용하고 계십니까?'ViewScoped'와'SessionScoped'는' Serializable'입니다. – Milkmaid

+0

어떤 컨테이너에 배포하고 있습니까? 버전을 포함하십시오. –

답변

0

콩 (SomethingResolver)을 어떻게 든 HTTP 요청이나 세션에 바인딩해야한다고 말할 수 있습니다. 그래야만 HttpServletRequest (또는 응답)에 액세스 할 수 있습니다.

@RequestScoped으로 주석을 달아보십시오. @SessionScoped도 사용할 수 있습니다.

이유는 지금까지와 마찬가지로 빈 수명주기가 요청에 바인딩되어 있지 않기 때문입니다. 요청보다 훨씬 오래 걸릴 수 있습니다. CDI는 어떤 서블릿 요청이 그 안에 삽입되어야 하는지를 알 수 없다.

관련 문제