Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Вопрос о getServletConfig()


Автор: Looser 30.1.2006, 21:46
Добрый день.
Я только начал изучать j2ee
Ситуация такая:
Мне нужно вывести на страницу информацию о сервере.
я делаю так:
out.println(getServletConfig().getServletContext().getServerInfo());
я понимаю, что это можно сделать по-другому, но всё же...
getServletConfig() возвращает null, и, ессно, выбрасывается NullPointerException....
Как же получить доступ к контексту?

Спасибо за ответ

Автор: kkorsakoff 31.1.2006, 02:29
Как вы вызываете ваш сервлет? Приведите урл пожалуйста. Если мне не изменяет память, то вызов в invoker-style не дает доступа к ServletConfig, т.к. его конфига фактически не существует. Вызов в Invoker-style - это

http://www.myserver.com/servlet/...

Необходимо прописать в web.xml мэппинги (урл-отображения) для вашего сервлета. Приведите содержимое web.xml тоже.

Автор: Looser 31.1.2006, 08:58
фрагмент web.xml:
Код
<servlet>
        <display-name>FirstServlet</display-name>
        <servlet-name>FirstServlet</servlet-name>
        <servlet-class>mypackage.FirstServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>FirstServlet</servlet-name>
        <url-pattern>/FirstServlet</url-pattern>
    </servlet-mapping>

Вызываю через форму
Код
<form action = "FirstServlet" method = "post">...

Автор: kkorsakoff 1.2.2006, 01:15
Не могу угадать поведение томкэта при одинаковом имени сервлета и его маппинга, попробуй хотя бы так:
Код

    <servlet>
        <display-name>someservlet</display-name>
        <servlet-name>someservlet</servlet-name>
        <servlet-class>mypackage.FirstServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>someservlet</servlet-name>
        <url-pattern>/FirstServlet</url-pattern>
    </servlet-mapping>


<form> оставь ту же.

По-крайней мере у меня больше вариантов нет, почему конфиг может == null.

Автор: onsh76 1.2.2006, 10:23
Цитата(Looser @ 30.1.2006, 21:46)
...
out.println(getServletConfig().getServletContext().getServerInfo());
я понимаю, что это можно сделать по-другому, но всё же...

Как же получить доступ к контексту?

По замыслу тех кто проектировал сервлеты, каждый сервлет - потомок класса GenericServlet (будь то HttpServet или еще какая-нить имплементация, ну скажем сервлет имплементирующий WAP протокол) - имеет доступ к обьектам:
- servletContext (defined and implementation is provided by GenericServlet class) ;
- servletConfig ( definition is provided by Servlet interface, implementaion is provided by GenericServlet class).

Отвечаю на вопрос как получить доступ к контексту:

Ниже два варианта как распечатать то, что Вам нужно:

Код

1. out.println(getServletContext().getServerInfo());

2. out.println(getServletConfig().getServletContext().getServerInfo());


Второй вариант как видите - это Ваш рабочий код, который прекрасно работает.
Но он несколько длиннее первого.

Автор: Looser 1.2.2006, 10:41
2 kkorsakoff: исправил, как вы говорили, но по-прежнему getServletConfig() возвращает null.

2onsh76: Почему то мой "рабочий" код не "прекрасно" работает, а выбрасывает NullPointerException в строке out.println(getServletConfig().getServletContext().getServerInfo());
Вывел отдельно: out.println(getServletConfig()); - напечатал null... smile

Автор: onsh76 1.2.2006, 12:09
Цитата(Looser @ 1.2.2006, 10:41)
2onsh76: Почему то мой "рабочий" код не "прекрасно" работает, а выбрасывает NullPointerException в строке out.println(getServletConfig().getServletContext().getServerInfo());
Вывел отдельно: out.println(getServletConfig()); - напечатал null... smile

Какой сервак?

Приведи код сервлета и web.xml. Плюс чего набираем в браузере. А то так долго гадать будем на кофейной гуще. smile

Если вызывать сервлетконфиг в конструкторе твоего сервлета - то это рановато. ServletConfig доступен только после того как контейнер сделает вызов метода init() (или init(ServletConfig), более ранняя версия сервлет спекс.).

Автор: Looser 1.2.2006, 13:37
Всё, понял...

Проблема была в том, что eclipse создал метод init(ServletConfig config), а не init()...
В этом случае config был равен null..

исправил на init() и всё норм...
Всем спасибо...

Автор: onsh76 1.2.2006, 19:47
Цитата(Looser @ 1.2.2006, 13:37)
Всё, понял...

Проблема была в том, что eclipse создал метод init(ServletConfig config), а не init()...
В этом случае config был равен null..

Бывает smile

Рад был помочь...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)