我正在開發一個簡單的應用程序,使用Jersey 1.x,Guice並嘗試在Tomcat上運行。問題與Jersery1.x,Guice和Tomcat
我使用了Guice過濾器和Guice Listener以及資源和應用程序。
下面是我的web.xml:
<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>
<listener>
<display-name>Guice Listener</display-name>
<listener-class>com.simple.application.GuiceListener</listener-class>
</listener>
而且使用GuiceListener我注入我所有的依賴關係,
public class GuiceListener extends GuiceServletContextListener {
private Injector injector;
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
try {
super.contextDestroyed(servletContextEvent);
} finally {
injector = null;
}
}
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
injector = Guice.createInjector(new SimpleServlet());
super.contextInitialized(servletContextEvent);
injector.injectMembers(this);
}
@Override
protected Injector getInjector() {
return injector;
}
}
,這是我的Servlet的樣子
public class SimpleServlet extends JerseyServletModule {
@Override
protected void configureServlets() {
configureGuiceServlet();
}
private void configureGuiceServlet() {
bind(SimpleResource.class).in(Scopes.SINGLETON);
serve("/service/*").with(GuiceContainer.class);
bind(Manager.class).to(ManagerImpl.class);
}
}
我用GET方法創建資源,
@Path("/stuff")
public class SimpleResource {
private final ManagerImpl manager;
@Inject
public SimpleResource(final ManagerImpl manager) {
this.manager = manager;
}
@GET
@Path("{id}")
@Produces(MediaType.TEXT_HTML)
public String submitData(@PathParam("id") final String id) {
String welcomeScreen = manager.getWelcomeScreen();
return "This is" + welcomeScreen + id;
}
}
我使用Constructor Injection來注入類。
這是我的應用程序的外觀
public class SimpleApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
return ImmutableSet.<Class<?>>builder()
.add(SimpleResource.class)
.build();
}
}
我在Tomcat 7部署此,當我試着打了應用終端,我得到404,
http://localhost:9999/simple-0.0.1-SNAPSHOT/service/stuff/id
我可以在日誌中看到所有類都已成功實例化。
這些是我的朋友的依賴關係。
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.18.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-guice</artifactId>
<scope>compile</scope>
<version>1.18.6</version>
</dependency>
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-servlet</artifactId>
<scope>compile</scope>
<version>3.0</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
<version>2.5</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<scope>compile</scope>
<version>14.0</version>
</dependency>
</dependencies>
有什麼,我失蹤,只要Tomcat與Guice?
如前所述,我改變我的servlet從JerseyServletModule代替的servlet延伸,也可作爲建議我改變了SimpleResource和SimpleServlet,但我仍然提到404。這是鏈接到變化https://github.com/sasidhar06/simpleproject – user1767288
你可以編輯你的帖子來更新你的代碼,現在它是什麼,所以我現在可以看到它是什麼? –
我編輯我的文章,以我的代碼看起來如何 – user1767288