sexta-feira, 22 de março de 2019

Pegando o RealPath em uma aplicação JEE


As vezes precisamos do RealPath da nossa aplicação para lermos e/ou escrevermos arquivos através do Java, e em aplicações JavaEE uma boa forma de fazermos isso é através de um ServletContextListener, uma vez que este listener escuta quando sua aplicação inicializa ou finaliza no container web ou servidor de aplicação.

Usando o ServletContextListener ao invés do FacesContext para pegar o RealPath não ficamos presos ao JSF por exemplo, ou outra tecnologia, e podemos usar o RealPath em processos e situações diversas.

Geralmente tenho uma classe em um pacore br.com.meudominio.utils chamada Constants onde guardo algumas constantes e variáveis estáticas com algumas configurações do sistema (embora prefira usar um cadastro de Parâmetros Gerais do Sistema para a maioria das configurações), e ao pegar o RealPath é nessa classe que seto essa configuração. Veja o código do listener abaixo:

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebFilter;

import br.com.meudominio.Constants;

@WebListener
public class RealPath implements ServletContextListener{

    @Override
    public void contextDestroyed( ServletContextEvent sce ) {
        Constants.REAL_PATH = sce.getServletContext().getRealPath( "/" );
       
    }

    @Override
    public void contextInitialized( ServletContextEvent sce ) {
        // TODO Auto-generated method stub
       
    }

}

Na classe Constants tenho algo como:

public final class Constants
{
      ...

public static String REAL_PATH = "";

     ...
}

Pronto, em qualquer lugar do sistema basta usar Constants.REAL_PATH para pegar o RealPath da minha aplicação.

Nenhum comentário:

Postar um comentário