Questo è il mio modo preferito di servire una pagina web usando JAX-RS. Le risorse per la pagina web (html, css, images, js, ecc.) Sono collocate in main/java/resources
, che dovrebbe distribuirle in WEB-INF/classes
(potrebbe richiedere qualche configurazione a seconda di come si imposta il progetto). Inietta ServletContext
nel servizio e utilizzalo per trovare il file e restituirlo come InputStream
. Ho incluso un esempio completo di seguito per riferimento.
@Path("/home")
public class HomeService {
@Context
ServletContext servletContext;
@Path("/{path: .+}")
@GET
public InputStream getFile(@PathParam("path") String path) {
try {
String base = servletContext.getRealPath("/WEB-INF/classes/files");
File f = new File(String.format("%s/%s", base, path));
return new FileInputStream(f);
} catch (FileNotFoundException e) {
// log the error?
return null;
}
}
}
fonte
2017-07-20 12:42:18
hmm, buon suggerimento signore. Ricevo filenotfoundexception -_- Ricerca il "tosearch.txt" relativo al file chiamante? – Incognito
Dipende da cosa è la "directory corrente" della tua applicazione - che dipende da dove viene eseguita l'app, cioè può (e probabilmente lo farà) cambiare in fase di esecuzione. 'System.out.println (System.getProperty (" user.dir "));' stamperà il percorso da cui sono stati risolti i relativi file. –
Se si utilizza un'applicazione Servlet, il metodo getResourceAsStream() (http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getResourceAsStream(java.lang.String)) è un'opzione migliore quindi usando un'istanza 'java.io.File'. –