Я новичок в java, так что извините за неубедительные вопросы :)
Я пытаюсь создать веб-службу в Java NetBeans 6.1, но у меня проблемы с параметрами конфигурации (например, .settings в .net).
Как правильно сохранять и получать доступ к таким настройкам в веб-службе Java.
Есть ли способ прочитать параметры контекста из web.xml в веб-методе?
Если нет, то каковы альтернативы для хранения ваших переменных конфигурации, таких как имена путей?
Спасибо




Если вы используете сервлеты, вы можете настроить параметры в web.xml:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
Эти свойства будут переданы в объекте ServletConfig методу init вашего сервлета.
Другой способ - прочитать переменные среды вашей системы с помощью
System.getProperty(String name);
Но это не рекомендуется для других, кроме небольших программ и тестов.
Существует также API свойств, если вы хотите использовать файлы «.properties». http://java.sun.com/javase/6/docs/api/java/util/Properties.html
Наконец, я считаю, что поиск конфигураций с помощью JNDI довольно распространен при разработке современных приложений веб-сервисов, Netbeans и контейнеры приложений имеют для этого неплохую поддержку. Поищи в Гугле.
контекст-параметр! = параметр-инициализации (factorypattern.com/…)
Is there a way to read context parameters from web.xml in a web method?
Нет, это не так просто сделать из коробки. Система веб-сервисов (JAX-WS) имеет минимальную осведомленность о движке сервлетов (Tomcat). Они предназначены для изоляции.
Если вы хотите использовать параметры контекста, ваш класс веб-службы должен будет реализовать ServletContextListener и получить желаемые параметры в параметре инициализации (или сохранить контекст для дальнейшего использования). Поскольку механизм сервлетов и JAX-WS будут иметь разные экземпляры объекта, вам нужно будет сохранить значения в статическом члене.
Как упоминал Ларс, вам лучше всего подойдет Properties API или JNDI, поскольку они включены в Java и являются довольно хорошо известными способами получения параметров. Используйте Classloader.getResource () для получения свойств в веб-контексте.
MessageContext ctx = MessageContext.getCurrentThreadsContext();
Servlet wsServlet = (Servlet) ctx.getProperty(HTTPConstants.MC_HTTP_SERVLET);
ServletConfig wsServletConfig = wsServlet.getServletConfig();
ServletContext wsContext = wsServletConfig.getServletContext();
Я думаю, что правильный ответ ... как всегда ... "Это зависит от обстоятельств". Если вы просто запускаете небольшую реализацию с одним сервером, то это во многом зависит от технологии WS, которую вы хотите использовать. Некоторые упрощают доступ к контексту сервлета и контекстным параметрам, другие - нет, и в этом случае доступ к свойствам из файла свойств может быть проще. Собираетесь ли вы иметь массив серверов в среде с балансировкой нагрузки с высоким трафиком, где обновление настроек для всех серверов должно быть мгновенным и централизованным в случае переключения при отказе? Если это так, то действительно ли вы хотите обновить файлы конфигурации для всех серверов в ферме? Как вы синхронизируете эти изменения со всеми этими серверами? Для тебя это важно? Если вы сохраняете имена путей в файле конфигурации, то вы, вероятно, намереваетесь обновить имена путей к другому хосту в случае отказа определенного хоста ("\ file_server_host \ doc_store" -> "\ backup_file_server_host \ doc_store" ), и в этом случае лучше переключиться на DNS. Слишком много переменных. Это действительно зависит от дизайна; потребности; масштаб приложения.
Для простоты, если вам нужен простой эквивалент файла .settings, тогда вам понадобится файл .properties. Вот пример, где я недавно использовал это в проекте: https://github.com/sylnsr/docx4j-ws/blob/master/src/docx4j/TextSubstitution.java
Пожалуйста, прочтите вопрос внимательнее. Вы должны дать конкретный ответ на конкретный вопрос: «Доступ к параметрам контекста web.xml из метода веб-службы?». Тем не менее вы даете несколько полезных альтернатив.