锁定老帖子 主题:jsp动态内容转换为静态html的问题?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-11-22
为什么楼主的问题:如何转换,反而讨论的是应不应该转换呢?
|
|
返回顶楼 | |
发表时间:2006-11-22
ronghao 写道 为什么楼主的问题:如何转换,反而讨论的是应不应该转换呢?
还没开始弄,目前停留在想法上 google查了查,只找到了这个filter的例子! 感觉这方面实现的资料比较少。。。 jsp在服务器端保存为html对减轻服务器压力很有帮助(特别是在大流量的访问中,服务器不必每个页面都动态解析) 下面是生成html页面的关键代码 servletFilter过滤器,被过滤的页面都会生成一个html页面 package com.cn; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class FileCaptureFilter extends HttpServlet implements Filter { private String protDirPath; public void init(FilterConfig filterConfig)throws ServletException { protDirPath = filterConfig.getServletContext().getRealPath("/"); System.out.println(protDirPath); } public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException, ServletException{ String fileName = protDirPath+"forum\\html.html"; System.out.println(protDirPath); System.out.println(fileName); PrintWriter out = response.getWriter(); FileCaptureResponseWrapper responseWrapper = new FileCaptureResponseWrapper((HttpServletResponse)response); chain.doFilter(request, responseWrapper); // fill responseWrapper up String html = responseWrapper.toString(); System.out.println(html); //得到的html页面结果字符串 responseWrapper.writeFile(fileName); // dump the contents 写成html文件,也可以保存在内存 //responseWrapper.writeResponse( out ); // back to browser //responseWrapper.sendRedirect("lastestThread.jsp"); } } 把html写入硬盘的类 package com.cn; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; 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{ System.out.println("fileName = "+fileName); FileWriter fw = new FileWriter(fileName); fw.write( output.toCharArray() ); fw.close(); } public void writeResponse(PrintWriter out) { out.print( output.toCharArray() ); } } |
|
返回顶楼 | |
发表时间:2006-11-22
抛出异常的爱 写道 metalsliver 写道 我在维护一个论坛,论坛比较老,用了struts1.0
想把所有论坛贴转换为静态的html文件, 用户再浏览的时候查看静态html,而在update的时候重写静态html文件 我想尽量少的修改代码,甚至不修改 大家在这方面有没有相关的经验,提示一下 好强的想法...不过帖子数不会太多而变慢么 而且文件数量过多web服务器会死机 我想这个应该没关系,文件的处理应该是操作系统的事情。。。再多的文件应该也没问题。 |
|
返回顶楼 | |
发表时间:2006-11-22
正在做CMS,也是需要这个功能.研究开源中...
|
|
返回顶楼 | |
发表时间:2006-11-23
我做过类似的项目,可以使用velocity等模板技术,定义几个模板,凡是贴子的CUD操作,均同时根据模板生成对应的html文件。
|
|
返回顶楼 | |
发表时间:2006-11-23
能不能把这个整理下,给我们小弟一个具体的方案,呵呵。。。。比较关注这个。
|
|
返回顶楼 | |
发表时间:2006-11-23
能不能把这个整理下,给我们小弟一个具体的方案,呵呵。。。。比较关注这个。
|
|
返回顶楼 | |
发表时间:2006-11-27
用freemarker解决了这个问题 ,实际是非常的简单,定义一个模板
content.ftl 然后 Map root = new HashMap(); root.put("content", c.getContent()); Template temp = cfg.getTemplate("content.ftl"); //发布日期 String date=c.getActivedate() String filename = c.getId()+".html"; //创建目录 Path.createFold(Path.getWebCmsHtmlDirPath(),date); Writer out = new OutputStreamWriter(new FileOutputStream (Path.getWebCmsHtmlDirPath()+"/"+date+"/"+filename)); temp.process(root, out); out.flush(); |
|
返回顶楼 | |
发表时间:2006-12-01
我得到了两个结论和大家讨论:
1,并不是所有的静态连接都是真是的静态文件... 很多静态链接都是用的URL重写,主要目的应该是欺骗搜索引擎.提高自己网站的PageRank (猜测javaeye的处理应该就是这样的...) (URL重写这个概念比较虎人,实际上就是重写当前url中的所有url链接,目的只有一个就是为了把?去掉 ,apache的官方文档写了几千字,哎,感觉写文档的兄弟的目的就是为了让你看不懂.) 2,有状态的页面不可能重写成静态html..除非你把用户状态不管不顾 |
|
返回顶楼 | |
发表时间:2006-12-01
像雾像雨又像风
|
|
返回顶楼 | |