如何使用JAX-RS返回实际的html文件

时间:2012-07-15 06:30:15

标签: java html rest java-ee jax-rs

到目前为止,我正在通过以下方式返回html我的主页:

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

我想要做的是返回home.html本身,而不是复制其内容并返回字符串。

我该怎么做?谢谢:))

4 个答案:

答案 0 :(得分:28)

您只需返回java.io.InputStreamjava.io.Reader的实例 - JAX-RS就会做正确的事。

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

答案 1 :(得分:4)

  1. 使用getResourceAsStream
  2. 阅读文件
  3. 回写给返回的String。

答案 2 :(得分:1)

这是我使用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;
        }
    }
}

答案 3 :(得分:0)

你可以使用构建在RestEasy之上的HtmlEasy,这是一个非常好的Jax-RS实现。