AEM 6.0中的html缩小

时间:2017-09-11 09:43:29

标签: jsp jstl aem minify sling

我正在尝试使用Maven中的html压缩器标记库来进行HTML缩小https://mvnrepository.com/artifact/com.googlecode.htmlcompressor/htmlcompressor/1.4

我将以下依赖项添加到pom.xml

<dependency>
    <groupId>com.googlecode.htmlcompressor</groupId>
    <artifactId>htmlcompressor</artifactId>
    <version>1.4</version>
</dependency>
<dependency>
    <groupId>com.yahoo.platform.yui</groupId>
    <artifactId>yuicompressor</artifactId>
    <version>2.4.6</version>
</dependency>

以下是我的header.jsp

<%@include file="/apps/itchotelsonline/components/global.jsp"%>
<%@page import ="com.itc.hotels.services.ItcOnlineConfigurationService" %>
<%@ taglib uri="http://htmlcompressor.googlecode.com/taglib/compressor"
    prefix="compress"%>
<%
        ItcOnlineConfigurationService onlineConfigService = sling.getService(com.itc.hotels.services.ItcOnlineConfigurationService.class);
        if(onlineConfigService != null){
            String rootPagePath = onlineConfigService.getRootPagePath();
            slingRequest.setAttribute("rootPagePath",rootPagePath);
        }
%>
<compress:html removeIntertagSpaces="true" enabled="true" removeComments="false" compressJavaScript="true" yuiJsDisableOptimizations="true">
<cq:include path="${rootPagePath}/jcr:content/header" resourceType="itchotelsonline/components/content/header"/>

<div class="modal fade in new-modal" id="loginOverlayPopup" tabindex="-1" role="dialog" aria-labelledby="" aria-hidden="true" style="display: none;">
       <div class="modal-dialog">
           <!-- Modal content-->
           <div class="modal-content">

               <div class="modal-body text-center">
                   <center>
                       <p><strong id="loginInactivityPopUp"> You are Logged Out due to Inactivity! </strong></p>
                   </center>
                   <div class="clear"></div>
                   <div class="newBook clearfix">
                       <button type="button" class="btn btn-default" id="loginInactivityBtn" data-dismiss="modal" onclick="resetLoginInactivityPopUp();">Close</button>
                   </div>
               </div>
           </div>
       </div>
       </div>

在其中我添加了压缩html行和taglib。

<%@ taglib uri="http://htmlcompressor.googlecode.com/taglib/compressor"
    prefix="compress"%>
<compress:html removeIntertagSpaces="true" enabled="true" removeComments="false" compressJavaScript="true" yuiJsDisableOptimizations="true">

以下是我的footer.jsp

<%@include file="/apps/itchotelsonline/components/global.jsp"%>
<%@page import ="com.itc.hotels.services.ItcOnlineConfigurationService" %>
<%
        ItcOnlineConfigurationService onlineConfigService = sling.getService(com.itc.hotels.services.ItcOnlineConfigurationService.class);
        if(onlineConfigService != null){
            String rootPagePath = onlineConfigService.getRootPagePath();
            pageContext.setAttribute("rootPagePath",rootPagePath);
        }
%>
<cq:include path="${rootPagePath}/jcr:content/footer" resourceType="itchotelsonline/components/content/footer"/>
</compress:html>

我结束了这个。

在给maven build clean安装后,我收到以下错误

org.apache.sling.scripting.jsp.jasper.JasperException:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:http://htmlcompressor.googlecode.com/taglib/compressor     at org.apache.sling.scripting.jsp.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:51)

我尝试重新启动AEM实例并刷新捆绑包,但尚未解决此问题。 我正在尝试在我的AEM网站上实现HTML缩小。我已经检查了Day CQ HTML Library Manager,但它只压缩CSS和JS,而不是压缩通过AEM中的JSP呈现的HTML。 在AEM中是否有可以使用的替代方法,或者可以使用html压缩器而不会出现上述错误? 请提前建议并提前致谢。

****新编辑******

我将这个库导入为OSGI包但现在它引发了一个类型转换异常。我发现htmlcompressor没有压缩jsps但需要纯html进行压缩,页面速度mod是一种可能的选择,但CSS和JS已经被缩小了Day CQ HTML Library Manager,我们还通过更改httpd.conf中的缓存配置来利用浏览器缓存。我唯一的要求是真正的HTML缩小。是否有任何可以与AEM集成并且用于相同的库?

1 个答案:

答案 0 :(得分:2)

  

无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:http://htmlcompressor.googlecode.com/taglib/compressor

检查http://localhost:4502/system/console/status-jsptaglibs中是否存在htmlcompressor taglib。看起来HTML压缩器JAR不是OSGi Bunde,或者您还没有将它正确导入到您的项目中。你不能只是添加一个Maven依赖项并期望任何JAR在OSGI容器中工作,但我不会在这里覆盖它,因为那里有大量的信息。

使用标记库压缩HTML对我来说听起来并不理想。在我看来,最好在位于AEM实例前面的Web服务器上安装Google mod_pagespeed之类的模块。

它将为您省去必须在代码中指定该标记的麻烦,并且还将对渲染的标记执行更彻底的优化(包括内联Javascript等)。