作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Jersey 1.x、Guice 开发一个简单的应用程序并尝试在 Tomcat 上运行。
我使用了 Guice 过滤器和 Guice 监听器以及资源和应用程序。
下面是我的 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 注入(inject)了我所有的依赖项,
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;
}
}
我使用构造函数注入(inject)来注入(inject)类。
这就是我的应用程序的样子
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
我可以在日志中看到所有类都已成功实例化。
这些是我的 pom 中的依赖项。
<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>
就带 guice 的 Tomcat 而言,我还缺少什么吗?
最佳答案
您正在使用 ServletModule。请改用 JerseyServletModule。
public class SimpleServlet extends JerseyServletModule
常规清理选项:
当我使用 Guice/Tomcat/Jersey 1.x 时,我做了一些不同的事情。为了提高灵 active ,您可以将路径参数从 SimpleResource 的路径参数中取出并将其移动到方法中。也可以直接给资源添加Singleton Annotation。
@Singleton
@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;
}
}
删除 SimpleApplication 并在 configureGuiceServlet 中删除反射和选项映射并改为:
public class SimpleServlet extends JerseyServletModule{
@Override
protected void configureServlets() {
configureGuiceServlet();
}
private void configureGuiceServlet() {
serve("/service/*").with(GuiceContainer.class, new HashMap<String, String>());
bind(Manager.class).to(ManagerImpl.class);
}
}
关于java - Jersery1.x、Guice 和 Tomcat 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43216739/
我是一名优秀的程序员,十分优秀!