Java EE - Show page based on internal business logic

168 Views Asked by At

I'm implementing an enterprise application with Java EE on Glassfish server. I need to my application to execute some logic to show the proper output for a specific subset of URLs.

Problem description:

My web pages folder has this structure:

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

I want the user to access the URL:

/Protected/CorrectPage.xhtml

But the user must not be able to access the following URLs:

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

When the URL /Protected/CorrectPage.xhtml is entered I want to execute some logic and depending on the outcome of this logic I want to show either A.xhtml, or B.xhtml, without any visible URL changes (redirects).

Solutions tried so far:

I thought about using a servlet mapped to /Protected/*.xhtml while leaving the Faces Servlet deal with any other URL in my application.

and having :

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*

My issue is that I don't know how to implement the Show A.xhtml. I basically want to print to the client my xhtml page.

I also thought about solving this last issue by using the response PrintWriter.

PrintWriter pw = response.getWriter();

But than again this doesn't solve my issue since I don't know how to print the xhtml file while also having the evaluation of the expression language contained in it.

Conclusion

Any help is extremely appreciated. Even if that means changing something in the structure I proposed. Naturally if the creation of a servlet isn't the correct solution for my issues I will leave that track.

I'm interested only in the outcome the user will experience.

Thanks in advance

1

There are 1 best solutions below

7
On

You may use request.getRequestDispatcher("/protected/page[A|B]").forward(request, response)