4

我有一个使用 Spring 与 services/dao/database 集成的 JSP struts 应用程序。基本上,struts 使用 spring 从数据库中获取数据,它构建表单并将它们转发到 JSP 文件。

我有一个使用 Tiles 注入到每个 JSP 文件中的头文件。我想在标题内的每一页上显示“Welcome John Doe”。其中“John Doe”是当前登录用户的名称。

最好的方法是什么?我能想到的解决方案是:

  1. 使用 Spring Filter 捕获 http 请求。使用包含用户 id(*) 的 cookie 从数据库加载用户,并将名称放在名为“CurrentUser”的会话 bean 中

  2. 在“header.jsp”中,获取spring应用上下文。使用它,加载 bean “CurrentUser”并获取名称。将名称放在 html 中。

我想我可以让这个工作。但我不确定这是最好的方法。对我的方法有任何想法吗?


(*) 当然,cookie 会被加密

4

2 回答 2

1

尽管对于您相当简单的用例来说它可能是一个非常大的锤子,但我们已经通过使用ELResolver获得了一个非常简洁的 spring-jsp 集成(需要 jsp 2.1!) 。通过遵循本教程,您基本上可以将任何 Spring 托管 bean 注入您的 el-context 并允许使用 jsp-el 访问它,如下所示:

${spring.mybean.myproperty}

您可以选择将预定义的 bean 注入到您的 el-context 中,或者只是将“mybean”传递给 getBean 并允许几乎所有 spring 管理的东西都可以从 jsp 访问。mybean 可以很容易地成为会话范围的 spring bean。

不过,我不完全确定这将如何与瓷砖对齐。

于 2009-05-13T15:28:07.090 回答
0

User您还没有在 Session 中存储某种对象吗?

如果是这样,我只需向该域对象添加一个“getFullName()”方法,并在返回它时让 DAO 填充它。理想情况下,您应该在用户登录时填充User对象,将其存储在会话中,并且不需要在每个页面请求上再次从数据库中加载所有用户的详细信息。

(你没有使用 Spring Security 吗?如果是这样,它们提供了一种非常简单的方法来UserDetails在 Session 中存储 -like 对象,并且可以轻松访问它。)

我会投票反对你的两种方法,因为

  1. 这意味着(至少)每个页面请求有一个额外的数据库调用
  2. 如果其他用户在同一个上下文中共享同一个 bean,这将不起作用。此外,您真的不应该让 JSP 文件(这是您的表示层)直接与数据服务交互。
于 2009-05-12T19:03:07.137 回答