前几天由于公司需要、要求让我写一个类似hao123一样的导航网站。当时一头雾水的,心想不就是导航网站吗?全的是些静态的html标签。一百年都不会换一下的。有什么写的,可是刚刚有这样的想法头就告诉我,不可能会让写静态的html标签的、必须做成动态的可以维护的。
这下我放心了、其实写静态的我会累死的。随便一个导航网站全部下来也是上百个html文件的。我做成了动态可以维护的,将页面分成了几个部分。一是头、内嵌搜索框、头广告。名站导航。常用工具、还有底部广告、常用网站。以及地方服务网站。行业网站等……
很快我做完了动态的网址导航了。可是我发现一个不可忽视的问题。那就是所有页面的显示和下级的显示全都是动态的。
天哪 这那能用、仅仅一个导航网站不可能用户每次请求都来提交请求、再让服务器返回吧。那我不丢大人了。
于是页面静态化就成了义不容辞的责任了。刚开始我有点心虚。赶紧谷歌百度一下。结果全是些垃圾信息。怎么办、静下心来想想。静态化不就是把访问好的动态页面存放成静态的html文件吗?不就是一个访问。一个存储。再把动态链接替换成静态链接吗?
于是就有了下面这些代码了
这是生成静态页面的类 因为是建的main方法测试的所以全都是用的静态方法。具体视自己的情况用
提醒:修改动态链接。首先一定要在动态访问地址时设定规则。比如我这里所有的动态链接都包括".jspa?path="
比如href="secondpage.jspa?path=jiaoyu&id=2291"建立的html文件地址即位 /secondpage目录下的jiaoyu.html所以在匹配动态链接时需要将动态的链接也改为href="secondpage/iaoyu.html"
读取存放的html文件并且返回动态链接集合
在整个静态化过程中最重要的是根据自己的动态链接写出相应的正则表达式
我的正则是我同事帮写的。改改应该可以通用吧。
完成后可以做个压力测试
再写一个小程序,一边访问一边生成静态页面。
我的做过每妙100次访问同时生成。没有影响。
这下我放心了、其实写静态的我会累死的。随便一个导航网站全部下来也是上百个html文件的。我做成了动态可以维护的,将页面分成了几个部分。一是头、内嵌搜索框、头广告。名站导航。常用工具、还有底部广告、常用网站。以及地方服务网站。行业网站等……
很快我做完了动态的网址导航了。可是我发现一个不可忽视的问题。那就是所有页面的显示和下级的显示全都是动态的。
天哪 这那能用、仅仅一个导航网站不可能用户每次请求都来提交请求、再让服务器返回吧。那我不丢大人了。
于是页面静态化就成了义不容辞的责任了。刚开始我有点心虚。赶紧谷歌百度一下。结果全是些垃圾信息。怎么办、静下心来想想。静态化不就是把访问好的动态页面存放成静态的html文件吗?不就是一个访问。一个存储。再把动态链接替换成静态链接吗?
于是就有了下面这些代码了
这是生成静态页面的类 因为是建的main方法测试的所以全都是用的静态方法。具体视自己的情况用
提醒:修改动态链接。首先一定要在动态访问地址时设定规则。比如我这里所有的动态链接都包括".jspa?path="
比如href="secondpage.jspa?path=jiaoyu&id=2291"建立的html文件地址即位 /secondpage目录下的jiaoyu.html所以在匹配动态链接时需要将动态的链接也改为href="secondpage/iaoyu.html"
package service; import java.io.*; import java.net.URL; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 动态页面静态化 */ public class StaticHTMLFile { /** * @param dir 存放静态页面的本地文件路径 * @param page 生成html文件需要保存的绝对路径 * @param url_addr 所要生成的静态页的URL地址 * @return */ public static boolean PrintPage(String dir, String page, String url_addr) { URL url; String rLine = null; PrintWriter fileOut = null; InputStream ins = null; try { url = new URL(url_addr); ins = url.openStream(); BufferedReader bReader = new BufferedReader(new InputStreamReader(ins, "UTF-8"));// 获取编码为UTF-8的文件 File destFileDir = new File(dir); if(!destFileDir.exists()){ destFileDir.mkdirs(); } FileOutputStream out = new FileOutputStream(page); OutputStreamWriter writer = new OutputStreamWriter(out, "UTF-8"); fileOut = new PrintWriter(writer); // 循环取取数据,并写入目标文件中 while ((rLine = bReader.readLine()) != null) { String tmp_rLine = rLine; //System.out.println(rLine); int str_len = tmp_rLine.length(); if (str_len > 0) { fileOut.println(tmp_rLine); fileOut.flush(); } tmp_rLine = null; } url = null; return true; } catch (IOException e) { System.out.println("error: " + e.getMessage()); e.printStackTrace(); return false; } catch (Exception es) { System.out.println(es.getMessage()); return false; } finally {// 关闭资源 fileOut.close(); try { ins.close(); } catch (IOException ex) { // 关闭输入流出错 ex.printStackTrace(); } } } public static void main(String[] args) { // 生成首页 //静态页面要存放的根目录 String savepath="D:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps/daohang/"; //生成首页html的绝对路径 String filename ="D:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps/daohang/index.html"; //需要生成首页的访问地址 String forurl = "http://localhost:7001/daohang/index.jspa"; //生成二级和三级页面的跟url String baseurl = "http://localhost:7001/daohang/"; boolean saveindex = saveHtml(savepath, filename, forurl); if(saveindex){ saveSecondPage(filename,savepath,baseurl); } boolean bb = updHtmlhref(filename,"1"); if(bb){ System.out.println("首页链接已修改成功"); } //String indexFile = "D:/daohang/index.html"; } /** * 生成二级页面 * @param indexfilename * @return */ public static boolean saveSecondPage(String indexfilename,String basePath,String baseurl){ List<String> hreflist = ReadFromFile.readFileByChars(indexfilename);//获取到动态链接集合 System.out.println(hreflist.size()); if(hreflist.size()>0){ for(String href : hreflist){//访问动态链接 生成新的静态html文件 System.out.println(href); Pattern p = Pattern.compile("(\\w+?)[.]jspa[?]path=(\\w+)&");//匹配 目录名 和 文件名 Matcher m = p.matcher(href); String dir = null,sfilename = null,url = href; while (m.find()) { System.out.println(href+"\t"+m.group(1)+"\t"+m.group(2)); dir = m.group(1); sfilename = m.group(2); } Pattern p2 = Pattern.compile("\"([^\"]+)\"");//匹配要访问的url Matcher m2 = p2.matcher(href); while(m2.find()){ System.out.println(m2.group(1)); url = m2.group(0); } String ssavepath = basePath+dir+"/"; String flname = ssavepath + sfilename+ ".html"; String sforurl = baseurl+url; System.out.println("文件保存目录:"+basePath+dir+"/"); System.out.println("文件绝对地址:"+flname); System.out.println("访问的url: "+baseurl+url); boolean ssbb = saveHtml(ssavepath, flname, sforurl);//生成二级页面 保存页面成功后调用执行 更改连接 if(ssbb){ System.out.println("二级页面生成成功"); List<String> shreflist = ReadFromFile.readFileByChars(flname);//如果页面 if(shreflist.size()>0){//如果二级页面中存在动态链接 for(String thref : shreflist){//读取二级页面 根据二级页面的动态链接生成 静态html文件 System.out.println("三级链接"); Pattern p3 = Pattern.compile("(\\w+?)[.]jspa[?]path=(\\w+)&");//匹配 目录名 和 文件名 Matcher m3 = p3.matcher(thref); String tdir=null,tfilename = null,turl = thref; while(m3.find()){//匹配正则表达式 然后得到保存文件路径 和 文件名称 System.out.println("要访问的url:"+thref+"\t"+m3.group(1)+"\t"+m3.group(2)); tdir = m3.group(1); tfilename = m3.group(2); } Pattern p4 = Pattern.compile("\"([^\"]+)\""); Matcher m4 = p4.matcher(thref); while(m4.find()){ System.out.println(m4.group(1)); turl = m4.group(0); } String thtmlpath = basePath+dir+"/"; String tflname = thtmlpath+tfilename+".html"; String tfwurl = baseurl+turl; boolean tsavehtml = saveHtml(thtmlpath, tflname, tfwurl); if(tsavehtml){ System.out.println("&&&&&&&&&&&&&&&&&&&三级页面生成成功"); } } boolean updsherf = updHtmlhref(flname,"0"); if(updsherf){ System.out.println(flname+"二级页面链接已经修改成功"); } } } } return true; }else return false; } public static boolean saveHtml(String savepath,String filename,String forurl){ String msg =""; boolean rs = PrintPage(savepath,filename, forurl); if(rs){ msg="文件已保存,地址为:"+filename; System.out.println(msg); return true; }else{ msg="文件保存失败,请检查地址:"+forurl; System.out.println(msg); return false; } } /** * 生成首页静态页面 */ public static void saveIndexPage(String savepath,String filename,String forurl){ saveHtml(savepath, filename, forurl); } /** * 修改生成页面的 动态链接 * @param filepath * @return */ public static boolean updHtmlhref(String filepath,String isindex){ File file = new File(filepath); if(file.exists()){ StringBuilder sb = new StringBuilder(); try { BufferedReader bin; bin = new BufferedReader(new InputStreamReader(new FileInputStream(filepath), "UTF-8")); String s = null; if(isindex.equals("1")){//如果是读取的首页则生成的动态链接改为“xxx/xxx.html” while((s=bin.readLine())!=null){ System.out.println(s); Pattern p = Pattern.compile("href=\"([a-zA-z0-9]+)[.]jspa[?]path=([a-zA-z0-9]+)[^\"]*\""); Matcher m = p.matcher(s); if(m.find()){ System.out.println(s); System.out.println(m.group(1)+"\t"+m.group(2)); s = s.replaceAll("href=\"[^\"]*\"", "href=\""+m.group(1)+"/"+m.group(2)+".html\""); System.out.println(s); } sb.append(s).append("\n"); } }else if(isindex.equals("0")){//如果不是首页//动态链接则改为xxx.html while((s=bin.readLine())!=null){ System.out.println(s); Pattern p = Pattern.compile("href=\"([a-zA-z0-9]+)[.]jspa[?]path=([a-zA-z0-9]+)[^\"]*\""); Matcher m = p.matcher(s); if(m.find()){ System.out.println(s); System.out.println(m.group(1)+"\t"+m.group(2)); s = s.replaceAll("href=\"[^\"]*\"", "href=\""+m.group(2)+".html\""); System.out.println(s); } sb.append(s).append("\n"); } } bin.close(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } BufferedWriter bw; try { bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filepath), "UTF-8")); try { bw.write(sb.toString()); bw.close(); } catch (IOException e) { e.printStackTrace(); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } return true; }else return false; } }
读取存放的html文件并且返回动态链接集合
package com.xinhuanet.news.edman.action; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ReadFromFile { /** * 读取指定的html文件 并且返回动态的链接集合 */ public static List<String> readFileByChars(String fileName) { File file = new File(fileName); Reader reader = null; List<String > herflist = new ArrayList<String>(); try{ FileReader readerline = new FileReader(file); BufferedReader br = new BufferedReader(readerline); String s1 = null; while((s1 = br.readLine()) != null) { Pattern p2 = Pattern.compile("=\"([^\"]+)\""); Matcher m2 = p2.matcher(s1); while(m2.find()&&s1.contains("jspa?path")){ System.out.println(m2.group(1)); herflist.add(m2.group(1)); break; } } br.close(); readerline.close(); }catch(Exception e){ e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) { } } } return herflist; } }
在整个静态化过程中最重要的是根据自己的动态链接写出相应的正则表达式
我的正则是我同事帮写的。改改应该可以通用吧。
完成后可以做个压力测试
再写一个小程序,一边访问一边生成静态页面。
我的做过每妙100次访问同时生成。没有影响。
相关推荐
ASP.NET 动态页面静态化,ASP.NET 动态页面静态化
asp.net 动态页面静态化 asp.net 动态页面静态化
动态页面静态化技术,c#技术 动态页面静态化技术,c#技术
ASP.NET动态页面静态化代码,ASP.NET动态页面静态化代码
动态页面静态化工具直接将网页转换成静态,加快网页浏览速度 动态页面静态化工具使用方法 1、点击并添加新的任务 2、然后直接修改循环时间 3、最后直接点击【启动】就行了 动态页面静态化工具截图
最简单的动态页面静态化的代码C#,输入动态页面的地址,要存放的静态页面的地址,搞定
动态网页静态化软件是一款动态转换静态网页定时HTML生成器,可定时把需要的ASP、.NET、PHP等动态网页自动生成HTML页面。 动态网页静态化软件功能: 可以生成任何网页! 优化软件核心文件,排除软件假死现象! 可以...
动态页面静态化 动态页面静态化 动态页面静态化动态页面静态化 动态页面静态化
最近一直在研究动态页面生成,汇总了网络的有效资源、方法,在这里分享一下,希望对后来做静态化的同仁有所帮助。也包括自己公司实际成熟的设计方案。
动态页面静态化.pdf
asp.net动态页面静态化数据库版,简单案例,供大家参考。
把你的JSP动态页面静态化。把你的JSP动态页面静态化。把你的JSP动态页面静态化。把你的JSP动态页面静态化。
动态网站静态化,主要是针对java ee 的动态网站,实现了,url地址的为动态化。urlrewrite
asp.net+动态页面静态化简单示例(入门)
这个程序可以将一个动态的jsp页面转成静态的,这样子可以提高页面的访问效益,如果这个页面不常改变,用我这种方式便是一个好的选择。
动态网页静态化,提高网站的响应速度,对于大型网站很有必要对网站进行静态化。
通过简单设置,本软件可以把动态页面定时生成静态页面,比如把asp文件定时生成htm文件,这可以大大加快你的网站的访问速度,所以本软件也可以称为页面加速软件。 软件特点: C#开发,所以运行本软件需要安装.net ...
URL重写 页面静态化 伪静态化,实现页面静态化。
JSP页面静态化总结_动态页面变为静态页面以减少访问数据库的次数提高速度.zip
有关Java页面静态化