Запуск CGI на пристани - PullRequest
       3

Запуск CGI на пристани

2 голосов
/ 07 января 2012

Я запускаю Jetty изнутри самой программы Java. Я просто пытаюсь заставить его указывать на папку cgi, которую я поместил под каталогом пакета (/ src / package / cgi-bin)

Проблема в том, что каждый раз, когда я запускаю сервер, он жалуется, что "нет CGI bin!". Где находится правильное место для размещения вашего cgi-bin и указания на него? Вот что у меня есть:

public static void main(String[] args) throws Exception {
    // The core Jetty server running on 8080
    Server server = new org.eclipse.jetty.server.Server(8080);

    // Setup CGI routing
    ServletContextHandler context2 = new ServletContextHandler(ServletContextHandler.SESSIONS);
    context2.setContextPath("/");
    context2.setInitParameter("commandPrefix", "perl");

    // Where does this point to? 
    context2.setInitParameter("cgibinResourceBase", "cgi-bin");
    server.setHandler(context2);

    // Add the CGI Servlet
    context2.addServlet(new ServletHolder(new Cgi()), "/cgi");

    server.start();
    server.join();
}

См. Jetty setInitParameter НЕ инициализирует какой-либо параметр для ответа на этот вопрос.

Ответы [ 3 ]

1 голос
/ 14 марта 2012

Через Jetty setInitParameter НЕ инициализирует какой-либо параметр

Проблема в том, что я устанавливал параметр в контексте , когда я должен был установить его в ServletHolder

1 голос
/ 07 января 2012

В при просмотре кода выясняется, что ваш setInitParameter не был установлен соответствующим образом. Вы, кажется, делаете правильно, хотя мы используем XML для настройки Jetty, и я не знаком с этим в коде.

Вы пытались добавить сервлет до установки обработчика? Возможно ли, что он называется init в неподходящее время?

String tmp = getInitParameter("cgibinResourceBase");
if (tmp == null) {
    tmp = getInitParameter("resourceBase");
    if (tmp == null)
        tmp = getServletContext().getRealPath("/");
}

if (tmp == null) {
    Log.warn("CGI: no CGI bin !");
    throw new ServletException();
}

Никакой помощи, но я оставлю этот ответ до тех пор, пока кто-нибудь не отправит лучший ответ.

0 голосов
/ 27 января 2012

Похоже, что вы не указываете правильное местоположение для cgi-bin.

// Where does this point to? 
context2.setInitParameter("cgibinResourceBase", "cgi-bin");

. Правильный путь должен быть относительно вашего каталога WEB-INF или как отказоустойчивый,абсолютный путь к вашему file-system.

В этом случае вы должны использовать /src/package/cgi-bin, предполагая, что src является корнем вашего file-system.Если это не так, вы можете использовать что-то вроде следующего:

// The second argument is the absolute path to your cgi-bin
context2.setInitParameter("cgibinResourceBase", "/usr/local/some-more-path/src/package/cgi-bin");
...