静态化的问题,在熟悉了Nginx、Vamish、squid、CDN等前端服务器,结合当前主流技术发现,对于springmvc就是为spring servlet拦截增加一个.html扩展名即可。
<servlet-mapping>
<servlet-name>springServlet</servlet-name>
<url-pattern>*.html</url-pattern><!--处理静态化à
</servlet-mapping>
<servlet-mapping>
<servlet-name>springServlet</servlet-name>
<url-pattern>*.action</url-pattern><!--处理动态请求à
</servlet-mapping>
这里需要解释一下。从原理上来讲,对于web服务器,你无论提交给它什么请求,他返回的都是hmtl文档:
因此,对于”a.html”请求来讲,你是真正的html文档也好,是servlet也好,对于访问者来讲都是一样的,因为返回的都是html文档。唯一区别是,原生态的html文档不需要servlet特别处理,会减轻服务器负担。但在当前的技术条件下,这已经不重要了,因为web服务器前端还有缓存服务器、反向代理服务器等。
对于前端服务器来讲,这个时候,访问”a.html”具体是不是原始的html文档已经不重要了,这也是该缓存方案的由来,方案的原理就是对于扩展名为.html的请求,前端高速缓存或nginx会为其缓存静态页面,从而实现静态化。这也是目前淘宝、京东等主流电商网站采用的技术。即简单又实用。
对于静态化请求来讲,生成静态化页面有两种方式,第一种就是第一次访问时,前端缓存服务器会为请求生成静态化页面并放在缓存区。第二种需要我们写一个小程序去主动刷新静态化的请求。此时,需要记下那些是静态化的请求,然后使用java里的httpclient去调用即可。
最后,其实对于前端服务器来讲”a.html”可以缓存,”a.action”、”a.do”等都是可以缓存的,这里只是为了取得概念上的一直,实际情况是,为了避免和原html文件冲突,最好采用.htm或shtml等扩展名。最主要的是要区分可静态化请求和动态化请求,并采用不同的方式来处理。