我是用jetty进行单元测试的,我不仅要服务于测试中的servlet,还要服务于静态页面。我的应用程序需要静态页面。我正在像这样初始化码头
tester = new ServletTester();
tester.setContextPath("/context");
tester.addServlet(MyServlet.class, "/servlet/*");
tester.start();
我现在需要的是像
tester.addStaticPage("local/path/in/my/workspace", "/as/remote/file");
码头有可能吗?
答案 0 :(得分:3)
我认为你不能用ServletTester做到这一点。 ServletTester为servlet创建单个Context。您需要设置至少包含两个上下文的嵌入式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();
答案 1 :(得分:0)
将资源库设置为包含静态内容的目录,并添加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();