Wicket9如何在发送给用户前压缩(最小化)HTML标记?
Wicket HTML 压缩配置方案
有对应的配置方式,你可以通过注册全局响应过滤器实现HTML标记的输出压缩,无需修改原有业务代码,具体实现如下:
1. 实现自定义HTML压缩过滤器
你可以直接复用成熟的HTML压缩工具类实现压缩逻辑,避免自己处理特殊标签(pre/script/textarea等)的边界问题:
import org.apache.wicket.request.IRequestHandler; import org.apache.wicket.request.cycle.RequestCycle; import org.apache.wicket.request.http.WebResponse; import org.apache.wicket.response.filter.IResponseFilter; import org.apache.wicket.util.string.AppendingStringBuffer; import com.googlecode.htmlcompressor.compressor.HtmlCompressor; public class HtmlCompressFilter implements IResponseFilter { private final HtmlCompressor compressor = new HtmlCompressor(); public HtmlCompressFilter() { // 按需配置压缩规则 compressor.setRemoveComments(true); // 移除HTML注释 compressor.setRemoveIntertagSpaces(true); // 移除标签间多余空格 compressor.setCompressJavaScript(true); // 同步压缩页面内联JS compressor.setCompressCss(true); // 同步压缩页面内联CSS } @Override public AppendingStringBuffer filter(AppendingStringBuffer responseBuffer) { WebResponse response = (WebResponse) RequestCycle.get().getResponse(); // 仅处理HTML类型响应,避免误伤其他资源 if ("text/html".equals(response.getContentType())) { String compressedContent = compressor.compress(responseBuffer.toString()); return new AppendingStringBuffer(compressedContent); } return responseBuffer; } }
2. 注册过滤器到应用全局配置
在你应用的init()方法中添加过滤器注册即可,和原有JS/CSS压缩配置兼容:
@Override protected void init() { super.init(); // 原有JS/CSS压缩配置 getResourceSettings().setCssCompressor(new MyCssCompressor()); getResourceSettings().setJavaScriptCompressor(new MyJavaScriptCompressor()); // 新增HTML压缩过滤器注册 getRequestCycleSettings().addResponseFilter(new HtmlCompressFilter()); }
如果不想引入第三方依赖,你也可以自行实现压缩逻辑,只需要在filter方法中手动处理HTML内容的空格、换行、注释清理即可,注意不要修改pre、script、style、textarea等保留格式标签内的内容。
内容的提问来源于stack exchange,提问作者miroana
相关产品推荐
相关产品推荐

