Java 如何配置jetty以使用Guice和Vaadin运行
我创建的guice servlet如下所示: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"); } @
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>