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

16 respostas
M

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

A

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

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

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

A

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?

M

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.

M

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.

R

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 ?

A

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.

M

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!!!

M

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

A

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

M

isso mesmo!

A

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…

M

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

R

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");
R

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 ?

M

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