Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JAX-RS返回实际的html文件_Java_Html_Rest_Jakarta Ee_Jax Rs - Fatal编程技术网

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

Java 如何使用JAX-RS返回实际的html文件,java,html,rest,jakarta-ee,jax-rs,Java,Html,Rest,Jakarta Ee,Jax Rs,到目前为止,我将通过以下方式返回我的主页: @GET @Produces({MediaType.TEXT_HTML}) public String viewHome() { return "<html>...</html>"; } @GET @生成({MediaType.TEXT_HTML}) 公共字符串viewHome() { 返回“…”; } 我要做的是返回home.html本身,而不是复制其内容并返回字符串 我该怎么做?谢谢:) 使用getResource

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

@GET
@Produces({MediaType.TEXT_HTML})
public String viewHome()
{
   return "<html>...</html>";
}
@GET
@生成({MediaType.TEXT_HTML})
公共字符串viewHome()
{
返回“…”;
}
我要做的是返回home.html本身,而不是复制其内容并返回字符串

我该怎么做?谢谢:)

  • 使用
    getResourceAsStream
  • 写回返回的字符串

  • 您可以只返回
    java.io.InputStream
    java.io.Reader
    的一个实例,JAX-RS将做正确的事情

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

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

    这是我使用Jax-RS服务网页的首选方式。网页的资源(html、css、图像、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;
            }
        }
    }
    

    嗯,很好的建议,先生。我得到了filenotfoundexception-\它是否搜索相对于调用文件的“tosearch.txt”?这取决于应用程序的“当前目录”是什么-这取决于应用程序从何处执行,即它可以(也可能会)在运行时更改。
    System.out.println(System.getProperty(“user.dir”)));
    将打印解析相关文件的路径。如果您在Servlet应用程序中,getResourceAsStream()方法()比使用
    java.io.File
    实例更好。在webapp dir中“加载”文件的最佳方式是什么?@Alex如果它是web应用程序本身的文件(即,在src/main/wwwroot下,而不是在servlet应用程序的类路径中),然后在ServletContext上调用getResourceAsStream是前进的方向: