Liferay Vaadin bootstrap内容编码错误

时间:2017-03-01 11:50:35

标签: liferay vaadin

我试图将我们的Vaadin porlets转换为来自portlet自己的Web应用程序的主题,widgetset等,而不是来自ROOT(Liferay)应用程序,但是我遇到了内容编码问题。

我已添加到portlet.xml

<init-param>
    <name>vaadin.resources.path</name>
    <value>PORTLET_CONTEXT</value>
</init-param>

和web.xml

<servlet>
    <servlet-name>VaadinServlet</servlet-name>
    <servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>VaadinServlet</servlet-name>
    <url-pattern>/VAADIN/*</url-pattern>
</servlet-mapping>

portlet无法启动,因为它们无法加载{WEB_APP} /VAADIN/vaadinBootstrap.js?v.7.7.7

如果我尝试在Firefox中手动加载js文件,我得到的错误是

内容编码错误

您尝试查看的页面无法显示,因为它使用的是无效或不受支持的压缩形式。

请与网站所有者联系,告知他们此问题。

如果我使用wget加载URL,它可以正常工作并下载bootstrap.js文件。

我们有Liferay 6.2EE和Vaadin 7.7.7

1 个答案:

答案 0 :(得分:1)

我设法解决了这个问题。似乎VaadinServlet检查gzip头,如果找到则返回文件的.gz版本。随后由HTTP服务器再次进行gzip压缩。解决方案是覆盖Servlet并禁用gzip代码。

<servlet>
    <servlet-name>VaadinServlet</servlet-name>
    <servlet-class>com.foo.MyVaadinServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>VaadinServlet</servlet-name>
    <url-pattern>/VAADIN/*</url-pattern>
</servlet-mapping>

然后创建了一个这样的自定义Servlet,我总是为allowServePrecompressedResource返回false。

package com.foo;

import javax.servlet.http.HttpServletRequest;

import com.vaadin.server.VaadinServlet;

public class MyVaadinServlet extends VaadinServlet {

    @Override
    protected boolean allowServePrecompressedResource(HttpServletRequest request, String url)
    {
        return false;
    }
}