JavaEE CDI注入-无法注入HttpServletRequest/Response
我有一个读取查询参数的web应用程序。它使用该参数从外部应用程序源获取一些数据。web应用程序是一个简单的Servlet:JavaEE CDI注入-无法注入HttpServletRequest/Response,java,servlets,jakarta-ee,cdi,Java,Servlets,Jakarta Ee,Cdi,我有一个读取查询参数的web应用程序。它使用该参数从外部应用程序源获取一些数据。web应用程序是一个简单的Servlet: @WebServlet(name = "SomethingServlet", urlPatterns = {"/"}, loadOnStartup = 0) public class SomethingServlet extends HttpServlet { @Inject InterfaceOfDesire objectOfDesire; p
@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是(atm)实现一次的接口。因此,不应存在歧义
public interface InterfaceOfDesire {
void doSomething();
}
public class ClassOfDesire implements InterfaceOfDesire {
@Override
public void doSomething() {
// do something very cool
}
}
最后,但并非最不重要的是有一个解析器,它解析实现类的类型(仅atm 1)
现在我得到了错误
WELD-001408: Unsatisfied dependencies for type HttpServletResponse with qualifiers @Default
我做错了什么?我想说bean(SomethingResolver
)需要以某种方式绑定到HTTP请求或其会话。只有这样,它才能访问HttpServletRequest
(或响应)
尝试使用@RequestScoped
对其进行注释@SessionScoped
可能也会起作用
这背后的原因是,按照您现在的方式,bean生命周期没有绑定到请求——它甚至可以比请求更长。CDI无法判断应该将哪个servlet请求注入其中。我想说bean(SomethingResolver
)需要以某种方式绑定到HTTP请求或其会话。只有这样,它才能访问HttpServletRequest
(或响应)
尝试使用@RequestScoped
对其进行注释@SessionScoped
可能也会起作用
这背后的原因是,按照您现在的方式,bean生命周期没有绑定到请求——它甚至可以比请求更长。CDI无法判断应该将哪个servlet请求注入其中。您是否用
@Named
+范围注释(@ApplicationScoped
等)标记了您使用@Inject
的类不要忘记ViewScoped
和SessionScoped
需要实现Serializable
。您要部署到哪个容器?包括版本。您是否用@Named
+范围注释(@ApplicationScoped
,等等)标记了您正在使用@Inject
的类。不要忘记查看范围
和会话范围
需要实现可序列化
。您将部署到哪个容器?包括版本。
WELD-001408: Unsatisfied dependencies for type HttpServletResponse with qualifiers @Default