2014-09-02 92 views
1

我在Java开发中很绿色。我试图在一个servlet应用程序中使用PicoContainer。我在web.xml中配置了容器,并在尝试创建过滤器时失败。 于是,我就手动实例过滤器是这样的:实例化org.picocontainer.web.PicoServletContainerFilter时出错

Class<?> clazz = Class.forName("org.picocontainer.web.PicoServletContainerFilter"); 
Object test = clazz.newInstance(); 

,我得到相同的异常:

java.lang.InstantiationException 

但我没有详细消息。我猜想部署中的JAR中缺少某些东西(本例中不应该有ClassNotFoundExeption?)

因为它不清楚需要的依赖关系。 (好像老DLL地狱时代) 目前我正在部署下列jar:

  • PicoContainer的-2.10.2.jar
  • PicoContainer的-Web的核心2.4.jar
  • xstream- 1.3.1.jar

这是什么问题?这是一个缺少罐子或其他东西?如果有一个缺少的罐子,并且因为我没有额外的信息,我怎么能理解罐子缺失的?部署整个picocontainer罐子不是首选,因为它是一大堆文件。

编辑

问题似乎是一个抽象类! 所以我不知道如何在文档中找到这种配置可以工作: http://picocontainer.com/web/

回答

0

我自己得到答案。 问题当然是org.picocontainer.web.PicoServletContainerFilter是抽象的。该类中有一个名为servlet过滤器的实现。这里的工作cofig: enter image description here

1

我想这只是一些错误的示例代码。基本的IoC组成完全不需要过滤器。 org.picocontainer.web.PicoServletContainerListener执行配置应用程序/会话/请求容器的所有工作。

介意要求WebappComposer类型作为的context-param在web.xml中的类名:

<context-param> 
    <param-name>webapp-composer-class</param-name> 
    <param-value>com.company.MyWebappComposer</param-value> 
    </context-param> 

,如果你想给你应用程式范围的成分注入servlet上下文你需要过滤IMPL,HTTP会话范围内的会话和http请求范围。

+0

当你发布时,我发现自己的解决方案。当然,即使在没有过滤器的情况下,每个请求都可以运行。 – 2014-09-03 09:03:16

+0

这实际上是和不是。这取决于你的需求。如我所说,Listener足以组成容器,如果您需要它,Filter只会将Context/Session/Request实例添加到容器中。 所以,如果你想要注入HTTP请求请求作用域组件和HTTP会话注入到你的会话作用域组件,你将需要过滤器。 – xeye 2014-09-03 09:08:46

+0

好,只是因为我可能会有一个DAO注入谁将在每个请求打开连接 – 2014-09-03 09:16:49

相关问题