java - 嵌入式 jetty ServletTester 提供单个静态文件

标签 java unit-testing junit jetty

我正在使用 jetty 进行单元测试,我不仅想提供测试中的 servlet,还想提供静态页面。我的应用程序需要静态页面。我正在像这样初始化 jetty

tester = new ServletTester();
tester.setContextPath("/context");
tester.addServlet(MyServlet.class, "/servlet/*");
tester.start();

我现在需要的是类似的东西

tester.addStaticPage("local/path/in/my/workspace", "/as/remote/file");

这可以通过 jetty 实现吗?

最佳答案

我认为你不能用 ServletTester 来做到这一点。 ServletTester 为 servlet 创建单个上下文。您需要设置至少具有两个上下文的嵌入式 jetty:一个用于 servlet,另一个用于静态内容。

如果有一个完整的 WebAppContext,那么您就已经准备好了,但没有。

您可以复制 ServletTester 并添加头发,或者您可以直接阅读 API 并配置必要的上下文。这是一个代码片段,向您展示基本思想,您将 无法按原样编译此文件。您需要为静态内容创建合适的上下文。

        server = new Server();

        int port = Integer.parseInt(portNumber);
        if (connector == null) {
            connector = createConnector(port);
        }
        server.addConnector(connector);

        for (Webapp webapp : webapps) {
            File sourceDirFile = new File(webapp.getWebappSourceDirectory());
            WebAppContext wac = new WebAppContext(sourceDirFile.getCanonicalPath(), webapp.getContextPath());
            WebAppClassLoader loader = new WebAppClassLoader(wac);
            if (webapp.getLibDirectory() != null) {
                Resource r = Resource.newResource(webapp.getLibDirectory());
                loader.addJars(r);
            }
            if (webapp.getClasspathEntries() != null) {
                for (String dir : webapp.getClasspathEntries()) {
                    loader.addClassPath(dir);
                }
            }
            wac.setClassLoader(loader);
            server.addHandler(wac);
        }
        server.start();

关于java - 嵌入式 jetty ServletTester 提供单个静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1742330/

相关文章:

java - 字符串数组大小和 for 循环访问元素

java - java中如何查找数组的子数组

unit-testing - 如何模拟已声明的私有(private)字段?

java - 需要模拟 JoinPoint 进行 JUnit 测试

java - ExpandableListView 中的编辑文本

Java: sin/cos/tan/ln/other precision (for double)?

java - 从 spock 模拟执行回调

unit-testing - 应该如何组织 Rust 单元测试?

java - 让 Ant 多说一些失败的 JUnit 测试

java - 是否可以在 Intellij IDEA 中创建顶级测试运行配置,以便我的所有 JUnit 测试都可以使用它运行?