Pegar caminho de arquivo no servidor usando Servlet

Iai pessual, to com uma duvida meio chata, e ñ to encontrando uma solução aki…

seguinte…tenho uma classe q busca um arquivo…

em alguns métodos tenho linhas de código parecidas com essa:

File file = new File("src\\java\\securityResources"); String path = file.getAbsolutePath() + "\\" + certificado;

finalizei a app de teste q estava fazendo desktop…porem essa classe será usada em aplicações web.
A duvida é: como pegar o caminho correto do arquivo no servidor, sem ter q transformar essa minha classe em servlet?..alguem ai manja?

vlw

da uma olhada neste link , acho que pode te ajudar

http://commons.apache.org/net/

vc pode me dar um exemplo de como essa API pode me ajudar?
vlw

Iai pessual, to com sérios problemas pra resolver isso… :shock: …nem sei como resolver…

estava pensando na possibilidade de criar um servlet q pega o caminho através do seguinte:

[code]package br.com.cienci.nfe.servlets;

import java.io.;
import java.net.
;

import javax.servlet.;
import javax.servlet.http.
;

public class PathServlet extends HttpServlet {

public String getPath(){
    return getServletContext().getRealPath("/securityResources");
}

}[/code]

mas não sei se isso funcionaria…a duvida é:

é possivel chamar a servlet dentro de uma classe?..de modo q eu pegue o path do diretorio “securityResources”…

se alguem puder ajudar agradeço mto…
vlw

Uma Servlet é uma classe comum que é filha de HttpServlet entao acredito que se vc instanciar um objeto da sua classe Servlet
deve funcionar.

nos dois links abaixo tem exemplos de como usar a api sugerida , mas tudo depende de que se vc nao fizer uma classe Servelet como vai se conectar ao servidor para pegar o caminho dos arquivos.
Da uma lida tambem no javadoc que tem no link da api

http://www.informit.com/guides/content.asp?g=java&seqNum=40
http://www.onjava.com/pub/a/onjava/2003/06/25/commons.html?page=3

eu ja instanciei pra ver…e da erro:

[code]package br.com.cienci.nfe.servlets;

import java.io.;
import java.net.
;

import javax.servlet.;
import javax.servlet.http.
;

public class PathServlet extends HttpServlet {

public String getPath(){
    return getServletContext().getRealPath("/securityResources");
}

}[/code]

[code]package br.com.cienci.nfe.util;

import br.com.cienci.nfe.servlets.PathServlet;

public class TesteUrl {

public static void main(String[] args){        
    PathServlet pp = new PathServlet();
    System.out.println("Path: " + pp.getPath());
}

}[/code]

Exception in thread "main" java.lang.NullPointerException at javax.servlet.GenericServlet.getServletContext(GenericServlet.java:160) at br.com.cienci.nfe.servlets.PathServlet.getPath(PathServlet.java:21) at br.com.cienci.nfe.util.TesteUrl.main(TesteUrl.java:17) Java Result: 1

pq será?..é pq ele não ta indo no server ou algo assim?..tem alguma maneira de eu chamar pela url-pattern dela?

flw

neste seu exemplo quem esta dando erro é o metodo getServeletContext() que esta retornando nulo
e nao instanciar ou chamar um metodo da servlet

sim, isso eu percebi…mas pq isso acontece?..tem algum jeito disso não ficar nulo?..pq se eu conseguisse retornar o path, acho q resolveria meu problema…

flw

cara,
esse codigo não vai funcionar simplesmente pq o metodo getServletContext() retorna o contexto dentro do server.
vc nao poder invocar esse metodo dessa maneira.

mas eu na netendi o que vc ta querendo fazer. vc quer ler o arquivo?

[]´s

[quote=jgbt]cara,
esse codigo não vai funcionar simplesmente pq o metodo getServletContext() retorna o contexto dentro do server.
vc nao poder invocar esse metodo dessa maneira.

mas eu na netendi o que vc ta querendo fazer. vc quer ler o arquivo?

[]´s
[/quote]

eu suspeitei desde o principio…kkk… :smiley:

mas brincadeiras a parte, meu problema é bem chato pra dizer a verdade.
Eu tenho alguns arquivos (xsd, certificados digitais, keystore,…) que eu preciso carregar na aplicação. Em desktop eu usava normal:

File file = new File("src\\securityResources"); String path = file.getAbsolutePath() + "\\" + certificado;

mas na web eu não to conseguindo pegar esse arquivo…fiz alguns testes e me da um erro como:

java.io.FileNotFoundException: file:\C:\Arquivos de programas\Apache Software Foundation\Apache Tomcat 6.0.14\bin\src\java\securityResources\certificado_rns.p12 (A sintaxe do nome do arquivo, pasta ou nome do volume está incorreta) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:106) at java.io.FileInputStream.<init>(FileInputStream.java:66) at br.com.cienci.nfe.signature.DigitalSignature.sign(DigitalSignature.java:74) at br.com.cienci.nfe.rfc.ConsultaCnpjWs.getIncricaoMunicipal(ConsultaCnpjWs.java:41) at br.com.cienci.nfe.rfc.RFCServer$Server.handleRequest(RFCServer.java:152) at com.sap.mw.jco.JCO$Server.dispatchRequest(JCO.java:5409) at com.sap.mw.jco.rfc.MiddlewareRFC$Server.nativeListen(Native Method) at com.sap.mw.jco.rfc.MiddlewareRFC$Server.listen(MiddlewareRFC.java:1010) at com.sap.mw.jco.JCO$Server.listen(JCO.java:5205) at com.sap.mw.jco.JCO$Server.run(JCO.java:5139) at java.lang.Thread.run(Thread.java:619)

eu não entendo pq ele vai no diretorio bin do tomcat…o esperado era pegar o arquivo no diretorio onde esta a aplicação…

alguma sugestão?..qualquer coisa é bem vinda… :smiley:
vlw

ele so vai achar arquivos que estejam no CLASSPATH.

o mais simples p/ ele ler um arquivo seria colocar ele no mesmo diretorio da classe e :

InputStream in = this.getClass().getResourceAsStream("nome do arquivo");

[]´s

[quote=jgbt]ele so vai achar arquivos que estejam no CLASSPATH.

o mais simples p/ ele ler um arquivo seria colocar ele no mesmo diretorio da classe e :

InputStream in = this.getClass().getResourceAsStream("nome do arquivo");

[]´s
[/quote]

Ou então, se estiver dentro do WEB-INF/classes, pode usar o seguinte

InputStream is = getClass().getClassLoader().getResourceAsStream("nome do arquivo");

[quote=jgbt]ele so vai achar arquivos que estejam no CLASSPATH.

o mais simples p/ ele ler um arquivo seria colocar ele no mesmo diretorio da classe e :

InputStream in = this.getClass().getResourceAsStream("nome do arquivo");

[]´s
[/quote]

iai cara, blz?

aparentemente resolveu meu problema dessa forma, porem os arquivos devem ficar no msm package…tem como eu somente pegar esse caminho, e assim depois trabalhar com essa String para pegar um outro package?

alem disso, em outra situação eu preciso fazer o seguinte:

 System.setProperty("javax.net.ssl.keyStore", this.privateKey);

onde esse this.privateKey é o arquivo a ser setado, ou seja, o caminho inteiro do arquivo…então nesse caso eu preciso de uma String msm, tem alguma forma?..pois não posso passar um InputStream nesse caso

flw…e vlw a ajuda

Caso alguem precise…
String path = ClassLoader.getSystemResource(“arquivo”).getPath();

Grande Rapaziada,

Estou com um probleminha, pode ate ser besta…mais nao estou conseguindo resolver…

Estou fazendo o upload de uma imagem e gravando em um diretorio(Comum) na raiz do meu servidor.
Ate aqui tranquilo.

Mais depois quero que o meu jsp o comando html (<IMG SRC=’’) mostre essa imagem no browser, nao estou conseguindo fazer isso.

alguem tem alguma sugestão?

obrigado.