Dropwizard: Unable to serve static HTML
Asked Answered
C

1

1

I'm currently working on serving a static html page in Dropwizard at the root path "/". So far, I've only received an error page stating "HTTP ERROR 404 Problem accessing /. Reason: Not Found".

I've followed the Dropwizard documentation for 1.2.2 in doing this, as well as this tutorial here, with some changes to the code for my services to work. My root path in my .yml file is /profile/v1 to allow my getAll services to work (when I first started, I was getting an error for having Multiple servlets map to path /*. The .yml looks like this:

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

In addition, my initialize in the main application class is:

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

This is registered to jersey as:

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

where /resources is the directory I'm keeping my static assets, outside of the java directory.

So far, I've been able to get my services to work fine in this setup. For example, when I go to localhost:8080/profile/v1/name/getAll, I'm able to retrieve all the names from the database, and if I go to localhost:8080/profile/v1/titles/getAll, I get all titles from the database. If I use localhost:8080, with or without a "/", I just get a 404 page, saying it cannot find "/". In theory, this should be very simple, so I'm unsure what else I should do.

Edit:

When I go to /profile/v1, I get the following:

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

I should mention that I don't want my html to be served here; I'd like for it to be served at root, as the path /profile/v1 is used by all my services. This was requested to help set up DNS.

Cayenne answered 25/9, 2018 at 14:16 Comment(2)
As to my understanding, your static page should be available from localhost:8080/profile/v1Ribaudo
Doing this brings up a 404 json response. I'll edit the question to include this.Cayenne
R
4

After couple of modifications to your code, got it to working condition.

  1. AssetBundle path is calculated from project resources folder. Therefore add path relative to that. Here assets directory is located in ${Project Root}/src/main/resources directory

    bootstrap.addBundle(new AssetsBundle("/assets/", "/"));
    
  2. Remove explicit Jersey registry entry. I believe this is inherited from configuration.

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

You will need to included dropwizard-assets to your project's dependencies.

For reference, just created a sample project with static assets.

Ribaudo answered 26/9, 2018 at 4:27 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.