Pegar diretorio da aplicação web no tomcat [RESOLVIDO]

16 respostas
mauricioadl

Pessoal, tem algum macete pra pegar o diretorio da aplicação no tomcat?
se eu usar File(“teste.txt”) ele aponta para o diretorio lib do tomcat, bem doido!

[]'s

16 Respostas

alias

hm…chutando aqui ao que me lembro, tente fazer isso em uma classe Servlet

String path = this.getServletContext().getRealPath("");
mauricioadl

alias:
hm…chutando aqui ao que me lembro, tente fazer isso em uma classe Servlet

String path = this.getServletContext().getRealPath("");

essa instrução que vc passou funciona somente se estiver dentro de uma servlet ou jsp. mas preciso pegar de uma classe que nao possui uma referencia ao objeto ServletContext.

[]'s

alias

mauricioadl:
alias:
hm…chutando aqui ao que me lembro, tente fazer isso em uma classe Servlet

String path = this.getServletContext().getRealPath("");

essa instrução que vc passou funciona somente se estiver dentro de uma servlet ou jsp. mas preciso pegar de uma classe que nao possui uma referencia ao objeto ServletContext.

[]'s

De fato, é preciso a referencia ao ServletContext, me desculpe se minha dica foi deveras simplista. Mas então gambiarras alternativas provavelmente serão necessárias no seu caso :lol: … qual é o cenario aí, frameworks e tal?

mauricioadl

o cenario eh bastante simples, preciso carregar um arquivo que tenha informações da conexao com o banco de dados. a classe que faz isso eh a fabrica de conexoes.

mauricioadl

De fato, é preciso a referencia ao ServletContext, me desculpe se minha dica foi deveras simplista. Mas então gambiarras alternativas provavelmente serão necessárias no seu caso :lol: … qual é o cenario aí, frameworks e tal?

nao diria q sua informação eh simplista não, pelo contrario, ela eh muito util, nao no meu caso, mas pra quem acessar o topico futuramente.

rmendes08

Você não pode colocar o .jar da fábrica de conexões no WEB-INF/lib e o arquivo de configuração lá dentro também ?

alias

Nesse caso é mais tranquilo, onde está esse arquivo? Dentro de WEB-INF/classes? Se sim, você consegue acessar esse arquivo com suaclasse.getResource() ou getResourceAsStream(), e a partir daí criar um File.

mauricioadl

Você não pode colocar o .jar da fábrica de conexões no WEB-INF/lib e o arquivo de configuração lá dentro também ?

o pior q nao, tem um padrao para arquivos de configuração aqui e nao pode ser mudado. se mudar a cor do capim muito cabrito vai passar fome! se eh q vc me entende!!!

mauricioadl

acho q vou fazer isso mesmo, pegar o local da classe e sair quebrando para tras ate chegar no diretorio da app, gambiarra detected! hehehe

alias

Esse arquivo está na raiz da aplicação, entao?

mauricioadl

isso mesmo!

alias

isso mesmo!

Um arquivo com configurações de acesso a base de dados, na raiz da app web?

Digite a URL para esse arquivo no seu browser…

mauricioadl

isso mesmo!

Um arquivo com configurações de acesso a base de dados, na raiz da app web?

Digite a URL para esse arquivo no seu browser…

nao acontece oq vc esta pensando nao hehehe. aconteceria se estivesse dentro da pasta WebContent, ae seria bem engraçado !

meu caso eh assim:

minha_app
-meu_arquivo.txt
-WebContent
---------------WEB-INF
---------------META-INF

rmendes08

acho q vou fazer isso mesmo, pegar o local da classe e sair quebrando para tras ate chegar no diretorio da app, gambiarra detected! hehehe

Você pode fazer um ServletContextListener e setar a localização do arquivo, ou os próprios dados da conexão como propriedades do sistema:

System.setProperty("com.meu.sistema.database.config.file" , servletContext.getRealPath());

e dentro da fábrica você lê a propriedade:

String filePath = System.getProperty("com.meu.sistema.database.config.file");
rmendes08

isso mesmo!

Um arquivo com configurações de acesso a base de dados, na raiz da app web?

Digite a URL para esse arquivo no seu browser…

nao acontece oq vc esta pensando nao hehehe. aconteceria se estivesse dentro da pasta WebContent, ae seria bem engraçado !

meu caso eh assim:

minha_app
-meu_arquivo.txt
-WebContent
---------------WEB-INF
---------------META-INF

Bom, mas isso é no Eclipse … Como fica o arquivo .war/pasta do deploy no Tomcat ?

mauricioadl

acho q vou fazer isso mesmo, pegar o local da classe e sair quebrando para tras ate chegar no diretorio da app, gambiarra detected! hehehe

Você pode fazer um ServletContextListener e setar a localização do arquivo, ou os próprios dados da conexão como propriedades do sistema:

System.setProperty("com.meu.sistema.database.config.file" , servletContext.getRealPath());

e dentro da fábrica você lê a propriedade:

String filePath = System.getProperty("com.meu.sistema.database.config.file");

Otima ideia! Vou fazer isso!!!

Criado 1 de março de 2012
Ultima resposta 1 de mar. de 2012
Respostas 16
Participantes 3