Подтвердить что ты не робот

Как я могу прочитать значения параметра context/web.xml в несерверном java файле?

У меня есть обычный Java файл, который я использую для обновления и запроса базы данных mysql, но мне нужно взять настраиваемые параметры в этом файле (например, имя хоста, пароль и т.д.) и поместить его в файл web.xml( или, возможно, другой файл, если этот параметр, но в идеале в web.xml).

Но я не знаю, как получить доступ к значениям web.xml из обычного несерверного Java файла.

Или мне нужно будет прочитать xml (как и любой другой XML файл... или есть ярлык для этого...)

4b9b3361

Ответ 1

Вам нужно поместить необходимые параметры в записи env-entry вашего файла web.xml:

<env-entry> 
    <env-entry-name>dbhost</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>localhost</env-entry-value> 
</env-entry>

а затем получить доступ к ним через контекст jndi

import javax.naming.Context;
import javax.naming.InitialContext;
...
// Get the base naming context
Context env = (Context)new InitialContext().lookup("java:comp/env");

// Get a single value
String dbhost = (String)env.lookup("dbhost");

Ответ 2

Вы можете использовать контекстные параметры в вашем web.xml и javax.servlet.ServletContextListener для заполнения некоторых статических полей.

В вашем нормальном классе java вы читаете это статические поля.

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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_2_5.xsd">
...
<context-param>
    <description>Prameter</description>
    <param-name>myParam</param-name>
    <param-value>123456790</param-value>
</context-param>
...
</web-app>

Вы можете получить доступ к этому параметру контекста с помощью ServletContext.getInitParameter

Ответ 3

Один из способов - прочитать xml файл и проанализировать его.

Вы можете поместить его на некоторую статическую карту после разбора в ServletContextListener

Ответ 4

Внедрить ServletContextListener:

package util;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyConfigListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext ctx = sce.getServletContext();

        String hostname = ctx.getInitParameter("my.config.hostname");

        // now go and do something with that
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {}

}

И не забудьте зарегистрировать его в web.xml:

<context-param>
  <param-value>somewhere.example.org</param-value>
  <param-name>my.config.hostname</param-name>
</context-param>
<listener>
  <listener-class>util.MyConfigListener</listener-class>
</listener>

Ответ 5

Создайте статический класс, который будет инициализирован из одного из сервлетов init.