Встроенный причал ServletTester, обслуживающий один статический файл - PullRequest
2 голосов
/ 16 ноября 2009

Я занимаюсь модульным тестированием на пристани и хочу показать не только тестируемый мой сервлет, но и статическую страницу. Статическая страница нужна моему приложению. Я инициализирую причал, как это

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

Что мне нужно сейчас, это что-то вроде

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

Возможно ли это с причала?

Ответы [ 2 ]

3 голосов
/ 17 ноября 2009

Я не думаю, что вы можете сделать это с ServletTester. ServletTester создает единый контекст для сервлета. Вам необходимо настроить встроенный причал как минимум с двумя контекстами: один для сервлета и один для статического содержимого.

Если бы был полный 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 голосов
/ 20 февраля 2013

Установите в качестве базы ресурсов каталог, содержащий ваше статическое содержимое, и добавьте причал «сервлет по умолчанию» для обслуживания этого содержимого. Я добавил соответствующий код в ваш пример ниже.

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();
...