2012-07-15 42 views
10

到目前爲止,我通過返回的HTML我的主頁:如何使用JAX-RS返回實際的HTML文件

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

我想要做的就是回到home.html的本身,而不是複製其內容和而是返回字符串。

我該怎麼做?謝謝:)

回答

18

您可以返回一個java.io.InputStreamjava.io.Reader的實例 - JAX-RS將做正確的事情。

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

嗯,好建議先生。 我得到filenotfoundexception -_-它是否搜索相對於調用文件的「tosearch.txt」? – Incognito 2012-07-15 07:36:41

+0

這取決於應用程序的「當前目錄」是什麼 - 這取決於應用程序執行的位置,即它可以(也可能會)在運行時更改。 'System.out.println(System.getProperty(「user.dir」));'將打印解析相關文件的路徑。 – 2012-07-15 08:51:08

+2

如果你在一個Servlet應用程序中,getResourceAsStream()方法(http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getResourceAsStream(java.lang.String))是一個更好的選擇,然後使用'java.io.File'實例。 – 2012-07-15 08:52:49

3
  1. 閱讀使用getResourceAsStream
  2. 寫回返回字符串的文件。
+0

請在您的回答中添加一些代碼 – 2017-03-10 08:28:53

0

您可以使用它是建立在RestEasy的,這是一個非常好的實現JAX-RS的頂部HtmlEasy

0

這是我使用JAX-RS來服務網頁的首選方式。網頁的資源(html,css,images,js等)被放置在main/java/resources中,它們應該在WEB-INF/classes中部署它們(根據你如何設置你的項目,可能需要一些配置)。將ServletContext注入您的服務並使用它來查找該文件並將其作爲InputStream返回。我已經包含了一個完整的例子供參考。

@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; 
     } 
    } 
} 
相關問題