web-dev-qa-db-ja.com

JAX-RSを使用して実際のhtmlファイルを返す方法

これまでのところ、次の方法でhtmlをホームページに返しています。

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

私がやりたいのは、home.html自体を返し、その内容をコピーせず、代わりに文字列を返すことです。

どうすればよいですか?ありがとう:)

16
Incognito

Java.io.InputStreamまたはJava.io.Readerのインスタンスを返すことができます—JAX-RSは正しいことを行います。

@GET
@Produces({MediaType.TEXT_HTML})
public InputStream viewHome()
{
   File f = getFileFromSomewhere();
   return new FileInputStream(f);
}
28
Sean Reilly
  1. getResourceAsStreamを使用してファイルを読み取ります
  2. 返された文字列に書き戻します。
4

これは、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;
        }
    }
}
1

HtmlEasy を使用できます。これは、Jax-RSの非常に優れた実装であるRestEasyの上に構築されています。

0
qgicup