2012-07-15 5 views
10

finora, sto tornando html mia home page:Come restituire file html reale utilizzando JAX-RS

@GET 
@Produces({MediaType.TEXT_HTML}) 
public String viewHome() 
{ 
    return "<html>...</html>"; 
} 

quello che voglio fare è tornare home.html per sé e non copiare il suo contenuto e restituendo la stringa invece.

Come posso fare? grazie :)

risposta

18

Si può solo restituire un'istanza di java.io.InputStream o java.io.Reader - JAX-RS farà la cosa giusta.

@GET 
@Produces({MediaType.TEXT_HTML}) 
public InputStream viewHome() 
{ 
    File f = getFileFromSomewhere(); 
    return new FileInputStream(f); 
} 
+0

hmm, buon suggerimento signore. Ricevo filenotfoundexception -_- Ricerca il "tosearch.txt" relativo al file chiamante? – Incognito

+0

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. –

+2

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'. –

3
  1. leggere il file usando getResourceAsStream
  2. scrittura torna a String restituito.
+0

per favore aggiungi un codice alla tua risposta –

0

È possibile utilizzare HtmlEasy che è costruito in cima alla RESTEasy, che è davvero un buon implementazione di JAX-RS.

0

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; 
     } 
    } 
} 
Problemi correlati