Domanda

Ho bisogno di ottenere reali percorso per il file nella mia directory WebContent, in modo tale contesto che uso può accedere a quel file. Si richiede solo di file String come attributo, quindi ho bisogno di ottenere il percorso reale per questo file nella directory WebContent.

Io uso Spring Framework, quindi la soluzione dovrebbe essere possibile per fare in primavera.

È stato utile?

Soluzione

Se avete bisogno di questo in un servlet poi uso getServletContext().getRealPath("/filepathInContext")!

Altri suggerimenti

getServletContext () getRealPath ( "") -. In questo modo non funziona se il contenuto è stato reso disponibile da un archivio .war. getServletContext () sarà nullo.

In questo caso si può utilizzare un altro modo per ottenere vero e proprio percorso. Questo è l'esempio di ottenere un percorso di un proprietà di file C: / Program Files / Tomcat 6 / webapps / frontend / WEB-INF / classes / somefile.properties:

// URL returned "/C:/Program%20Files/Tomcat%206.0/webapps/myapp/WEB-INF/classes/"
URL r = this.getClass().getResource("/");

// path decoded "/C:/Program Files/Tomcat 6.0/webapps/myapp/WEB-INF/classes/"
String decoded = URLDecoder.decode(r.getFile(), "UTF-8");

if (decoded.startsWith("/")) {
    // path "C:/Program Files/Tomcat 6.0/webapps/myapp/WEB-INF/classes/"
    decoded = decoded.replaceFirst("/", "");
}
File f = new File(decoded, "somefile.properties");

si deve dire java per cambiare il percorso dal PC nel progetto Java in modo se si utilizza l'uso di primavera:

@Autowired
ServletContext c;

String UPLOAD_FOLDEdR=c.getRealPath("/images"); 

ma se si utilizza servlet basta usare

String UPLOAD_FOLDEdR = ServletContext.getRealPath("/images");  

in modo che il percorso sarà /webapp/images/:)

In situazioni come queste tendo ad estrarre il contenuto mi serve come una risorsa (MyClass.getClass (). GetResourceAsStream ()), scrivere come un file in una cartella temporanea e utilizzare questo file per l'altra chiamata.

In questo modo non devo preoccuparsi di contenuti che è contenuto solo in vasetti o si trova da qualche parte a seconda del web container Attualmente sto usando.

Includere la richiesta come parametro. Molla passerà poi l'oggetto di richiesta quando chiama il metodo mappata

@RequestMapping .....
public String myMethod(HttpServletRequest request) {
   String realPath = request.getRealPath("/somefile.txt");
   ...

È possibile utilizzare l'interfaccia di primavera delle risorse (e soprattutto il ServletContextResource): http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/core/io/Resource.html

Questo approccio utilizza il caricatore di risorse per ottenere il percorso assoluto di un file nella vostra applicazione, e poi va su alcune cartelle nella cartella principale dell'applicazione. Nessun contesto servlet richiesto! Questo dovrebbe funzionare se si dispone di un "web.xml" nella cartella WEB-INF. Si noti che si può prendere in considerazione di utilizzare questo solo per lo sviluppo, in quanto questo tipo di configurazione di solito è meglio memorizzati esternamente dalla app.

public String getAppPath()
{
    java.net.URL r = this.getClass().getClassLoader().getResource("web.xml");
    String filePath = r.getFile();
    String result = new File(new File(new File(filePath).getParent()).getParent()).getParent();

    if (! filePath.contains("WEB-INF"))
    {
        // Assume we need to add the "WebContent" folder if using Jetty.
        result = FilenameUtils.concat(result, "WebContent");
    }

    return result;
}

tenta di utilizzare questo quando si desidera utilizzare arff.txt nel vostro livello di sviluppo e nella produzione troppo

  String path=getServletContext().getRealPath("/WEB-INF/files/arff.txt");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top