Чтение файла свойств в веб-приложении Java

1

В настоящее время я использую ServletContextListener для установки путей JSP в веб-приложении. Пути сохраняются как параметры контекста в web.xml и извлекаются слушателем:

    @Override
    public void contextInitialized(ServletContextEvent sce) {        
        ServletContext sc = sce.getServletContext();                           
        sc.setAttribute("urlOfThisPage", sc.getInitParameter("urlOfThisPage"));   
        sc.setAttribute("urlOfThatPage", sc.getInitParameter("urlOfThatPage"));    

В сервлете приложения путь к определенному JSP может быть легко извлечен из ServletContext.

Мой вопрос относится к обработке файла свойств таким же образом. Я много читал об этом на других страницах StackOverflow, таких как 2161045.

Правильно ли я предполагаю, что файл свойств должен быть прочитан слушателем и сохранен в ServletContext с использованием объекта Property? но тогда, если это так, как мне получить определенное свойство из файла свойств?

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

String url = (String) sc.getAttribute("urlOfThisPage");  // Use ServletContext to get JSP URL.    

Но я не уверен, как это расширить для доступа к файлу свойств.

Я пробовал следующее в ServletContextListener:

    Properties properties = new Properties();
    properties.setProperty("name", "Akechi Jinsai");
    sc.setAttribute("properties", properties);

И в сервлете, используя код:

   ServletContext sc = request.getSession().getServletContext();        
   Properties properties = (Properties) sc.getAttribute("properties");
   System.out.println("Here: " + properties.getProperty("name"));

"Здесь: Akechi Jinsai" отображается, но есть ли лучший способ получить одно свойство в сервлете, не глядя на вещи таким образом?

  • 0
    «Правильно ли я полагаю, что файл свойств должен быть прочитан слушателем» - нет.
  • 0
    Тогда где в веб-приложении будет лучшее место для чтения файла свойств и его хранения?
Показать ещё 4 комментария
Теги:
servlets
properties-file
servletcontextlistener

1 ответ

2
Лучший ответ

Просто загрузите файл свойств в Servlet и переместите значения в HashMap и сохраните его как атрибут приложения. Теперь получите доступ к нему в JSP с использованием стандартной библиотеки тегов JavaServer Pages.

Подробнее о загружаемом файле свойств в Servlet/JSP.


Образец кода:

JSP: (Различные способы доступа к карте)

<c:forEach items="${map}" var="entry">
    Key="${entry.key}" Value=${entry.value}
</c:forEach>

URL Of This Page = ${map.urlOfThisPage }
URL Of That Page = ${map.urlOfThatPage }


URL Of This Page = ${map['urlOfThisPage'] }
URL Of That Page = ${map['urlOfThatPage'] }

контекста сервлета

public class MyServletContextListener implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent sc) {

    }

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext sc = sce.getServletContext();
        // load the properties file if needed
        // read the path from web.xml as init parameter 

        Map<String, String> map = new HashMap<String, String>();
        map.put("urlOfThisPage", sc.getInitParameter("urlOfThisPage"));
        map.put("urlOfThatPage", sc.getInitParameter("urlOfThatPage"));

        sc.setAttribute("map", map);
    }

}

web.xml:

<context-param>
    <param-name>urlOfThisPage</param-name>
    <param-value>url</param-value>
</context-param>
<context-param>
    <param-name>urlOfThatPage</param-name>
    <param-value>url</param-value>
</context-param>

<listener>
    <listener-class>com.x.y.z.MyServletContextListener</listener-class>
</listener>
  • 0
    Я бы использовал объект свойств вместо карты, но основной принцип тот же.
  • 0
    Свойства расширяет Hashtable . Да, основная концепция такая же.
Показать ещё 13 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню