【问题标题】:How do I include jsp pages in a Java web app without duplicating code?如何在不复制代码的情况下在 Java Web 应用程序中包含 jsp 页面?
【发布时间】:2010-10-20 22:00:02
【问题描述】:

首先让我说我对 Java Web 应用程序完全陌生,所以如果这是一个非常基本的问题,我很抱歉。

我正在编写一个能够让用户登录帐户的应用程序。每个页面的顶部都包含一个信息栏(有点像 GMail 中的顶部栏),其中包含以下内容:

Logged in as <userid> | Settings | Help

由于该部分将出现在每个页面上,因此将这些功能拆分出来对我来说是有意义的,这样我就不会重复我的代码。

我做了一些搜索,发现我可以使用这个:

<jsp:include page="userInfoBar.jsp" flush="true" />

在另一个 JSP 的中间。不过,我的 userSettings.jsp 页面遇到了问题,该页面还从数据库中获取了一些用户详细信息。我不仅在 2 个 JSP 之间复制了一些代码,而且我感觉在网页呈现期间我正在做双倍的工作。

例如(伪代码):

userInfoBar.jsp:
user = getCurrentUser
if ( user ) {
  print Logged in as user.userid | Settings | Help
}

userSettings.jsp:
<jsp:include page="userInfoBar.jsp" flush="true" />
user = getCurrentUser
Change settings for user.userid

所以在那个小例子中,getCurrentUser 被调用了两次(我认为,除非 Java 以某种方式对其进行了优化)。

如何避免这种重复工作,但仍将 userInfoBar 与每个 JSP 保持一定程度的分离?

提前致谢!

布赖恩

【问题讨论】:

    标签: java jsp include


    【解决方案1】:

    问题是您的 JSP 中有 java 代码。当你这样做时,大多数邪恶的事情都会发生。你应该在谷歌上查找 MVC 模式。

    无论如何,这样做的好方法是使用 MVC 模式,并在控制器中进行繁重的工作,完成繁重的工作后,您可以传递字符串/列表来显示视图,从而显示它们仅此而已。

    另外,如果您开始将 MVC 与 JSTL 一起使用,将会有更多的人能够帮助您,因为每个人都知道如何做这些事情,希望仍然没有多少人在他们的 JSP 中使用内联 java

    【讨论】:

    • 酷 - 因为 Ruby on Rails 和 Django,我对 MVC 很熟悉 - 我只是不确定如何在 Java 中实现这一点。我现在正在查找 :)
    • 阅读 JSTL - 这看起来像是要走的路。看起来很不一样,所以我会研究一段时间。非常感谢您的帮助!
    【解决方案2】:

    尝试使用JSF。这样可以轻松实现 MVC。

    您可以将两个前端指向同一个会话范围的 bean 以获取用户信息。

    【讨论】:

      【解决方案3】:

      您还可以使用 jspf(JSP 片段文件)来存储 JSP 块。

      jsp:include 是包含 JSP 的一种方法。

      另一种方法是使用 JSTL 库中的 c:include。

      此处介绍了不同之处: * http://sharat.wordpress.com/2006/09/08/40-what-is-the-difference-between-jspinclude-and-cimport/

      希望对您有所帮助。我确信有特定于框架的方法,但这是我所知道的两种 JSP 方法。

      【讨论】:

        【解决方案4】:

        嗯,对于一个只有几页的小项目,我认为做纯 jsp 是可以的,掌握它也不是一个坏主意。

        我可以向您保证,任何框架都会添加更多“不必要的”代码,这些代码会被一遍又一遍地调用,但您不会注意到,因为它隐藏在抽象背后。

        (我真的不能为 java 推荐一个像样的 html 框架,但也许 GWT 是最有前途的,或者至少是最不痛苦的。至少我可以在一个像样的编辑器中编写真正的可调试代码......)

        【讨论】:

          猜你喜欢
          • 2017-12-24
          • 2015-10-13
          • 1970-01-01
          • 1970-01-01
          • 2013-03-22
          • 1970-01-01
          • 2020-01-11
          • 1970-01-01
          • 2011-07-04
          相关资源
          最近更新 更多