关于改造动态网站为生成静态页的方案
发布日期:2021-09-18 01:36:50
浏览次数:4
分类:技术文章
本文共 5938 字,大约阅读时间需要 19 分钟。
关于改造动态网站为生成静态页的方案
url 重写的好处 :
一, 可以方便的实现对化化引擎的优化,并且比生成静态 更加方便。
二, 占空间比较小。
三, 首页每天都自动变化,不用维护。
1. 通过urlrewrite 进行静态页生成及缓存. http://tuckey.org/urlrewrite/ 下载.2. 添加urlrewrite.xml配置文件到webroot/WEB-INF/下;添加urlrewrite-XXX.jar到webroot/WEB-INF/lib下;3. 修改urlrewrite.xml为<?xml version="1.0" encoding="utf-8"?><!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN" "http://tuckey.org/res/dtds/urlrewrite2.6.dtd"><urlrewrite> <rule> <from>^/index.html$</from> <to>/index.jsp</to> </rule> <rule> <from>^/product/detail-([0-9]+)/.html$</from> <to>/controler/PageControler?param=chan1=$1&page=productDetail.do</to> </rule><rule> <from>^/catalog/list-p-([0-9]+)-([0-9]+)/.html$</from> <to>/controler/PageControler?param=cataId=$1_cur=$2&page=productCatalogList.do</to> </rule> <outbound-rule> <from>/index.jsp</from> <to>index.html</to> </outbound-rule></urlrewrite>关于urlrewrite的配置参见urlrewrite相关doc.4. 新建过滤器HtmlCatchFilter用来检查静态页import java.io.File;import java.io.IOException;import java.util.Date;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class HtmlCatchFilter implements Filter { // 定义公用变量public final static String staticRootUrl = "/WEB-INF/staticdoc/";public final static String webroot = "D:/webroot";public final static long overtime = 1000 * 60;// 一分钟为过期时间public void destroy() { System.out.println(getClass().getName() + " destroy!");}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException { System.out.println(getClass().getName() + " doFilter!");String param = request.getParameter("param");System.out.println("参数集合:" + param);String page = request.getParameter("page");String newUrl = page + "_" + param + ".html";File file = new File(webroot + staticRootUrl + newUrl);if (file.exists()) { System.out.print("文件最后修改时间:");System.out.println(new Date(file.lastModified()));long lastModified = file.lastModified();long currently = System.currentTimeMillis();System.out.println(new Date(currently));System.out.println("lastModified:" + lastModified + "|currently:"+ currently + "|时间差:" + (currently - lastModified));if (currently - lastModified > overtime) { System.out.println("静态文件" + newUrl+ "过期!转到PageControlerServlet进行生成");chain.doFilter(request, response);}System.out.println("静态文件存在,并且是可用的,转到静态文件" + staticRootUrl + newUrl);request.getRequestDispatcher(staticRootUrl + newUrl).forward(request, response);} else { System.out.println("静态文件" + newUrl+ "不存在!转到PageControlerServlet进行生成");chain.doFilter(request, response);}}public void init(FilterConfig arg0) throws ServletException { System.out.println(getClass().getName() + " init!");}}5. 新建servlet,用来生成静态页.PageControlerServlet.javaimport java.io.BufferedWriter;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.Writer;import javax.servlet.Servlet;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class PageControlerServlet implements Servlet { public void destroy() { System.out.println(getClass().getName() + " destroy");}public ServletConfig getServletConfig() { System.out.println(getClass().getName() + " getServletConfig");return null;}public String getServletInfo() { System.out.println(getClass().getName() + " getServletInfo");return null;}public void init(ServletConfig arg0) throws ServletException { System.out.println(getClass().getName() + " init");}public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException { System.out.println(getClass().getName() + " service");System.out.println("param="+request.getParameter("param"));//通过此servlet来进行静态文件的生成和有效性检查.System.out.println("=======进行生成静态文件处理,生成结束并转到静态页");String param = request.getParameter("param");System.out.println("参数集合:" + param);String page = request.getParameter("page");String newUrl = page +"_"+param+".html";String newFileName = HtmlCatchFilter.webroot+HtmlCatchFilter.staticRootUrl+newUrl;String str = "生成的新的静太文件内容";String params = param.replace('_', '&');System.out.println("请求动态参数:"+params);str = str + "请求:"+page+"?"+params+"取得页面内容";FileOutputStream fos = new FileOutputStream(newFileName);Writer out = new OutputStreamWriter(fos, "UTF-8");BufferedWriter bw = new BufferedWriter(out);// 将字符串写入文件bw.write(str);bw.flush();// 将数据更新至文件fos.close();// 关闭文件流System.out.println("生成新的文件结束,并转向静态文件!");request.getRequestDispatcher(HtmlCatchFilter.staticRootUrl+newUrl).forward(request, response);}}6. 配置web.xml<?xml version="1.0" encoding="UTF-8"?><web-app> <!-- UrlRewriteFilter config start --> <filter> <filter-name>UrlRewriteFilter</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>*.html</url-pattern> </filter-mapping> <!-- UrlRewriteFilter config end --> <!-- HtmlCacheFilter config start --> <filter> <filter-name>HtmlCacheFilter</filter-name> <filter-class>HtmlCatchFilter</filter-class> </filter> <filter-mapping> <filter-name>HtmlCacheFilter</filter-name> <url-pattern>/controler/*</url-pattern> <dispatcher>FORWARD</dispatcher> </filter-mapping><!-- HtmlCacheFilter config end --> <servlet> <servlet-name>PageControlerServlet</servlet-name> <servlet-class>PageControlerServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>PageControlerServlet</servlet-name> <url-pattern>/controler/PageControler</url-pattern> </servlet-mapping></web-app> 7. 测试;访问http://localhost/catalog/list-p-1-2.html 在/WEB-INF/staticdoc/目录下生成productCatalogList.do_cataId=1_cur=2.html 静态文件,扩展上边demo可以改造成生成目录和文件过期时间可配的.来实现改造现有网站的静态化方案.转载地址:https://blog.csdn.net/yuezu1026/article/details/4548545 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年03月28日 22时41分46秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Nginx proxy_cache 使用示例
2019-04-27
Nginx源代码分析 - 日志处理
2019-04-27
使Apache实现gzip压缩
2019-04-27
Memcached在大型网站中应用
2019-04-27
Hadoop简要介绍
2019-04-27
squid中的X-Cache和X-Cache-Lookup的意义
2019-04-27
squid 优化指南
2019-04-27
编程方式刷新Squid缓存服务器的五种方法
2019-04-27
centos vnc配置笔记
2019-04-27
Linux服务器网络开发模型
2019-04-27
nginx虚拟目录设置 alias 和 root
2019-04-27
理解http响应头中的Date和Age
2019-04-27
四层和七层负载均衡的区别
2019-04-27
设置Squid Cache_mem大小
2019-04-27
squid日志文件太大,怎样处理?
2019-04-27
让Squid 显示本地时间
2019-04-27
linux mysql 命令 大全
2021-06-30
清除Squid缓存的小工具
2021-06-30
Varnish Cache 3.0.0安装
2021-06-30