Как вернуть фактический html файл с помощью JAX-RS
до сих пор я возвращаю html свою домашнюю страницу:
@GET
@Produces({MediaType.TEXT_HTML})
public String viewHome()
{
return "<html>...</html>";
}
то, что я хочу сделать, это вернуть home.html и не копировать его содержимое и вместо этого возвращать строку.
Как мне это сделать? спасибо:)
Ответы
Ответ 1
Вы можете просто вернуть экземпляр java.io.InputStream
или java.io.Reader
- JAX-RS выполнит правильные действия.
@GET
@Produces({MediaType.TEXT_HTML})
public InputStream viewHome()
{
File f = getFileFromSomewhere();
return new FileInputStream(f);
}
Ответ 2
- Прочитайте файл с помощью
getResourceAsStream
- записать обратно в возвращенную строку.
Ответ 3
Вы можете использовать HtmlEasy, который построен поверх RestEasy, что является действительно хорошей реализацией Jax-RS.
Ответ 4
Это мой предпочтительный способ обслуживания веб-страницы с помощью 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;
}
}
}