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是前进的方向: