关于页面静态化的处理,自己有一下几点理解,还请多多指教。
1、首页可以采用freemarker来静态化,也可以采用流来处理,还可以通过oscache等方式来处理。
2、一些二级页面和一些动态页面可以采用urlrewriter来实现伪静态+缓存来实现速度上的优化。一方面可以针对seo优化,用户体验上也不错。
3、还是针对第二点,一些二级页面和一些动态页面也都可以使用freemarker来做处理。速度上差距不大,因为2有缓存的支持。
做了个简单的例子,针对访问页面的静态化,例如访问index.jsp则生成index.html然后执行跳转。代码如下:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
String currentURL = req.getRequestURI();
// 得到访问文件名. 例如 /index.jsp
String targetURL = currentURL.substring(currentURL.indexOf("/", 1),
currentURL.length());
// 对文件名进行拆分. 先得到/index 然后在得到index
String splitName = targetURL.split("\\.")[0];
String name = splitName.split("/")[1];
String fileName = name + ".html";
String path = protDirPath + fileName;
// 判断文件是否存在. 存在的话则执行跳转. 否则执行生成.
File file = new File(path);
if (!file.exists()) {
System.out.println("生成HTML文件,执行跳转..");
PrintWriter out = response.getWriter();
FileCaptureResponseWrapper responseWrapper = new FileCaptureResponseWrapper(
(HttpServletResponse) response);
chain.doFilter(request, responseWrapper);
String html = responseWrapper.toString();
System.out.println(html);
// 得到的html页面结果字符串
responseWrapper.writeFile(path);
responseWrapper.writeResponse(out);
res.setHeader("REFRESH", "0;URL=" + req.getContextPath() + "/"
+ fileName);
} else {
System.out.println("目标文件已经存在,执行跳转...");
res.setHeader("REFRESH", "0;URL=" + req.getContextPath() + "/"
+ fileName);
}
}
public class FileCaptureResponseWrapper extends HttpServletResponseWrapper {
private CharArrayWriter output;
public String toString() {
return output.toString();
}
public FileCaptureResponseWrapper(HttpServletResponse response) {
super(response);
output = new CharArrayWriter();
}
public PrintWriter getWriter() {
return new PrintWriter(output);
}
public void writeFile(String fileName) throws IOException {
FileWriter fw = new FileWriter(fileName);
fw.write(output.toString());
fw.close();
}
public void writeResponse(PrintWriter out) {
out.print(output.toCharArray());
}
}
web.xml的配置就不多说了,把过滤配上后然后即可实现所有jsp生成html,针对一些二级页面或首页来优化都不错。
分享到:
相关推荐
NULL 博文链接:https://ykdn2010.iteye.com/blog/2205622
DISCUZ 7.00首页静态化(含全站)for discuz
Zblog首页静态生成插件非常利于首页的静态化,是zblog必备的一款插件资源,例如www.meiguiyou.com博客上就有比较好的seo,通过使用首页静态化能够实现搜索引擎的快速收录,对于seo非常有利,现在提供下载。
将动态首页文件生成相应的静态化首页文件index.html,程序运行需支持asp网页的空间,或iis。 注:本程序只能生成单个网页!
PW首页静态化 有很多人说系统自带首页游客缓存;但是那依然是通过PHP加载的HTML而且还要进行很多判断、触发、等其他辅助功能, HTML文件的执行速度是PHP文件的30倍以上,如果通过PHP加载的HTML再辅助执行其他功能...
1、首先配置setenv.bat set JAVA_HOME=E:\tools\JDK7-64\JDK set GROOVY_HOME=E:\tools\groovy-2.1.9 set GRADLE_HOME=E:\tools\gradle-2.2.1 set ECLIPSE_HOME=E:\tools\ECLIPSE-JEE-64BIT ...
.NET静态首页,.NET生成静态首页,动态网站静态化, 原理是 获取网站首页HTML内容 保存至HTML页。
httpclient 静态化网站 project 静态化首页 子页 一网打尽。
httpclient 核心方法,采用hrrpclient 实现静态化,网站首页,将动态页面静态化为静态页面。或者爬取其他网页的数据信心
vs2008 access / sqlserver2005 1.图片模块:图片上传,自动裁切缩略图以及图片信息管理模块。无限极栏目。...5.整站静态页生成功能,可生成首页,栏目页,内容页全站静态化以降低服务器负担。 详见程序说明
例如ecshop的首页index.php,如果只是请求index.php,那么显示静态页面就可以了,但是如果是index.php?u=10(u=10表示这个客户是用户ID为10的用户推荐的),这样的就不能静态化,因为程序需要这个参数 3, 添加配置...
优点:提高网页的打开速度 原理:将动态数据添加到静态页面,存储下来,如果动态数据无更新添加删除...触发功能不再首页触发, 这样任何情况下首页调取的内容都是静态的,提高浏览速度 附件为单独程序,直接运行就可
jsp 通过模板生成 shtml 可生成静态shtml首页页面 列表页即时生成[信息添加/删除/更新时,列表页自动更新] 静态分页功能* 按当前日期生成对应目录[方便管理和日后维护]
基于HTML的学习网站首页静态网页源码.zip基于HTML的学习网站首页静态网页源码.zip基于HTML的学习网站首页静态网页源码.zip基于HTML的学习网站首页静态网页源码.zip基于HTML的学习网站首页静态网页源码.zip基于HTML的...
Bug修复: 同步资源文件时,复制后的文件有特殊字符问题。...首页静态化时默认页面改为index.html. 栏目页面静态化时默认页面改为channel.html. 信息页面静态化时默认页面改为info.html. 增加建站向导功能。
含UTF版和GBK版,织梦版本5.6或5.7 可以生成网站所有TAG列表的静态网页文件,还有生成tag的首页静态文件。 修改前,请备份相关的原始文件。
Bug修复: 同步资源文件时,复制后的文件有特殊字符问题。...首页静态化时默认页面改为index.html. 栏目页面静态化时默认页面改为channel.html. 信息页面静态化时默认页面改为info.html. 增加建站向导功能。
Bug修复: 同步资源文件时,复制后的文件有特殊字符问题。...首页静态化时默认页面改为index.html. 栏目页面静态化时默认页面改为channel.html. 信息页面静态化时默认页面改为info.html. 增加建站向导功能。
Magento列表页面属性筛选,实现URL静态化展示,eg:http://***.com/shopby/color/1/design/2/...