maven 使用Java Jetty在src/main/resources中提供文件

xxhby3vn  于 2023-06-21  发布在  Maven
关注(0)|答案(1)|浏览(157)

我试图用Maven创建一个简单的Java Jetty/Jersey项目,并成功地让Jersey从Java类中定义的方法将内容返回给客户端。我相信我已经设置了我的Jetty服务器,这样src/main/resources中的文件也可以通过使用WebServer.createServer中的ServletContextHandler.setBaseResource方法返回到客户端。但是,当我导航到其中一个文件的URL时,Jetty返回404文件未找到错误。
我对服务器设置的理解是,当发出请求时,Jersey类会检查是否有匹配的路径,如果找到了,则返回内容,如果没有匹配的路径,则搜索基本资源,如果文件与路径匹配,则返回文件。
我的Jetty服务器类位于src/main/java/WebServer.java中,如下所示:

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.util.resource.Resource;
import org.eclipse.jetty.util.resource.ResourceCollection;
import org.glassfish.jersey.media.multipart.MultiPartFeature;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.servlet.ServletContainer;

public class WebServer {

    public static void main(String[] args) {
        Server server = createServer();
        try {
            server.start();
            System.out.println("Server started");
            server.join();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static Server createServer() {
        Server server = new Server(9090);
        ServletContextHandler context = new ServletContextHandler(server, "/");
        Resource resources = createStaticResources();
        context.setBaseResource(resources);
        ServletHolder servlet = createServlet();
        context.addServlet(servlet, "/*");
        return server;
    }

    private static ResourceConfig createResourceConfig() {
        ResourceConfig config = new ResourceConfig();
        config.packages("Controllers");
        config.register(MultiPartFeature.class);
        return config;
    }

    private static ServletHolder createServlet() {
        ResourceConfig config = createResourceConfig();
        ServletContainer container = new ServletContainer(config);
        ServletHolder servlet = new ServletHolder(container);
        return servlet;
    }

    private static Resource createStaticResources() {
        String[] locations = new String[] {
            "src/main/resources/"
        };
        Resource resources = new ResourceCollection(locations);
        return resources;
    }
}

我的Jersey处理程序类位于src/main/java/Controllers/Main.java中,如下所示:

package Controllers;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;

@Path("/")
public class Main {
    
    @GET
    @Path("/")
    @Produces(MediaType.TEXT_PLAIN)
    public String helloWorld() {
        return "Hello World!";
    }

    @GET
    @Path("/page1")
    @Produces(MediaType.TEXT_PLAIN)
    public String page1() {
        return "Page 1";
    }
}

我在哪里误解了导致这些404错误的Jetty服务器设置?

相关问题