Java PortalTil.getOriginalServletRequest和PortalTil.getHttpServletRequest之间有什么区别?

Java PortalTil.getOriginalServletRequest和PortalTil.getHttpServletRequest之间有什么区别?,java,liferay,portlet,Java,Liferay,Portlet,我想知道两者的区别 PortalUtil.getOriginalServletRequest(portletRequest) 及 查看Liferay 6的源代码(我假设您正在谈论6),您可以看到PortalTil.getOriginalServletRequest的功能,我将代码放在下面: public HttpServletRequest getOriginalServletRequest( HttpServletRequest request) { HttpServle

我想知道两者的区别

PortalUtil.getOriginalServletRequest(portletRequest) 


查看Liferay 6的源代码(我假设您正在谈论6),您可以看到PortalTil.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;
}
因此,正如注释所说,“获取原始请求,以便portlet中的portlet正确呈现”。您可能只需要在嵌套portlet或类似的情况下使用它。大多数情况下,您只需使用:

PortalUtil.getHttpServletRequest(portletRequest);

我希望这有帮助

尽管这个问题已经有了公认的答案,但我发现有一点值得思考:有时您希望通过HttpServletRequest的接口传递请求,因为某些接口需要它。这将保留PortletRequest的所有名称损坏(例如,您可以调用getParameter(“名称”),而不必自己取消名称损坏)

另一方面,有时您可能希望使用hack并在实际(“原始”)HttpServletRequest被破坏之前从中获取一个实际未混合的参数

这就是您使用这两种方法的目的:只需调整接口,而不是从原始Http级别获取实际数据

PortalUtil.getHttpServletRequest(portletRequest);