我试图将我们的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
答案 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;
}
}