これまでのところ、次の方法でhtmlをホームページに返しています。
@GET
@Produces({MediaType.TEXT_HTML})
public String viewHome()
{
return "<html>...</html>";
}
私がやりたいのは、home.html自体を返し、その内容をコピーせず、代わりに文字列を返すことです。
どうすればよいですか?ありがとう:)
Java.io.InputStream
またはJava.io.Reader
のインスタンスを返すことができます—JAX-RSは正しいことを行います。
@GET
@Produces({MediaType.TEXT_HTML})
public InputStream viewHome()
{
File f = getFileFromSomewhere();
return new FileInputStream(f);
}
getResourceAsStream
を使用してファイルを読み取りますこれは、JAX-RSを使用してWebページを提供するための私の好ましい方法です。 Webページのリソース(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;
}
}
}
HtmlEasy を使用できます。これは、Jax-RSの非常に優れた実装であるRestEasyの上に構築されています。