服务器与数据库频繁地进行交互,给数据库造成很大的压力,会出现数据库的瓶颈(打开页面时间缓慢,数据库报错)。为了避免频繁访问数据库这种情况,我们需要进行性能的优化
1)如果内容更新不是很频繁,我们适合采用网页静态化技术生成内容页面
2)如果内容经常更新(总有一些空闲时间),我们适合使用缓存技术(OSCache,JbossCache等)提供系统性能。
3)内容需要实时查看的话,我们比较适合数据源技术(减少跟数据库连接次数)和二级缓存技术(不能使用update语句,update语句不会更新二级缓存里面的数据)。
巴巴运动网运用到了以上三种技术,我们采用Velocity(模板技术)来实现页面的静态化和使用OSCache来实现页面的缓存。下面我们首先对Velocity技术的学习:
1.Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象
2.Velocity的应用:
1)加入Velocity需要的Jar文件velocity-1.6-dep.jar和/lib/log4j-1.2.12.jar
2)配置Velocity:类路径下加入velocity.properties
3)编写应用实例
3.在Velocity需要对日期进行格式化时,需要加入Jar文件velocity-tools-generic-1.4.jar
4.得到项目的根目录路径:new File(“”).getAbsolutePath()
5.null处理:在$后添加!号,如:$!title
下面我们来学习一下OSCache技术:
1. OSCache是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能
2.OSCache的配置:
1)加入OSCache需要的Jar文件oscache.jar和/lib/commons-logging.jar
2)把oscache安装目录下的/etc/oscache.properties 文件放入 /WEB-INF/classes目录.开发阶段,我们可以把该文件放置在src目录
3.使用OSCache作页面局部缓存
①标签<cache></cache>来进行页面的局部缓存
②缓存的key将以请求的URI+查询字串组成,缓存默认存放在application范围,缓存时间默认1小时
③可以通过scope属性设置缓存的存放范围,time属性设置缓存的存放时间,refresh属性设置缓存内容过期是否清除
④<cache:flush scope="application" />清除application范围内的所有缓存
4. 使用OSCache作页面全局缓存
页面全局缓存将使用Filter实现:
<filter>
<filter-name>CacheFilter</filter-name>
<filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class>
<init-param>
<param-name>time</param-name>
<param-value>60</param-value>
</init-param>
<init-param>
<param-name>scope</param-name>
<param-value>application</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CacheFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
缓存的key将以请求的URI+查询字串组成,如果你访问/oscache/index.jsp?name=ttt和/oscache/index.jsp?name=ppp将得到两份缓存。缓存是在初次访问页面时进行的,后续的请求将会返回缓存中的内容。缓存中存放的内容为页面返回给用户的html源代码。