2015-01-18 33 views
0

Я реализую корпоративное приложение с Java EE на сервере Glassfish. Мне нужно, чтобы мое приложение выполнило некоторую логику, чтобы показать правильный вывод для определенного подмножества URL-адресов.Java EE - Показать страницу на основе внутренней бизнес-логики

Описание проблемы:

Моя папка веб-страниц имеет такую ​​структуру:

Web Pages 
    Protected 
    - CorrectPage.xhtml 
    - A.xhtml 
    - B.xhtml 
    - Index.xhtml 

Я хочу пользователю получить доступ к URL:

/Protected/CorrectPage.xhtml 

Но пользователь не должен быть в состоянии обращайтесь по следующим адресам:

/Protected/A.xhtml 
/Protected/B.xhtml 

Когда введен URL /Protected/CorrectPage.xhtml, я хочу выполнить некоторую логику и в зависимости от результата этой логики я хочу показать либо A.xhtml, либо B.xhtml без каких-либо видимых изменений URL (перенаправления).

Solutions пытался до сих пор:

Я думал об использовании сервлета сопоставлен /Protected/*.xhtml, оставляя сделку Faces Servlet с любым другим 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. Я в основном хочу распечатать на клиенте мою страницу xhtml.

Я также подумал о решении этой последней проблемы с помощью ответа PrintWriter.

PrintWriter pw = response.getWriter(); 

Но чем снова это не решает мою проблему, так как я не знаю, как распечатать файл Xhtml, а также имея оценку языка выражений, содержащихся в нем.

Заключение

Любая помощь чрезвычайно ценится. Даже если это означает изменение чего-то в структуре, которую я предложил. Естественно, если создание сервлета не является правильным решением для моих проблем, я оставлю этот трек.

Меня интересует только результат, который испытает пользователь.

Заранее спасибо

+0

сделать эти ресурсы (XHTML файлы - A.xhtml, B.xhtml ...), доступные в 'WEB-INF' и направить запрос на них на основе на этом ", * в зависимости от результата этой логики я хочу показать либо A.xhtml, либо B.xhtml без каких-либо видимых изменений URL *". (сделайте связанный с ним метод действий возвратом соответствующего результата в случае навигации, например 'return '/WEB-INF/pages/A.xhtml"; '). – Tiny

+0

«Я хочу показать либо A.xhtml, либо B.xhtml без каких-либо видимых изменений URL (перенаправления)», вы хотите, чтобы пользователь видел другую страницу без изменения URL-адреса, как это возможно? – Biu

+0

Я попробую это решение Tiny. Я об этом не думал. – sofask

ответ

0

Вы можете использовать request.getRequestDispatcher("/protected/page[A|B]").forward(request, response)

+0

Обратите внимание, что 'page [A | B]' следует читать как регулярное выражение, то есть 'pageA' или' pageB' –

+0

Спасибо за ответ, но я думаю, что это вызовет рекурсивно мой сервлет. Мой сервлет также отображается на «/protected/A.xhtml», чтобы избежать прямого доступа к этим страницам из URL. – sofask

+0

Я думаю, вы можете просто добавить код на страницах, чтобы предотвратить прямой вызов. –