Java 获取服务器上的Portlet会话

Java 获取服务器上的Portlet会话,java,session,portlet,Java,Session,Portlet,我的问题是: 我在名为first和second的门户服务器中部署了两个不同的Portlet,除了war文件之外,什么都没有;每当用户首先单击firstportlet时,我都使用以下代码来设置会话对象!: 第一个portlet中的代码: 字符串应用程序=欢迎; PortletRequest PortletRequest=PortletRequest webAppAccess .getHttpServletRequest .getAttributeInstants.PORTLET\u请求; port

我的问题是: 我在名为first和second的门户服务器中部署了两个不同的Portlet,除了war文件之外,什么都没有;每当用户首先单击firstportlet时,我都使用以下代码来设置会话对象!:

第一个portlet中的代码:

字符串应用程序=欢迎; PortletRequest PortletRequest=PortletRequest webAppAccess .getHttpServletRequest .getAttributeInstants.PORTLET\u请求; portletRequest.GetPortletSessionRue.setAttributeapplication, 会话值, PortletSession.APPLICATION\u范围; log.InfoSESSION孔值:-+portletRequest.getPortletSessionfalse; 每当用户单击secondportletsecond时,我都使用下面的代码来检索在firstportlet中设置的会话

第二个portlet中的代码:

PortletRequest PortletRequest=PortletRequest webAppAccess .getHttpServletRequest .getAttributeInstants.PORTLET\u请求; log.InfoSESSION孔值:-+portletRequest.getPortletSessionfalse; 第二个Portlet中的log.InfoSESSION值:-- +portletRequest.getPortletSessionfalse.getAttributeapplication, PortletSession.APPLICATION\u范围; 错误:

但是在第二个portlet中,我总是得到空值,请问有什么解决方案吗?

portletSession.APPLICATION\u作用域机制使portlet在同一个portlet应用程序中共享会话数据成为可能。如果您有两个portlet不在同一个war中,那么它们不在同一个portlet应用程序中,因此会话数据也不会共享


要解决这个问题,您需要将两个portlet放在同一个portlet应用程序中,即相同的war、相同的portlet.xml,但仍然是两个不同的portlet。

DanielBarbarian的答案是正确的。要共享全局会话,portlet需要处于同一战争中。但是,在同一页面上的portlet之间共享数据还有其他方法,但不一定是在同一战争中。我假设您的门户容器支持JSR286标准

使用interpartlet通信。这可以通知其他portlet事件。这是一个简单的发布/订阅系统,不难设置。 使用全局渲染参数。
web上有这两个选项的示例。

正在使用哪个portlet容器?ypu是否可以提供查看示例的链接?我如何做任何示例?这取决于具体情况,但基本上您将所有portlet代码和资源放在同一个war中,然后合并portlet.xml,使其包含两个portlet的定义。如果您需要一个更详细的示例,如果我们知道您使用什么来编写Portlet,可能会有所帮助。您使用什么工具来开发Portlet?WEF8工具用于开发Portlet。我不知道关于该工具的一切,但是您应该能够通过向导将第二个portlet添加到第一个portlet应用程序项目中。