Dropwizard:无法提供静态 HTML
Dropwizard: Unable to serve static HTML
我目前正在 Dropwizard 的根路径“/”处提供静态 html 页面。到目前为止,我只收到一个错误页面,说明 "HTTP ERROR 404 Problem accessing /. Reason: Not Found".
我按照 Dropwizard documentation for 1.2.2 in doing this, as well as this tutorial here 对代码进行了一些更改以使我的服务正常工作。我的 .yml 文件中的根路径是 /profile/v1
以允许我的 getAll 服务工作(当我第一次启动时,我收到一个错误,因为有 Multiple servlets map to path /*
。.yml 看起来像这样:
server:
type: simple
applicationContextPath: /
rootPath: /profile/v1
另外,我在主应用class中的初始化是:
@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 所请求的。
在对您的代码进行了几次修改后,使其进入了工作状态。
AssetBundle 路径是根据项目资源文件夹计算的。因此添加相对于它的路径。这里assets
目录位于${Project Root}/src/main/resources
目录
bootstrap.addBundle(new AssetsBundle("/assets/", "/"));
删除明确的 Jersey 注册表项。我相信这是从配置继承的。
environment.jersey().setUrlPattern("/*"); /*this line should be removed*/
您需要将 dropwizard-assets
添加到项目的依赖项中。
作为参考,刚刚创建了一个带有静态资产的 sample project。
我目前正在 Dropwizard 的根路径“/”处提供静态 html 页面。到目前为止,我只收到一个错误页面,说明 "HTTP ERROR 404 Problem accessing /. Reason: Not Found".
我按照 Dropwizard documentation for 1.2.2 in doing this, as well as this tutorial here 对代码进行了一些更改以使我的服务正常工作。我的 .yml 文件中的根路径是 /profile/v1
以允许我的 getAll 服务工作(当我第一次启动时,我收到一个错误,因为有 Multiple servlets map to path /*
。.yml 看起来像这样:
server:
type: simple
applicationContextPath: /
rootPath: /profile/v1
另外,我在主应用class中的初始化是:
@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 所请求的。
在对您的代码进行了几次修改后,使其进入了工作状态。
AssetBundle 路径是根据项目资源文件夹计算的。因此添加相对于它的路径。这里
assets
目录位于${Project Root}/src/main/resources
目录bootstrap.addBundle(new AssetsBundle("/assets/", "/"));
删除明确的 Jersey 注册表项。我相信这是从配置继承的。
environment.jersey().setUrlPattern("/*"); /*this line should be removed*/
您需要将 dropwizard-assets
添加到项目的依赖项中。
作为参考,刚刚创建了一个带有静态资产的 sample project。