Obter informações do web.xml

10 respostas
R

Olá,

Eu quero colocar uma tag dentro do web.xml, por exemplo:

<nomedodatasource>bancoWeb</nomedodatasource>

tem alguma de colocar isso e depois recuperar o valor em um classe?!

10 Respostas

M

Tu pode usar como um init-param para um servlet em especifico ou um context-param para a aplicação toda.

R

ah! blz!

mas como faço pra obter esse valor em uma classe comum.
não é um servlet, é uma classe DAO, por exemplo. :???:

valeu!

S

Nesse caso, acho que você podia fazer um ServletContextListener, que vai chamar o método contextInitialized, quando a aplicação começar.

Daí você pega o valor do context-param do web.xml, e cria a conexão com o banco, e fecha a conexão no método contextDestroyed.

R

eh… valeu pela ajuda.

Bem, vou tentar explicar porque eu quero recuperar informações do web.xml.

Trabalho com o JDeveloper 10, montei um arquivo properties com alguns parametros de controle do sistema, por exemplo: conexão com o banco de dados.

Coloquei o arquivo em:

Quando vou rodar a aplicação não encontra o arquivo de jeito nenhum!
Ao colocar um caminho absoluto - D:\proj\conf.properties - daí sim tudo funciona, ou seja, inútil e quando eu gerar o WAR?!

será que agora eu consigo resolver isso hehehe!
valeuzão!

A

Cara,
É assim:

ServletContextEvent  event
event.getServletContext&#40;&#41;.getInitParameter&#40;"PARAMETRO WEB&gt;XML"&#41;;
R

Anderson, eu não estou trabalhando com servlets, veja:
Essa é a classe que carrega o properties.

package br.senac.sp.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.PropertyResourceBundle;
public class Parametros 
&#123;
  private static Properties propriedade;
  private static File arquivo;
  private static String path = "/WEB-INF/classes/datasource.properties";

  /*
   * carrega o arquivo de propriedades
   * */
  static&#123;

    try  &#123;
      arquivo = new File&#40; path &#41;;  
      propriedade = new Properties&#40;&#41;;
      propriedade.load&#40; new FileInputStream&#40;arquivo&#41; &#41;;

    &#125;catch&#40;IOException ei&#41;&#123;
      System.out.println&#40; "Erro&#58; " + ei.getMessage&#40;&#41; &#41;;
    &#125;catch&#40;Exception ex&#41;  &#123;
      System.out.println&#40; "Erro&#58; " + ex.getMessage&#40;&#41; &#41;;
    &#125;
  &#125;
  
  /**
   * 
   * @param parametro
   * @return valor
   */
  public static String getValor&#40;String parametro&#41;&#123;
    String retorno = null;
    try&#123;
      retorno = propriedade.getProperty&#40;parametro&#41;;
    &#125;catch &#40;Exception ex&#41;&#123;
      System.out.println&#40; "Erro&#58; " + ex.getMessage&#40;&#41; &#41;;
      System.out.println&#40;"\nprintStackTrace&#58; "&#41;;
      ex.printStackTrace&#40;&#41;;
    &#125;
    return retorno;
  &#125;//

&#125;

esse é um exemplo de como eu a utilizaria:

Transacao transacao   = new Transacao&#40;Parametros.getValor&#40;"dsname"&#41;&#41;;

entendeu?!

A

Então seu proplema é que vc nao ta conseguindo ler o arquivo .propries de dentro da sua aplicação???
Tenta colocar ele no mesmo nivel da classe DAO!

R

Após algumas pesquisas em forúns e ajuda da minha equipe, consegui chegar a isso:

public class Parametros extends java.util.Properties &#123;

   /**

    * Construtor

    * @param String - path e nome do arquivo de propriedades

    */

   public Parametros&#40;String arquivo&#41; &#123;

      super&#40;&#41;;

      try&#123;
         this.load&#40;getClass&#40;&#41;.getClassLoader&#40;&#41;.getResourceAsStream&#40;arquivo&#41;&#41;;

      &#125;catch&#40;Exception e&#41;&#123;&#125;

   &#125;

&#125;

Funciona perfeitamente, basta o arquivo estar em WEB-INF/classes/ que será localizado.

Mas vejam se o meu raciocinio está errado.
Tenho 5 páginas jsp que fazem conexão com o banco, logo utilizarão o Dao que por sua vez a classe de Property, sendo assim, o arquivo será carregado 5 vezes.

Eu tentei montar essa funcionalidade dentro de um bloco static, para que seja carregado na jvm uma única vez, mas não consegui… :???: pois this.getClass não é estático.

capiche? alguma idéia?! ops! devo abrir um novo tópico? 8O

valeuzão!

M

Tu pode user um singleton.

R

Show!!
Poxa não conhecia esse Pattern, muito obrigado a todos, essa é a classe final:

package br.senac.sp.util;
import java.util.Properties;

public class PropertyServer extends Properties  &#123;
  private static String arquivo = "datasource.properties";
  private static PropertyServer instancia;
  
  private PropertyServer&#40;&#41;&#123;
    try&#123;
       instancia.load&#40; getClass&#40;&#41;.getClassLoader&#40;&#41;.getResourceAsStream&#40;arquivo&#41; &#41;;
    &#125;catch&#40;Exception e&#41;&#123;
      System.out.println&#40;""&#41;;
    &#125;
  &#125;
  
  public static PropertyServer getInstance&#40;&#41;&#123;
    if&#40; instancia == null &#41;
      instancia = new PropertyServer&#40;&#41;;

    return instancia;
  &#125;
&#125;
Criado 11 de agosto de 2005
Ultima resposta 17 de ago. de 2005
Respostas 10
Participantes 4