我有一个读取查询参数的Web应用程序。它使用该参数从外部应用程序源获取一些数据。 Web应用程序是一个简单的Servlet:
@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)
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 :(得分:0)
我想说bean(SomethingResolver
)需要以某种方式绑定到HTTP请求或其会话。只有这样,它才能访问HttpServletRequest
(或响应)。
尝试使用@RequestScoped
进行注释。 @SessionScoped
也可能有用。
这背后的原因是你现在的方式,bean生命周期没有绑定到请求 - 它甚至可能比请求更长。 CDI无法告知应该将哪个servlet请求注入其中。