【问题标题】:Embedded Jetty REST service with Welcome File带有欢迎文件的嵌入式 Jetty REST 服务
【发布时间】:2015-06-22 22:03:59
【问题描述】:

我正在尝试创建一个具有 REST API 并且可以提供静态 html 等文档的 Web 服务。目前我的 REST (Jersey 2.17) api 工作正常,但我正在努力提供资源,例如我的 index.html

项目结构

src
--main
----java
------resource
--------RestResource.java
------app
--------LocalRunner.java
----webapp
------index.html

LocalRunner.java

public class LocalRunner {
    private final Server server;

    public LocalRunner() {
        server = new Server(8315);
    }

    public void start() throws Exception {    
        // REST
        WebAppContext restHandler = new WebAppContext();

        restHandler.setResourceBase("./");
        restHandler.setClassLoader(Thread.currentThread().getContextClassLoader());

        ServletHolder restServlet = restHandler.addServlet(ServletContainer.class,  "/rest/*");
        restServlet.setInitOrder(0);
        restServlet.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "resource");

        // Web
        ResourceHandler webHandler = new ResourceHandler();
        webHandler.setResourceBase("./");
        webHandler.setWelcomeFiles(new String[]{"index.html"});

        // Server
        HandlerCollection handlers = new HandlerCollection();
        handlers.addHandler(restHandler);
        handlers.addHandler(webHandler);

        server.setHandler(handlers);
        server.start();
    }

    public static void main(String[] args) throws Exception {
        new LocalRunner().start();
    }
}

点击localhost:8315/rest/someRestEndpoint 工作正常,但如果我尝试点击localhost:8315,当我期待我的index.html 欢迎文件时,我会得到一个目录结构。我究竟做错了什么?

请注意,我没有使用 WEB.XML,因为我正在尝试在上面的类中进行所有配置。


依赖项(如果有帮助)(Gradle)

def jettyVersion = '7.2.2.v20101205';
compile "org.eclipse.jetty:jetty-server:${jettyVersion}"
compile "org.eclipse.jetty:jetty-webapp:${jettyVersion}"
compile "org.eclipse.jetty:jetty-servlet:${jettyVersion}"

def jerseyVersion = '2.17'
compile "org.glassfish.jersey.core:jersey-server:${jerseyVersion}"
compile "org.glassfish.jersey.containers:jersey-container-servlet-core:${jerseyVersion}"

【问题讨论】:

标签: java web-services jetty jersey-2.0 embedded-jetty


【解决方案1】:

事实证明,请求是按照它们添加到集合中的顺序分派给处理程序的,restHandler 必须已经将响应设置为完成。结果,请求从未发送到webHandler,并且欢迎文件从未添加到响应中。 ResourceHandler 也在基础目录中查找 index.html,将 resourceBase 设置为 src/main/webapp 修复了这个问题。

【讨论】:

    猜你喜欢
    • 2020-07-11
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 2020-06-23
    相关资源
    最近更新 更多