2013-02-14 2 views
2

У меня есть Java Servlet со следующими @WebServlet аннотацию:Как переопределить @WebInitParam сервлета без перекомпиляции?

@WebServlet(urlPatterns={"/GetInfo"}, 
      initParams={ 
       @WebInitParam(name="directory.path", value="/appli/PdlInfo")}) 

Как я могу изменить значение @WebInitParam без перекомпиляции сервлета?

+0

Вы хотите, чтобы взглянуть на раздел инициализации-парам вашего веб .xml – YMomb

ответ

0

Возможно ли переопределить переменную "directory.path" без перекомпиляции класса. Добавьте файл web.xml в папку WEB-INF, которая определяет новый параметр init.

Измените servlet-class на фактический класс сервлета, который вы используете.

Необходимо перезапустить контейнер, чтобы принять во внимание изменения, но перекомпиляция/перестройка не требуется.

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" 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"> 
    <servlet> 
     <servlet-name>MyServletLinkName</servlet-name> 
     <servlet-class>your.path.to.servlet.YourServlet</servlet-class> 
     <init-param> 
      <param-name>directory.path</param-name> 
      <param-value>/new/path</param-value> 
     </init-param> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>MyServletLinkName</servlet-name> 
     <url-pattern>/GetInfo</url-pattern> 
    </servlet-mapping> 
</web-app> 

EDIT:

Если вы хотите использовать динамический параметр, который изменяется в то время как работает приложение, вы можете использовать файл свойств, что он смотрел на волоске и осмотрены в интервале X секунд.

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

3

В Servlet 3.0 аннотации предоставляют только значение по умолчанию. Используя просто файл web.xml (или инструменты, доступные в контейнере во время развертывания), вы можете его изменить. В любом случае вы должны дать сервлет значимое имя:

@WebServlet(
      name="GetInfo" 
      urlPatterns={"/GetInfo"}, 
      initParams={@WebInitParam(name="directory.path",value="/appli/PdlInfo")} 
    ) 

Для web.xml Вот отрывок:

<servlet> 
    <servlet-name>GetInfo</servlet-name> 
    <init-param> 
     <param-name>directory.path</param-name> 
     <param-value>/other/path</param-value> 
    </init-param> 
    </servlet> 
Смежные вопросы