前些天接手了公司一个网站的维护和优化,考虑到有的动态页面中有太多的数据库操作,所以要将其进行静态化,这也是网站优化升级的一个必经的步骤。
由于是菜鸟刚刚上阵,起初觉得无从下手,于是在ITeye发了一篇求助,通过一些老鸟的帮助再加上我自己的思考,从而确定了解决思路,并且最终成功搞定。下面说一下方案和步骤:
1:封装一个httpclient,并每隔一段时间向服务器发一次请求(当然请求的是需要静态化的动态页面)
2:以流的形式获取响应报文,并将其写到本地文件且命名为"***.html"
3:配置过滤器,将对该动态页面(***.jsp)的请求转发到转化后的静态页面(***.html)
方案确定了,然后是查对应的技术有哪些,这里面主要有两点,一个是httpclient,一个是定时器。
通过各种搜索,我确定了用Apache的httpclient,然后定时器用quartz。然后去官网查看两者的用法,一步步搞定,下面我贴出一部分代码
Httpclient:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
public class MyHttpClient {
private static String urlString = "http://www.ncpqh.com/";
private static String fileUrlString = "D:\\forTest\\test.html";
public void fetchAndSave(){
byte[] content = get(urlString);
saveFile(content, fileUrlString);
}
private byte[] get(String url){
HttpClient client = new HttpClient();
GetMethod getMethod = new GetMethod(url);
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));
try {
int statusCode = client.executeMethod(getMethod);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + getMethod.getStatusLine());
}
InputStream inputStream = getMethod.getResponseBodyAsStream();
byte[] bytes = new byte[1024 * 2000];
int index = 0;
int count = inputStream.read(bytes, index, 1024 * 2000);
while (count != -1) {
index += count;
count = inputStream.read(bytes, index, 1);
}
return bytes;
} catch (HttpException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
getMethod.releaseConnection();
}
}
private void saveFile(byte[] content,String fileUrl){
File htmlFile = new File(fileUrl);
if (content == null || content.equals("")) {
System.out.println("There is no content");
}else {
try {
if (htmlFile.exists()) {
htmlFile.delete();
htmlFile.createNewFile();
//这里有个缺陷,如果恰巧删除的时候有人访问的话,对用户来说会很不友好
}
FileOutputStream fileOutputStream = new FileOutputStream(htmlFile);
fileOutputStream.write(content);
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
定时器的部分比较简单quartz官网有很详细的demo,我就不贴代码了
下面是过滤器的部分,碰巧的是我需要静态化的页面只有首页,所以只需要在web.xml里配置一下欢迎页面就可以了,所以就不用过滤器了。但是如果不是首页的是需要配置过滤器的。
好了,到这里静态化的工作就完成了,我这次的收获是这样的:对于毫无头绪的问题,要理性的去分析,一步一步来,不能急于求成。
分享到:
相关推荐
包括使用freemarker和velocity两种技术来实现静态化。压缩包里面的文件有说明文档,说得很仔细,特别适合入门级别的人参考。还有freemarker和velocity开发所需要的jar包和插件。
JSP页面静态化总结_动态页面变为静态页面以减少访问数据库的次数提高速度.zip
jsp页面静态化介绍,首先说说为什么要静态化。 对于现在的Web Application来说,动态页面是占有绝对高的地位的,正因为有了动态化,才有了现在Web的丰富多彩,但是如同所有别的事实一样,好处往往都是有代价的。
前台页面的静态化就有利于SEO,所以这个问题摆在了我的面前,在网上一搜,关于这方面的资料不是很多,又很杂,关于这方面的知识,越来或多的程序员将会碰到,原来项目中这部分静态化的功能主要由我来做的,现在我将...
把你的JSP动态页面静态化。把你的JSP动态页面静态化。把你的JSP动态页面静态化。把你的JSP动态页面静态化。
JSP生成静态HTML页面的最为普遍的三种方法: 前两种比较好理解,看多自然明白,这第三种需对Filter对象进一步理解。
有兴趣的可以研究一下。方法有很多种实现!
下载后把文件解压到根目录,help目录下三个文件
如果有朋友想对大量访问数据库的页面进行处理,不防研究一下这个程序,基本上可以,供大家参考
最近一直在研究动态页面生成,汇总了网络的有效资源、方法,在这里分享一下,希望对后来做静态化的同仁有所帮助。也包括自己公司实际成熟的设计方案。
NULL 博文链接:https://liu0107613.iteye.com/blog/394825
【资源介绍】:JSP静态化(已测试),多种方法 【备注】: 亲爱的下载用户: 谢谢您光临CSDN阿Q资源中心! 本中心发布的资源均是经过本人测试通过后才发布的,请放心下载。如果您有不清楚的问题或者建议,...
Url Rewrite 实现jsp页面伪静态化_凌风_.doc
myeclipse做的动态页面转化静态页面
freeMarker的简单应用,适合入门人了解,导入myeclipse发布到tomact即可应用
这个程序可以将一个动态的jsp页面转成静态的,这样子可以提高页面的访问效益,如果这个页面不常改变,用我这种方式便是一个好的选择。
使用velocity freemarke 模版实现页面静态化,有具体代码实现例子
jsp 通过模板生成 shtml 可生成静态shtml首页页面 列表页即时生成[信息添加/删除/更新时,列表页自动更新] 静态分页功能* 按当前日期生成对应目录[方便管理和日后维护]
1.页面静态化 html 解决方案:(Velocity/Freemarker)Velocity可编程式配置使用相对路径可以解决移植性。 2.缓存技术(当数据更新比较快,几秒钟更新一次,或者需要实时反映数据变化,或者页面具有很多种风格,不...