Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.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/Jersey/Guice提供静态内容_Java_Jakarta Ee_Jetty_Jersey_Guice - Fatal编程技术网

Java 使用Jetty/Jersey/Guice提供静态内容

Java 使用Jetty/Jersey/Guice提供静态内容,java,jakarta-ee,jetty,jersey,guice,Java,Jakarta Ee,Jetty,Jersey,Guice,类似于另一个问题(参见),我想提供Jetty的静态内容。在浩瀚的互联网上散布着几个类似的问题,但大多数都不涉及Guice,而那些涉及Guice的问题已经完全过时了 我有一个现有的服务,它使用Jersey(1.12)和Guice(3)以及以下web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.

类似于另一个问题(参见),我想提供Jetty的静态内容。在浩瀚的互联网上散布着几个类似的问题,但大多数都不涉及Guice,而那些涉及Guice的问题已经完全过时了

我有一个现有的服务,它使用Jersey(1.12)和Guice(3)以及以下
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
    <display-name>My Service</display-name>

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

    <listener>
        <listener-class>com.example.MyGuiceConfig</listener-class>
    </listener>

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

</web-app>
当我使用
mvnjetty:run
调用JettyMaven插件时,我的服务按预期工作。但是,对静态内容的任何请求都会生成404


如何在不影响服务的情况下提供任意静态内容?(即,不需要我更改技术堆栈的最小更改?

您如何配置Jersey将在Jersey ServletModule中处理的url片段?如果您指定的前缀与静态内容不冲突,它应该可以工作

public class Config extends GuiceServletContextListener {

  protected Injector getInjector() {
    return Guice.createInjector(
        new JerseyServletModule() {
          protected void configureServlets() {
            bind(Service.class);
            serve("/services/*").with(GuiceContainer.class);
          }
        });
  }

}

应该从主机8080/services/service和webapp中包含的静态资源为Servlet.class提供服务


编辑请参阅,以了解在不更改REST端点路径的情况下实现此操作的另一种方法。

查看这是否对您有帮助我没有
JerseyServletModule
。不需要创建或提供
.war
。您在com.example.MyGuiceConfig中配置了什么?你是如何通知Guice要注入哪些Jersey服务类的?哦,对不起,你是对的。它在MyGuiceConfig中。我发布了代码。如果您要求Jetty GuiceContainer提供“/*”服务,我相信它会在不知道静态资源的情况下拦截每个请求。您可以将该路径更改为“/services/*”或类似的路径吗?那么GuiceContainer就不应该隐藏你的静态资源了。谢谢你的帮助。在我将容器更改为服务“/api/*”并清除了一些旧的积垢之后,它正在服务静态资源。
public class Config extends GuiceServletContextListener {

  protected Injector getInjector() {
    return Guice.createInjector(
        new JerseyServletModule() {
          protected void configureServlets() {
            bind(Service.class);
            serve("/services/*").with(GuiceContainer.class);
          }
        });
  }

}
@Singleton
@Path("/service")
@Produces({MediaType.TEXT_PLAIN})
public class Service {

  @GET
  public String run() {
    return "Service running";
  }

}