Jetty setInitParameter НЕ инициализирует какой-либо параметр - PullRequest
6 голосов
/ 09 февраля 2012

Я встроил Jetty и пытаюсь установить параметр инициализации.

Основной класс Main создает сервлет из Cgi , который расширяет CGI .

В Main , у меня есть следующий код:

ServletContextHandler context2 = new ServletContextHandler(ServletContextHandler.SESSIONS);
context2.setContextPath("/cgi");
context2.setResourceBase("./cgi-bin");
context2.setInitParameter("commandPrefix", "perl");
context2.addServlet(new ServletHolder(new Cgi()), "/");
server.setHandler(context2);

В Cgi , я проверяю, чтобы увидеть параметр:

public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println(servletConfig.getInitParameter("commandPrefix"));
        super.init(servletConfig);
}

Каждый раз выводится ноль для вызова getInitParameter .Затем, когда Cgi действительно НУЖЕН использовать это, это не так, потому что он не установлен.Почему это может происходить?

Ответы [ 2 ]

10 голосов
/ 10 февраля 2012

Вы устанавливаете InitParameter на ServletContextHandler, но вы должны установить его на ServletHolder.

(это несколько сбивает с толку, я знаю)

2 голосов
/ 10 февраля 2012

Вы установили параметр init контекста, а не параметр init сервлета. Поэтому вам нужно получить его как параметр инициализации контекста, а не как параметр инициации сервлета.

System.out.println(servletConfig.getServletContext().getInitParameter("commandPrefix"));

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

...