В настоящее время я использую 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" отображается, но есть ли лучший способ получить одно свойство в сервлете, не глядя на вещи таким образом?
Просто загрузите файл свойств в 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>
Hashtable
. Да, основная концепция такая же.