使用spring / struts框架在JSP头文件中显示用户全名的最佳方法?

时间:2009-05-12 18:57:01

标签: java spring jsp struts tiles

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

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

这样做的最佳方法是什么?我能想到的解决方案是:

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

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

  3. 我想我可以让它发挥作用。但我不确定这是最好的方法。我的方法有什么想法吗?


    (*)当然,cookie会被加密

2 个答案:

答案 0 :(得分:1)

虽然可能对于你相当简单的用例来说是一个非常大的锤子,但是我们通过使用ELResolver得到了一个非常整洁的spring-jsp集成(需要jsp 2.1!)。通过跟随this tutorial,您基本上可以将任何spring托管bean注入到el-context中,并允许使用jsp-el访问它,如下所示:

$ {spring.mybean.myproperty}

您可以选择将预定义的bean注入el-context或简单地将“mybean”传递给getBean,并允许几乎任何弹簧管理的bean都可以从jsp访问。 mybean很容易成为会话范围的spring bean。

我不完全确定这会如何与瓷砖对齐。

答案 1 :(得分:0)

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

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

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

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

  1. 这意味着(至少)每页请求额外的数据库调用
  2. 如果其他用户在同一个上下文中共享同一个bean,则无效。此外,您实际上不应该让JSP文件(它是您的表示层)直接与数据服务交互。