【问题标题】:How to know if a JSP file is beeing included by another one?如何知道一个 JSP 文件是否被另一个文件包含?
【发布时间】:2014-01-17 15:20:33
【问题描述】:

我有x.jsp,它既可以作为整个响应,也可以包含在其他几个 jsp 文件中。

那么我如何知道 x.jsp 内部是否包含在另一个文件中?

【问题讨论】:

  • 你为什么想知道这个?你会用这些知识做什么?
  • 您可以尝试从包含器访问包含的 jsp 中的值。
  • 我已经想到了一些解决方法(例如使用 jsp:param),但这不是最优雅的方法,因为我需要修改所有包含 jsp 的文件。

标签: java jsp


【解决方案1】:

您可以在x.jsp 页面中检查属性javax.servlet.include.request_uri 的值。如果设置,则包含 jsp 页面。

更多细节在这里: Java HttpServletRequest get URL in browsers URL bar

【讨论】:

    【解决方案2】:

    您可以在“其他文件”中有一个隐藏字段,如果您包含 x.jsp,您应该为它设置一个值,并且在 x.jsp 中,当您想知道它是否包含时,您应该检查是否隐藏字段value == 'value'.

    【讨论】:

    • JSP 如何检查任何input 字段的值?
    【解决方案3】:

    如果x.jps 了解包容性,则意味着忽略了一些最佳实践:

    • MVC 模式被抛弃了,因为您的x.jsp 不仅仅是一个视图,还是某种控制器
    • 可能Single responsibility principle 已损坏。尝试将x.jsp 拆分为y.jspz.jsp,或者引入一个包含适当情况的值的变量
    • 它可能会增加coupling,因为x.jsp 需要有关环境的额外数据。

    当然,这些做法不是强制性的,但您需要有充分的理由忽略它们。

    请向我们提供有关您的案例的更多信息或改写您的问题

    编辑

    我的回答很抽象,因为您的问题很抽象。给我们你的jsp,应该改变什么,我希望你得到更好的答案。

    【讨论】:

    • 基本上,调用者最好将所有需要的信息都提供给调用者,而不是稍后再将其返回给调用者。在编写纯 Java 代码时也是如此。您可以使用 grepwin 之类的程序在所有 JSP 文件中进行搜索和替换。
    • 架构(和坏习惯)使我们远离“纯”MVC。 (请不要告诉我重构,这将花费数百人天)。 jsp文件不是类,关于耦合等看看useBean标签或者session/request变量。每个 Jsp 文件更像是一个过程调用,而不是一个对象。感谢您的回答,但对我没有帮助。
    猜你喜欢
    • 2011-12-08
    • 2012-01-28
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 2021-01-25
    • 1970-01-01
    相关资源
    最近更新 更多