浏览 6517 次
锁定老帖子 主题:首页静态化
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-28
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,针对一些二级页面或首页来优化都不错。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-05-30
这个有考虑到即时性吗?
|
|
返回顶楼 | |
发表时间:2010-05-30
不错啊,得试试啊
|
|
返回顶楼 | |
发表时间:2010-05-31
希望给也更新管理操作,一个完整的实用例子,期待!
|
|
返回顶楼 | |
发表时间:2010-05-31
直接用squid缓存就行了
|
|
返回顶楼 | |
发表时间:2010-11-21
我感觉楼主的方法貌似没有考虑数据刷新 这样做只能实现数据不常更新的网站
|
|
返回顶楼 | |
发表时间:2010-11-21
伪静态还能实现速度上的优化?
SEO部分不必过分强调伪静态了,都21世纪了,搜索引擎没你想的那么傻。 唯一有用的就是用户体验。 要真从效率上考虑,搞静态化就搞成真的,又不难。要不就上缓存。 |
|
返回顶楼 | |
发表时间:2010-12-21
首页可以用quartz做个定时任务,定时来生成首页静态页
|
|
返回顶楼 | |