2009-11-16 62 views
2

我使用jetty进行单元测试,我不仅要服务于我的受测试servlet,而且还要为静态页面提供服务。静态页面是我的应用程序需要的。我初始化码头这样嵌入式jetty ServletTester服务单个静态文件

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

我现在需要的,是一样的东西

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

这是可能的码头?

回答

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(); 
+0

感谢您的回复。我认为ServletTester不会给我多少选择。我不知道是否要为我的单元测试设置一个完整的码头服务器,但我会看看它。 – cringe

0

将资源基地到包含静态内容的目录,并添加码头“默认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();