当前位置: 首页 > 知识库问答 >
问题:

使用Jetty/泽西/Guice提供静态内容

朱祺
2023-03-14

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

我有一个现有的服务,使用泽西(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>

< code>MyGuiceConfig看起来像这样:

public class MyGuiceConfig extends GuiceServletContextListener
{
    @Override
    protected Injector getInjector()
    {
        return Guice.createInjector(new JerseyServletModule()
        {
            @Override
            protected void configureServlets()
            {
                bind(SomeResource.class);
                bind(SomeDao.class).to(ConcreteSomeDao.class);
                serve("/*").with(GuiceContainer.class);
            }
        });
    }
}

当我使用 mvn jetty:run 调用 jetty-maven-plugin 时,我的服务按预期工作。但是,任何对静态内容的请求都会产生404。

如何在不影响服务的情况下提供任意的静态内容?(即不需要我改变技术组合的最小必要改变?)

共有1个答案

沈德寿
2023-03-14

您如何配置Jersey将在JerseyServletModule中处理的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);
          }
        });
  }

}

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

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

}

应从主机提供Servlet.class:8080/service/service和包含在webapp中的静态资源...

编辑See Jersey/*servlet映射会导致静态资源的404错误,这是另一种不改变RESTendpoint路径的方法。

 类似资料:
  • 我已经配置了spring boot来加载Jersey作为过滤器。 spring.jersey.type=filter我已将我的泽西属性设置为允许静态内容: 属性(ServletProperties.FILTER_FORWARD_ON_404, 真);我在Spring启动中读到,我可以将我的内容放在我的资源目录中,在名为“静态”,“公共”文件夹的目录下。然而,我永远无法到达我的索引.html页面。我

  • 问题内容: 我正在尝试使用嵌入式Jetty构建一个简单的演示应用程序,该应用程序可以从“ html”目录提供静态文件,该目录是当前工作目录的子目录。这个想法是,带有演示jar和内容的目录可以移动到新位置,并且仍然可以使用。 我已经尝试了以下方法的变体,但是我不断得到404。 更新: 这是Jetty教程中记录的解决方案。如正确答案中所述,它使用而不是: 问题答案: 使用代替。

  • (2013年1月2日更新)我现在已经将所有代码和一个pom.xml添加到https://github.com/AndyWi/GuiceJerseyJettyShiroExample的github中(更新结束) 我正在尝试使用Shiro将基于表单的身份验证添加到我的简单应用程序中。该应用程序使用Guice 3.0、Jersey 1.16和Shiro 1.2.1,运行在嵌入式Jetty 9.0.0.M

  • 我正在用< code>Jetty服务器运行一个Spring Boot应用程序。API由< code>Jersey servlet提供服务。静态内容放在< code>src/main/static和< code > src/main/private-static 中。 问题#1未提供中的静态内容 中的内容是公开的,可以自由访问。据此:https://docs.spring.io/spring-boo

  • 我无法访问静态内容(angular app),甚至无法访问简单的索引。来自spring boot的html文件。我一直收到404错误。Spring没有为我提供这些静态文件。自从升级到Spring Boot 2.2.4后,我就遇到了这个问题。我必须升级以应对Zip64问题。 我的application.properties里有这样一句话: 我也有自己的staticResourceConfigurat

  • 问题内容: 我在两个不同的容器(Tomcat和Jetty)上部署了一个webapp,但是它们用于提供静态内容的默认servlet具有处理我要使用的URL结构的不同方式(详细信息)。 因此,我希望在web应用程序中包含一个小型servlet,以提供其自己的静态内容(图像,CSS等)。Servlet应该具有以下属性: No external dependencies Simple and reliab