Получение параметров init в сервлете
Я новичок в сервлетах. Я получил init
параметры в ДД в пределах init()
метод с использованием getInitParameter
("название"). Я много пробовал изнутри doGet()
метод доступа к init
параметры, но всегда возвращает null
,
Я пробовал с
getServletContext().getInitParametr("name")
и с
getServletConfig().getInitParametr("name")
но они все возвращаются null
, Могу ли я получить параметры инициализации в doGet()
?
2 ответа
Ответ - да, вы можете.
Хорошо, кроме комментария Дж. Б. Низета, здесь есть несколько предложений.
1) Добавили ли вы параметры инициализации во время работы веб-контейнера / сервера приложений?
Цитата из " Head First Servlets & JSP: Сдача экзамена на сертифицированного разработчика веб-компонентов Sun ":
Параметры инициации сервлета доступны только для чтения ОДИН РАЗ - когда Контейнер инициализирует сервлет....
Когда Контейнер создает сервлет, он читает DD и создает пары имя / значение для ServletConfig. Контейнер никогда не читает параметры init снова! Когда параметры находятся в ServletConfig, они больше не будут считываться до тех пор, пока вы не повторно развернете сервлет.
2) Доступны два типа параметров инициализации. Еще одна цитата из " Head First Servlets and JSP " (выделено мной):
Существуют параметры инициализации контекста (определенные в
<context-param>
элемент) и параметры инициализации сервлета (определены в<init-param>
элемент). Оба они называются параметрами init, хотя и определены в разных элементах.
Параметры инициализации контекста доступны любому сервлету или JSP, которые являются частью текущего веб-приложения.
Параметры инициализации сервлета доступны только сервлету, для которого
<init-param>
был настроен.Параметры инициализации контекста определены в
<web-app>
элемент.Параметры инициации сервлета определены в
<servlet>
элемент для каждого конкретного сервлета.
Пример:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Servlet testing app</display-name>
<!-- This is a context init parameter -->
<context-param>
<param-name>email</param-name>
<param-value>admin@example.com</param-value>
</context-param>
<servlet>
<servlet-name>Info Servlet</servlet-name>
<servlet-class>com.example.InfoServlet</servlet-class>
<!-- This is a servlet init parameter -->
<init-param>
<param-name>name</param-name>
<param-value>John Doe</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Info Servlet</servlet-name>
<url-pattern>/test/ShowInfo.do</url-pattern>
</servlet-mapping>
</web-app>
- Доступ к параметру init контекста в сервлете:
getServletContext().getInitParameter(“email”);
- Доступ к параметру init сервлета в сервлете, для которого он был определен в дескрипторе развертывания:
getServletConfig().getInitParameter("name");
Альтернативный способ получения параметра инициализации сервлета - использование метода, определенного в абстрактном классе GenericServlet: public String getInitParameter(String name);
Этот метод предоставляется для удобства. Он получает значение именованного параметра из объекта ServletConfig сервлета.
И есть также Enumeration<String> getInitParameterNames()
метод для ServletContext и ServletConfig, чтобы получить все параметры инициализации.
Если вы переопределили метод init() по умолчанию, убедитесь, что вы передали ему параметр конфигурации Servlet, а также вызвали метод super init. потому что, если вы этого не сделаете, ваш код не сможет найти конфигурацию вашего сервлета.
Вот код для кода сервлета init():
public void init(ServletConfig config) throws ServletException {
super.init(config);
// Rest of your code ...
}
Также я заметил, что вы использовали Servlet версии 3, я не уверен, поддерживает ли он определение тегов сервлета, поэтому, если вышеупомянутое решение не работает, попробуйте также удалить атрибуты веб-приложения.