これまでのところ、次の方法でhtmlをホームページに返しています。
@GET
@Produces({MediaType.TEXT_HTML})
public String viewHome()
{
return "<html>...</html>";
}
私がやりたいのは、home.html自体を返し、その内容をコピーせず、代わりに文字列を返すことです。
どうすればよいですか?ありがとう :)
これまでのところ、次の方法で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;
}
}
}
RestEasyの上に構築されたHtmlEasyを使用できます。 これは、Jax-RSの非常に優れた実装です。