代码之家  ›  专栏  ›  技术社区  ›  cringe

提供单个静态文件的嵌入式Jetty servletter

  •  2
  • cringe  · 技术社区  · 15 年前

    我是用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");
    

    码头可以吗?

    2 回复  |  直到 12 年前
        1
  •  3
  •   bmargulies    15 年前

    我认为你不能用servletster来做这个。servletter为servlet创建单个上下文。您需要使用至少两个上下文来设置嵌入式Jetty:一个用于servlet,一个用于静态内容。

    如果有一个完整的webappcontext,你会被设置,但没有。

    您可以复制servletter并添加头发,也可以直接阅读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();
    
        2
  •  0
  •   ironchefpython    12 年前

    将资源库设置为包含静态内容的目录,并添加jetty“default servlet”以提供该内容。我已经在下面的示例中添加了适当的代码。

    tester = new ServletTester();
    tester.setContextPath("/context");
    tester.setResourceBase("/path/to/your/content");
    tester.addServlet(MyServlet.class, "/servlet/*");
    tester.addServlet(org.eclipse.jetty.servlet.DefaultServlet.class, "/*");
    tester.start();