Java EE - Показать страницу на основе внутренней бизнес-логики
Я реализую корпоративное приложение с Java EE на сервере Glassfish. Мне нужно, чтобы мое приложение выполнило некоторую логику, чтобы показать правильный вывод для определенного подмножества URL.
Описание проблемы:
Моя папка веб-страниц имеет следующую структуру:
Web Pages
Protected
- CorrectPage.xhtml
- A.xhtml
- B.xhtml
- Index.xhtml
Я хочу, чтобы пользователь получил доступ к URL:
/Protected/CorrectPage.xhtml
Но пользователь не должен иметь доступ к следующим URL-адресам:
/Protected/A.xhtml
/Protected/B.xhtml
Когда вводится URL /Protected/CorrectPage.xhtml, я хочу выполнить некоторую логику, и в зависимости от результата этой логики я хочу показать либо A.xhtml, либо B.xhtml, без каких-либо видимых изменений URL (перенаправлений).
Решения до сих пор пробовали:
Я думал об использовании сервлета, сопоставленного с /Protected/*.xhtml, оставляя сервлет Faces работать с любым другим URL-адресом в моем приложении.
и имея:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
if(*Requested URL is /Protected/CorrectPage.xhtml*) {
if(logic())
*Show A.xhtml*
else
*Show B.xhtml*
} else
*Show 404*
Моя проблема в том, что я не знаю, как реализовать Show A.xhtml. Я в основном хочу напечатать клиенту мою страницу HTML.
Я также думал о решении этой последней проблемы, используя ответ PrintWriter.
PrintWriter pw = response.getWriter();
Но, опять же, это не решает мою проблему, так как я не знаю, как распечатать файл xhtml, и в то же время иметь оценку языка выражений, содержащегося в нем.
Заключение
Любая помощь очень ценится. Даже если это означает что-то изменить в структуре, которую я предложил. Естественно, если создание сервлета не является правильным решением для моих проблем, я оставлю этот путь.
Меня интересует только результат, который получит пользователь.
заранее спасибо
1 ответ
Вы можете использовать request.getRequestDispatcher("/protected/page[A|B]").forward(request, response)