Java 使用会话将参数发送到Liferay Portlet

Java 使用会话将参数发送到Liferay Portlet,java,session,servlets,liferay,Java,Session,Servlets,Liferay,我需要创建一个Servlet来管理一些信息,然后再转到Liferay 6.2 Portlet。两者都在同一台服务器上 我需要Servlet发送一个参数,但我不想发送它GET,而是POST方法。因此,我尝试将它放在会话中,以便从Portlet检索它 在Servlet中,我有: protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOExcep

我需要创建一个Servlet来管理一些信息,然后再转到Liferay 6.2 Portlet。两者都在同一台服务器上

我需要Servlet发送一个参数,但我不想发送它GET,而是POST方法。因此,我尝试将它放在会话中,以便从Portlet检索它

在Servlet中,我有:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        request.getSession().setAttribute("param1", "TEST 1");
        url = "http://myServer/";
        response.sendRedirect(response.encodeRedirectURL(url));
    } catch (Exception e) {
        e.printStackTrace();
    }
}
在Portlet中,我在render方法中管理信息,因为我希望在呈现页面之前获取param1:

public void render (RenderRequest renderRequest, RenderResponse renderResponse) 
        throws PortletException, IOException {
    super.render(renderRequest, renderResponse);
    //Try to retrieve from getOriginalServletRequest
    HttpServletRequest servletReq = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(renderRequest));
    String param1 = servletReq.getSession().getAttribute("param1").toString();
    //Try to retrieve from getHttpServletRequest 
    HttpServletRequest servletReq_ = PortalUtil.getHttpServletRequest(renderRequest);
    String param1_ = servletReq_.getSession().getAttribute("param1").toString();
}
正如您所看到的,我试图从getHttpServletRequest和getOriginalServletRequest中检索,但总是得到param1 null

有什么建议吗? 提前谢谢你

更新问题:

我被第三方调用,我收到一个GET参数,我想计算它

在此之后,不要在中间渲染页面,我希望重定向到一个或另一个portlet,这取决于该评价。

我需要向这些portlet发送一些个人信息,所以我想在POST方法中发送一些参数

Servlet不适合与portlet共享会话

我试图实现一个登录Portlet,但是重定向只能在操作阶段完成,所以我需要在重定向之前呈现一个(空)页面,我不喜欢这一部分。呈现阶段不允许重定向(即使获取PortalTil.getHttpServletResponse()也不起作用)


有什么建议吗?谢谢

servlet和portlet不会共享同一个会话。portlet位于门户服务器中,例如Liferay。servlet通常位于其自己的web应用程序中,因此通过设计完全分离

如果您需要在两者之间进行沟通,以下是两种可能的解决方案/解决方法:

  • 将servlet重新实现为portlet,潜在地利用portlet的资源阶段
  • 使用请求参数而不是会话属性
在所有注释之后编辑:

最好退一步,看看潜在的问题——你真正想解决的问题是什么?你的问题的内容是你如何试图解决它,显然存在挑战。看起来这个问题首先需要一个不同的解决方案


我的回答描述了解决方案无法工作的原因,但这显然无助于解决根本问题。

servlet和portlet不会共享同一个会话。portlet位于门户服务器中,例如Liferay。servlet通常位于其自己的web应用程序中,因此通过设计完全分离

如果您需要在两者之间进行沟通,以下是两种可能的解决方案/解决方法:

  • 将servlet重新实现为portlet,潜在地利用portlet的资源阶段
  • 使用请求参数而不是会话属性
在所有注释之后编辑:

最好退一步,看看潜在的问题——你真正想解决的问题是什么?你的问题的内容是你如何试图解决它,显然存在挑战。看起来这个问题首先需要一个不同的解决方案


我的回答描述了您的解决方案无法工作的原因,但这显然无助于解决根本问题。

谢谢。我怀疑会话不会被共享,但方法“getHttpServletRequest”给了我一些希望:)我认为servlet是一个portlet,我只是推迟了这个测试,因为它更难在本地主机中实现,因为我使用的是单个Portlet,而不是整个门户,所以我无法创建不同的页面来导航到另一个页面……我尝试使用request.setAttribute(“param1”,“test1”),但我也没有得到它。如何轻松设置请求参数?请求对象不允许setParameter()调用,我刚刚读到了构建包装器的相关内容……我还尝试了response.addCookie(),但它也无法访问portlet:(请求参数,而不是属性。您可以构造一个包含参数的URL,而不是请求。但该URL参数将作为GET调用发送,这是我想要避免的。不是吗?我正在使用portlet到portlet的解决方案,让我们看看:)谢谢。我怀疑会话不会被共享,但方法“getHttpServletRequest”给了我一些希望:)我认为servlet是一个portlet,我只是推迟了这个测试,因为在localhost中很难实现,因为我使用的是单个portlet,而不是整个门户,所以我无法创建不同的页面来导航到另一个……我尝试使用request.setAttribute(“param1”,“test1”)但我也不明白。如何轻松设置请求参数?请求对象不允许setParameter()调用,我刚刚读到了构建包装器的相关内容……我还尝试了response.addCookie(),但它也无法访问portlet:(请求参数,而不是属性。您可以构造一个包含参数的URL,而不是请求。但该URL参数将作为GET调用发送,这是我想要避免的。不是吗?我正在使用portlet到portlet的解决方案,让我们看看:)如果不阅读答案下的所有注释,编辑并不能使情况更清楚(尽管如此,我还是感到困惑而不是清楚)。我建议从完整的业务需求和您迄今为止所做的工作开始另一个问题。就我而言,我正在考虑回答的最初问题,更新是一个单独的问题。但请不要只是复制/粘贴部分,而是将您的需求描述与代码一起提供。编辑不会在不阅读我的答案下的所有评论的情况下,让情况更清楚(即使这样,我也比清楚更困惑)。我建议从完整的业务需求和您迄今为止所做的事情开始另一个问题。就我而言,我正在考虑最初的问题answ