Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何配置jetty以使用Guice和Vaadin运行_Java_Jetty_Guice_Vaadin - Fatal编程技术网

Java 如何配置jetty以使用Guice和Vaadin运行

Java 如何配置jetty以使用Guice和Vaadin运行,java,jetty,guice,vaadin,Java,Jetty,Guice,Vaadin,我创建的guice servlet如下所示: public class GuiceApplicationServlet extends AbstractApplicationServlet { protected Provider<Application> applicationProvider; public GuiceApplicationServlet() { System.out.println("TTest"); } @

我创建的guice servlet如下所示:

public class GuiceApplicationServlet extends AbstractApplicationServlet {

    protected Provider<Application> applicationProvider;

    public GuiceApplicationServlet() {
        System.out.println("TTest");
    }

    @Inject
    public GuiceApplicationServlet(Provider<Application> applicationProvider) {
        super();
        this.applicationProvider = applicationProvider;
        System.out.println("Test");
    }

    @Override
    protected Class<? extends Application> getApplicationClass()
            throws ClassNotFoundException {
        return Application.class;
    }

    @Override
    protected Application getNewApplication(HttpServletRequest request)
            throws ServletException {
        return applicationProvider.get();
    }
}
公共类GuiceApplicationServlet扩展了AbstractApplicationServlet{
受保护的提供者applicationProvider;
公共GuiceApplicationServlet(){
系统输出打印项次(“测试”);
}
@注入
公共GuiceApplicationServlet(提供程序applicationProvider){
超级();
this.applicationProvider=applicationProvider;
系统输出打印(“测试”);
}
@凌驾

受保护类因为Guice应该创建所有Servlet实例,所以必须从
web.xml
文件中删除
Servlet
Servlet映射
项。

必须创建扩展
com的Guice Servlet模块。​谷歌。​注射​servlet.ServletModule
(我们称之为
FooModule
)。您可以通过重写
configureServlets()
方法在那里定义到servlet的绑定和路径

然后,您必须通过扩展
com.google.inject.servlet.GuiceServletContextListener
(我们称之为
BarContextListener
)来创建上下文侦听器。在这里,您必须实现
getInjector()
方法,如下所示:

protected Injector getInjector() {
        Injector injector = Guice.createInjector(new FooModule());
        return injector;
    }
然后从web.xml中删除所有servlet映射,然后放入筛选器:

   <filter>
        <filter-name>guiceFilter</filter-name>
        <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>guiceFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

guiceFilter
com.google.inject.servlet.GuiceFilter
guiceFilter
/*
和您创建的上下文侦听器:

<listener>
        <listener-class>path.to.package.of.context.listener.BarContextListener</listener-class>
    </listener>

path.to.package.of.context.listener.BarContextListener

通过这种方式,您的所有servlet都由Guice管理,并在应用程序的服务器端启用依赖项注入。它在Tomcat中对我有效,因此也应该在Jetty上有效。不要忘记将
Guice servlet-.jar
包含到您的类路径中。我没有将其用于Vaadin,但我想我的答案对您有一点帮助。

我已经编写了一篇关于这个主题的博客文章,我相信它会非常有用:

<listener>
        <listener-class>path.to.package.of.context.listener.BarContextListener</listener-class>
    </listener>