Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于内部业务逻辑的JavaEE-Show页面_Java_Jakarta Ee_Servlets_Glassfish_Facesservlet - Fatal编程技术网

基于内部业务逻辑的JavaEE-Show页面

基于内部业务逻辑的JavaEE-Show页面,java,jakarta-ee,servlets,glassfish,facesservlet,Java,Jakarta Ee,Servlets,Glassfish,Facesservlet,我正在Glassfish服务器上用JavaEE实现一个企业应用程序。我需要让我的应用程序执行一些逻辑来显示特定URL子集的正确输出 问题描述: “我的网页”文件夹具有以下结构: Web Pages Protected - CorrectPage.xhtml - A.xhtml - B.xhtml - Index.xhtml 我希望用户访问URL: /Protected/CorrectPage.xhtml 但用户必须不能访问以下URL: /Protected/A

我正在Glassfish服务器上用JavaEE实现一个企业应用程序。我需要让我的应用程序执行一些逻辑来显示特定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的servlet,同时让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页面

我还考虑使用response PrintWriter解决最后一个问题

PrintWriter pw = response.getWriter();
但这并不能解决我的问题,因为我不知道如何打印xhtml文件,同时还要对其中包含的表达式语言进行求值

结论

非常感谢您的帮助。即使这意味着改变我提议的结构。当然,如果servlet的创建不是解决我的问题的正确方法,我会离开这条轨道

我只对用户将体验到的结果感兴趣


提前感谢

您可以使用
request.getRequestDispatcher(“/protected/page[A | B]”)。转发(请求,响应)

请注意,
page[A | B]
应作为正则表达式读取,即
pageA
pageB
感谢您的回答,但我认为这会递归调用我的servlet。我的servlet也被映射到“/protected/A.xhtml”以避免从URL直接访问这些页面。我认为您可以简单地在页面中包含一些代码以防止直接调用。您可以指定一些吗?我不知道你具体说的是什么代码,但我认为这会解决我的问题。我目前来自平板电脑,因此包含代码很困难,但是:在
WEB-INF
下提供这些资源(XHTML文件-a.XHTML,B.XHTML…),并根据此转发请求,“根据此逻辑的结果,我希望显示A.xhtml或B.xhtml,而不显示任何可见的URL更改”。(使关联的操作方法返回适当的导航案例结果,例如
return”/WEB-INF/pages/A.xhtml;
)。我希望显示A.xhtml或B.xhtml,而不显示任何可见的URL更改(重定向)“,你想让用户在不更改url的情况下看到不同的页面,这怎么可能呢?我会试试这个解决方案。”。我没有想到这一点。@Tiny我能够按照你的建议去做,并且我能够使用servlet的逻辑访问这些文件。我遇到的问题是,由于某种原因,我放在WEB-INF中的那些文件中包含的表达式语言根本没有得到评估。我在实际应用程序中尝试了这种方法。我能正确地看到一切发生。EL、
等的评估均正确进行。我只是使用与
相关联的
操作
方法,例如
返回/WEB-INF/pages/a.xhtml”,将请求转发给相关资源