Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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
Java 使用spring/struts框架在JSP头文件中显示用户全名的最佳方法?_Java_Spring_Jsp_Struts_Tiles - Fatal编程技术网

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

Java 使用spring/struts框架在JSP头文件中显示用户全名的最佳方法?,java,spring,jsp,struts,tiles,Java,Spring,Jsp,Struts,Tiles,我有一个JSP struts应用程序,它使用Spring与services/dao/database集成。基本上,struts使用spring从DB获取数据,它构建表单并将其转发到JSP文件 我有一个头文件,它使用Tiles注入每个JSP文件。我想在页眉内的每一页上显示“欢迎John Doe”。其中“John Doe”是当前登录用户的名称 最好的方法是什么?我能想到的解决办法是: 使用Spring过滤器捕获http请求。使用包含用户id(*)的cookie从数据库加载用户,并将该名称放入名为“C

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

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

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

  • 使用Spring过滤器捕获http请求。使用包含用户id(*)的cookie从数据库加载用户,并将该名称放入名为“CurrentUser”的会话bean中

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

  • 我想我可以让它工作。但我不确定这是最好的方法。对我的方法有什么想法吗



    (*)当然,cookie将被加密

    您是否已经在会话中存储了某种类型的
    用户
    对象

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

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

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

  • 这意味着(至少)每个页面请求有一个额外的数据库调用
  • 如果其他用户在同一上下文中共享同一个bean,这将不起作用。另外,您真的不应该让JSP文件(它是您的表示层)直接与数据服务交互
  • 尽管对于您相当简单的用例来说,它可能是一个非常大的锤子,但我们已经通过使用获得了一个非常整洁的spring jsp集成(需要jsp 2.1!)。通过以下操作,您基本上可以将任何spring托管bean注入el上下文,并允许使用jsp el访问它,如下所示:

    ${spring.mybean.myproperty}

    您可以选择将预定义的bean注入el上下文,或者简单地将“mybean”传递给getBean,并允许spring管理的几乎所有内容都可以从jsp访问。mybean很容易成为会话范围的Springbean


    不过,我不完全确定这将如何与tiles保持一致。

    我的方法不会每次都执行数据库请求。我将使用过滤器填充会话bean。会话bean由spring管理并连接到会话。