PortalUtil.getOriginalServletRequest和PortalUtil.getHttpServletRequest有什么区别?(问题涉及IT技术)

4

I want to know the difference between

PortalUtil.getOriginalServletRequest(portletRequest) 

and

PortalUtil.getHttpServletRequest(portletRequest).
2个回答

5
尽管该问题已有一个被接受的答案,但我认为还有值得思考的地方:有时您需要通过HttpServletRequest的接口传递请求,因为某些接口要求如此。这将保留所有PortletRequest的名称混淆(例如,您可以调用getParameter(“name”)而无需自己解除名称混淆)。
另一方面,有时您可能想使用一个技巧,在实际的(“原始”)HttpServletRequest被混淆之前获取一个实际未混淆的参数。
这就是您使用两种方法的原因:只需适应接口即可从原始Http级别获取实际数据。

4

查看Liferay 6的源代码(我假设你说的是6),你可以看到PortalUtil.getOriginalServletRequest的作用,我已经将代码放在下面:

public HttpServletRequest getOriginalServletRequest(
    HttpServletRequest request) {

    HttpServletRequest originalRequest = request;

    while (originalRequest.getClass().getName().startsWith(
                "com.liferay.")) {

        // Get original request so that portlets inside portlets render
        // properly

        originalRequest = (HttpServletRequest)
            ((HttpServletRequestWrapper)originalRequest).getRequest();
    }

    return originalRequest;
}

正如评论所说,“获取原始请求,以便嵌套的门户内部渲染正确”。这种情况可能只适用于嵌套门户或类似情况。大多数情况下,您只需要使用:

PortalUtil.getHttpServletRequest(portletRequest);

我希望这有所帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接