- 浏览: 5029016 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (2844)
- java (1094)
- hadoop (37)
- jvm (39)
- hbase (11)
- sql (25)
- 异常 (83)
- div css (6)
- 数据库 (95)
- 有趣的code (15)
- struts2 (6)
- spring (124)
- js (44)
- 算法 (65)
- linux (36)
- hibernate (7)
- 中间件 (78)
- 设计模式 (2)
- 架构 (275)
- 操作系统 (91)
- maven (35)
- tapestry (1)
- mybatis (9)
- MQ (101)
- zookeeper (18)
- 搜索引擎,爬虫 (208)
- 分布式计算 (45)
- c# (7)
- 抓包 (28)
- 开源框架 (45)
- 虚拟化 (12)
- mongodb (15)
- 计算机网络 (2)
- 缓存 (97)
- memcached (6)
- 分布式存储 (13)
- scala (5)
- 分词器 (24)
- spark (104)
- 工具 (23)
- netty (5)
- Mahout (6)
- neo4j (6)
- dubbo (36)
- canal (3)
- Hive (10)
- Vert.x (3)
- docker (115)
- 分布式追踪 (2)
- spring boot (5)
- 微服务 (56)
- 淘客 (5)
- mesos (67)
- php (3)
- etcd (2)
- jenkins (4)
- nginx (7)
- 区块链 (1)
- Kubernetes (92)
- 驾照 (1)
- 深度学习 (15)
- JGroups (1)
- 安全 (5)
- 测试 (16)
- 股票 (1)
- Android (2)
- 房产 (1)
- 运维 (6)
- 网关 (3)
最新评论
-
明兜3号:
部署落地+业务迁移 玩转k8s进阶与企业级实践技能(又名:Ku ...
Kubernetes系统常见运维技巧 -
q328965539:
牛掰啊 资料收集的很全面
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS) -
guichou:
fluent挂载了/var/lib/kubelet/pods目 ...
kubernetes上部署Fluentd+Elasticsearch+kibana日志收集系统 -
xu982604405:
System.setProperty("java.r ...
jmx rmi 穿越防火墙问题及jmxmp的替代方案 -
大漠小帆:
麻烦问下,“获取每个Item相似性最高的前N个Item”,这个 ...
协同过滤推荐算法在MapReduce与Spark上实现对比
概述
现在的系统都趋向于富客户端,客户端的逻辑很多是Javascript来完成的,这样导致了JavaScript文件数量的增多,加大了对网络带宽的需求。JAWR是一个java项目的javascript和CSS集成和压缩工具,提供如下的功能:
1. 对网络交互的数据进行压缩,比如对JS,CSS,图片等。通过去除空行,空格,换行符,注释,变量名混淆可以大大减少JS和CSS文件大小。常用的压缩工具有JSMin, YuiCompressor,Packer,Microsoft Ajax Minifier和UglifyJS。对于第三方的JS,我们可以预先对其压缩。但对于自己开发的JS,为了可读性和可维护性,我们只能在项目部署的时候压缩。JAWR默认的JS压缩器为JSMIN,CSS的压缩器为CSS Compressor,可选的配置为YuiCompressor(支持JS和CSS)。
2. 可以合并所有的JS文件,合并所有的CSS文件。我们知道浏览器下载一个10K的文件,比下载10个1K的文件的速度要快很多,因为浏览器和服务端每次交互都会发送Request Header,服务器响应也会有Response Header,另外下载一个文件只需要建立一次网络连接,而10个文件则要建立10次网络连接,这个比较耗时。
3. 对图片Base64编码嵌入HTML页面。减少网络交互次数。
如何使用JAWR
1. 修改web.xml文件,加入如下代码:
<servlet>
<servlet-name>JavascriptServlet</servlet-name>
<servlet-class>net.jawr.web.servlet.JawrServlet</servlet-class>
<init-param>
<param-name>configLocation</param-name>
<param-value>/jawr.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JavascriptServlet</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>JavascriptServlet</servlet-name>
<servlet-class>net.jawr.web.servlet.JawrServlet</servlet-class>
<init-param>
<param-name>configLocation</param-name>
<param-value>jawr.properties</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet>
<servlet-name>CSSServlet</servlet-name>
<servlet-class>net.jawr.web.servlet.JawrServlet</servlet-class>
<init-param>
<param-name>configLocation</param-name>
<param-value>jawr.properties</param-value>
</init-param>
<init-param>
<param-name>type</param-name>
<param-value>css</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JavascriptServlet</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CSSServlet</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
类似地,可以添加处理CSS和Image的Servlet。
2. 添加配置文件jawr.properties,我们可以在该配置文件中修改JAWR默认的配置选项以及定义Javascript Bundle和CSS Bundle。
3. 在JSP使用JAWR提供的tag来导入Javascript Bundle和CSS Bundle。比如<jwr:script src="${request.contextPath}/bundles/test.js"></jwr:script>
JAWR的工作流程(以JS为例)
1. Web服务器启动时,JAWR会按照配置选项来决定是否压缩JS,打包成Bundle文件,并将JS缓存到内存。
2. 翻译JSP时,将JS的引用转换为JAWR生成的JS Bundle URL,JAWR会将Bundle内容的HashCode作为URL Address的前缀,这样当JS文件发生变化时,JS的URL也会发生变化,客户端会从服务器端获取最新的JS。
3. 客户端请求下载JS文件时,Servlet将gzip压缩(可以配置)后的JS和CSS文件传送给浏览器。
4. 如果客户端请求的资源相对于客户机本地存储的缓存副本并没有发生变化,JAWR会返回Response Code:304 Not Modified, 这样服务端不会返回资源的内容,客户端会直接读取本地缓存副本。
JAWR常用配置选项
1. jawr.debug.on 可选值为true和false,为true时,JAWR不会对资源打包。反之则会对资源打包,压缩。
2. jawr.gzip.on 可选值为true和false,为true时,JAWR会根据浏览器是否支持gzip格式数据来对资源进行gzip压缩。反之,JAWR不会gzip压缩资源。
3. jawr.url.contextpath.override HTTP协议时,JS Bundle后URL地址前缀
4. jawr.url.contextpath.ssl.override HTTPS协议时,JS Bundle后URL地址前缀,可以配置为http://prefix形式,通过这样的配置,可以绕过某些情况下HTTPS页面不缓存JS和CSS的问题,但IE浏览器会给出如下的提示:
5. jawr.js.bundle.factory.bundlepostprocessors 配置JS bundle级别的postprocessor,比如我在项目上配置为YUI,这样JAWR使用YuiCompressor作为JS压缩器。
6. jawr.css.bundle.factory.bundlepostprocessors 同上,只是配置CSS bundle级别的postprocessor
如果在weblogic平台使用YUI压缩器,我们需要修改weblogic jar包的加载顺序,因为YUI使用到了Rhino(JS解释器),weblogic10本身已经包含了老版本的Rhino。我们需要修改jar包的加载顺序确保系统使用的是新版本的JS解释器。
jawr是一个可调节的Javascript和CSS的包装解决方案,允许迅速开发单独的模块资源文件。开发模式下,开发人员可以使用大量的分散的JavaScript文件,然后Jawr以可配置的方式将其捆绑成一个或几个文件。
通过使用标签库,Jawr允许开发和生产模式使用相同的不变的页面。 Jawr也缩减并压缩文件,以减少页面加载时间。
Jawr使用简单的.properties属性描述符,除应用于标准的Java Web应用外,也可以被用于 Facelets 和 Grails 应用。
众所周知,下载一个大文件要比下载2个较小的文件速度快,因为增加了HTTP协议的交互时间,而事实上,大多数浏览器只保留两个打开的连接,在任何给定的时间内相对相同的主机。 Jawr将减少加载页面的请求数量和传输到客户端的数据量,实现加载时间大幅改善。 通过简单的配置文件,可将资源分配到最适合的网站使用模式。未被添加到捆绑中的文件也有利于缩减和压缩效果(如果未声明捆绑包,Jawr将作为一个易于配置的资源压缩机)。
一个JSP标签库(Facelets也支持)用于在网页中引入资源。 在开发模式下,标签生成映射到捆绑的每个资源的<script>和<style>标签。 在生产模式下,标签生成一个链接指向包文件。 因此,从开发切换到生产模式,无需改变页面代码,。
伴随着利用复杂的JavaScript实现更丰富的客户端界面的不断增加的趋势,使用Jawr允许模块分布在不同的文件中将缓解开发过程的压力,而不用担心应用将如何为客户端服务。
Jawr的替代方法如下:
- 开发符合部署模式的集各项功能于一身的脚本文件。 也就是说,将所有模块塞进几个文件中。 版本控制变得难以管理,很难找到一个需要改变组件。 随着项目的发展,代码变得几乎不可能缩减。
- 使用构建脚本连接并压缩文件,这迫使开发人员,即使轻微的代码变化,测试时都将重新构建和部署整个应用。
Jawr提供了两全其美的方式,结合强大的捆绑-缩减--压缩提供生产模式下的最佳服务方案与快速变化-保存-测试周期的快速开发模式。
您可在这里 下载Jawr的最新版本 。 此外,可检出 快速入门教程 ,看看在您的项目中它是多么容易使用。
而且不要忘记检查 常见问题中 的提示和故障解决方法。
特点
- 自由和开放源码 :Apache 2.0许可证下发布,Jawr可用于免费或经修订后用于商业和非商业用途。
- 易于安装 :使用Jawr时仅需在部署描述符中声明一对servlet,创建一个简单的.properties配置文件,并使用Jawr标签库导入CSS和JavaScript资源到你的页面。 完整的安装仅需几分钟,在一段时间内无需进行任何修改或很少修改。
- 轻量级 :打包和压缩是在服务器启动时一次完成,所以没有开销要求。 另外,可使用缓存组件,默认直接从内存中而非文件系统中载入资源。
- 内置的缩减和后处理(postprocessor ) :Jawr包括JSMin和YUI压缩机,都来自雅虎。 一个自定义的CSS 缩减器也包括其中,虽然YUI 压缩器也可以用于CSS。 对于每一个绑定包,启动时自动执行一个可定制的后处理过程链。CSS文件中相对URL将被后处理器改写,以便工作于不同的相对路径。 也很容易创建自定义后处理器,以便在部署时修改您的js和css文件。 了解更多 。
- 第三方框架集成 :Jawr可与 DWR 、 Spring、JSF、 Facelets、 Wicket 、Commons Validator(with Struts) , 以及 Grails一道使用, 它也可以很容易地插入 你自己的基础设施。
还有更多的功能,请检查 功能列表页 的完整列表。
jawr站点:http://jawr.java.net/
发表评论
-
Kryo 使用指南
2017-12-05 20:14 20071、Kryo 的简介 Kryo 是一个快速序列化/ ... -
spring session序列化问题排查
2017-12-01 19:07 6264严重: Servlet.service() for ser ... -
利用junit对springMVC的Controller进行测试
2017-11-30 16:26 1441平时对junit测试service/D ... -
Java内存模型之重排序
2017-11-29 09:44 858在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重 ... -
pmd spotbugs 文档
2017-11-28 10:02 0https://pmd.github.io/pmd/pmd ... -
PMD、FindBug、checkstyle、sonar这些代码检查工具的区别?各自的侧重点是什么?
2017-11-28 10:01 2142可以说都是代码静态分析工具,但侧重点不同。pmd:基于源代码 ... -
阿里巴巴Java代码规约插件p3c-pmd使用指南与实现解析
2017-11-23 17:09 1602阿里巴巴Java代码规约插件安装 阿里Java代码规 ... -
静态分析工具PMD使用说明 (文章来源: Java Eye)
2017-11-23 17:07 1140质量是衡量一个软件是否成功的关键要素。而对于商业软件系统,尤 ... -
MyBatis 使用 MyCat 实现多租户的一种简单思路
2017-11-20 18:27 2836本文的多租户是基于多数据库进行实现的,数据是通过不同数据库进 ... -
Spring+MyBatis实现数据库读写分离方案
2017-11-20 17:15 1075百度关键词:spring mybatis 多数据源 读写分离 ... -
数据库连接池druid wallfilter配置
2017-11-20 11:38 1335使用缺省配置的WallFilter <be ... -
java restful 实体封装
2017-11-16 09:47 1588package com.mogoroom.bs.commo ... -
dak
2017-11-15 11:21 0package zzm; import jodd.ht ... -
Java内存模型之从JMM角度分析DCL
2017-11-15 09:35 635DCL,即Double Check Lock,中卫双重检查锁 ... -
Java 打印堆栈的几种方法
2017-11-14 09:36 4741java 中可以通过 eclipse 等工具直接打印堆栈, ... -
Servlet Session学习
2017-11-10 09:25 548HTTP 是一种"无状 ... -
浅析Cookie中的Path与domain
2017-11-10 09:26 1057Path – 路径。指定与co ... -
入分析volatile的实现原理
2017-11-08 09:47 683通过前面一章我们了解了synchronized是一个重量级的 ... -
Spring MVC-ContextLoaderListener和DispatcherServlet
2017-11-15 09:35 681Tomcat或Jetty作为Servlet ... -
搭建spring框架的时候,web.xml中的spring相关配置,可以不用配置ContextLoaderListener(即只配DispatcherServl
2017-11-07 18:27 1432搭建spring框架的时候,web.xml中的sprin ...
相关推荐
结合标签 "开源项目",我们可以推测这两个压缩包都是开放源代码的,这意味着它们遵循某种开源许可协议,允许社区成员自由使用、修改和分发代码。开源项目的优点在于它们往往有活跃的社区支持,可以持续更新和完善,...
【标题】"jawr-spring-2.0.x-integration-test-3.5.zip" 提供的是一个集成测试包,主要针对Jawr与Spring框架的2.0.x版本进行整合,版本号为3.5。Jawr是一款强大的Java Web资源打包工具,它能够有效地优化、管理和...
6. **集成开发**:由于"common-jawr.zip"与GWT相关,我们可以推测这个压缩包可能包含了使GWT应用能够利用Jawr优化资源的配置和代码,使得开发者能够轻松地在GWT项目中整合Jawr的功能。 这些知识点对于想要使用GWT...
【标签】"开源项目"表明了hawtio和jawr都是遵循特定开源许可协议的项目,这意味着它们的源代码可供公众查看、使用、修改并分发。开源项目通常由全球社区的开发者共同维护和改进,鼓励创新和协作。 在"压缩包子文件...
其次,Spring框架是Java开发领域中广泛使用的后端框架,以其依赖注入(DI)和面向切面编程(AOP)著称。在“Book Stationery”中,Spring为系统提供了服务层和数据访问层的支持,包括bean管理、事务控制、数据访问...
在这个"文具申请系统部分源代码"中,我们可以看到开发者使用了一些关键的技术栈,包括ExtJS、Spring、DWR、Jawr和JAXB,以及可能涉及到的Apache POI库。接下来,我们将深入探讨这些技术及其在系统中的作用。 首先,...
《EXTJS Book Stationery源代码》是一份涵盖了多种IT技术的综合项目,主要涉及了Ajax、ExtJS、DWR、Spring、Jawr、POI和JAXB等关键组件。让我们逐一深入探讨这些技术及其在项目中的应用。 1. **Ajax**:Ajax...
**Spring** 是一个广泛使用的Java企业级应用框架,提供依赖注入(DI)和面向切面编程(AOP)等功能。Spring框架的核心在于其IoC(Inversion of Control)容器,它负责管理对象的生命周期和依赖关系。在本项目中,...
描述中的"自己做的一个小项目,使用Extjs和spring,dwr, jawr, poi jaxb"揭示了项目的技术栈。Extjs是一个流行的JavaScript框架,用于构建富客户端的Web应用程序。Spring是一个全面的Java企业级应用开发框架,提供了...
同时,"通过jawr包装的角度ui指令"是指使用JAWR(Java Applet Wrapper for Resources)工具来管理和打包TinyMCE编辑器资源。JAWR是一个Java Web应用的资源管理框架,它可以将CSS、JavaScript、图片等静态资源进行...
1. **Spring**:这是一个广泛使用的Java应用框架,用于构建后端服务,提供了依赖注入、AOP(面向切面编程)等特性,使得开发和维护更为简洁。 2. **Jawr**:这是一个用于优化前端资源的Java库,主要用于合并和压缩...
2. **Spring**:这是一个广泛使用的Java企业级应用框架,用于实现依赖注入和面向切面编程。Spring框架可能被用来管理系统中的bean,处理事务,以及提供数据访问接口。 3. **Jawr**:这是一个用于优化Web资源(如CSS...
7. **CSS处理器**:解析和应用CSS样式的组件,如CSSParser或Jawr。 8. **其他辅助库**:如异常处理、日志记录、线程管理等通用功能的库。 使用这些JAR文件时,需要注意以下几点: 1. **版本兼容性**:确保所使用的...
WebRex目录包括WebRex标签库在JSP页面中定义一个插槽将资源分配到插槽其他资源类型的使用WebRex Java API 获取单个资源的URL 获取聚合结果的URL 将资源添加到页面上的现有插槽中常问问题为什么会出现异常:java.lang...
7. **框架与库**:Java社区中存在许多库和框架,如JAWR(Java Accessibility Wrapper)和JACOB(Java Accessibility Bridge),它们可以帮助开发者更容易地实现无障碍特性。 阿尔卡特的无障碍项目可能涉及到开发...