Dropwizard:无法提供静态HTML

时间:2018-09-25 14:16:05

标签: java html static dropwizard serving

我目前正在为Dropwizard中的根路径“ /”提供一个静态html页面。到目前为止,我只收到一个错误页面,指出“ HTTP错误404访问/。原因:未找到”。

我已经按照Dropwizard documentation for 1.2.2和本教程here进行了此操作,并对服务代码进行了一些更改。我的.yml文件中的根路径为/profile/v1,以允许我的getAll服务正常工作(当我第一次启动时,由于拥有Multiple servlets map to path /*而出现错误。.yml如下所示:

server:
  type: simple
  applicationContextPath: /
  rootPath: /profile/v1

此外,我在主应用程序类中的初始化是:

@Override
public void initialize(final Bootstrap<AutomationConfigServiceConfiguration> bootstrap) {
    bootstrap.addBundle(new AssetsBundle("/../resources", "/", "index.html"));
}

这是向球衣注册的:

environment.jersey().setUrlPattern("/*");

其中/resources是我要保存的静态资产的目录,位于java目录之外。

到目前为止,在此设置中,我已经能够使我的服务正常运行。例如,当我转到localhost:8080 / profile / v1 / name / getAll时,我可以从数据库中检索所有名称,如果我转到localhost:8080 / profile / v1 / titles / getAll,则可以从数据库中获取所有标题。如果我使用localhost:8080(带或不带“ /”),我只会得到一个404页面,说它找不到“ /”。从理论上讲,这应该非常简单,所以我不确定该怎么做。

编辑:

当我进入/ profile / v1时,得到以下信息:

{
code: 404,
message: "HTTP 404 Not Found",
}

我应该提到,我不希望将html放到这里;我希望从根目录开始使用它,因为路径/ profile / v1被我所有的服务使用。要求这样做以帮助设置DNS。

1 个答案:

答案 0 :(得分:3)

在对代码进行了几处修改之后,它才能正常工作。

  1. AssetBundle路径是从项目资源文件夹中计算的。因此,添加相对于它的路径。这里的assets目录位于${Project Root}/src/main/resources目录

    bootstrap.addBundle(new AssetsBundle("/assets/", "/"));
    
  2. 删除显式的Jersey注册表项。我相信这是从配置继承的。

    environment.jersey().setUrlPattern("/*"); /*this line should be removed*/
    

您需要将dropwizard-assets包括在项目的依赖项中。

作为参考,刚刚创建了一个带有静态资产的sample project