胡扯,谁说每次要写文件生成.html。
每次打开的页面都是打开动态生成的,然后通过流的方式输出到你的浏览器上的,根本就不是县生成一个.html再现实。
不要自己总自顾自的胡想,研究一下web编程,知道了原理才能明白是怎么回事。

解决方案 »

  1.   

    无论如何,第一次访问时都得从数据库中读取数据。
    只要在这时将所有要输出的数据都保存至 HTML 文件即可,这一点用 Servlet 比较好做。
    如:
    public void doGet(HttpServletRequest req, HttpServletResponse res){
      //检测是否有新数据,如果没有,而且已经有缓存页面,跳
      if(/*...*/ && /*...*/){
        this.getServletContext().getRequestDispatcher("缓存页").forward(req, res);
        return;
      }
      //读取数据库中的数据
      //...
      //读取模板文件
      File f = new File("Template.html");
      StringBuffer buf = new StringBuffer();
      String line;
      BufferedReader br = new BufferedReader(new FileReader(f));
      while((line = br.readLine()) != null){
        buf.append(line);
      }
      String result;
      result = buf.replaceAll("模板中预留的字符串变量", 从数据库读出的数据);
      //...
      //保存缓存页
      FileOutputStream fos = new FileOutputStream(new File("缓存页"));
      fos.write(result.getBytes());
      fos.close();
      response.getWriter().print(result);
    }
      

  2.   

    这个要看你网站的访问量和机器的性能了。生成Html页面是为了提高很多人同时访问的效率,减轻服务器负担的。一般的新闻信息,如SIna的或者Sohu的,都是有专门的静态页面生成程序在固定的时间来运行的。
      

  3.   

    有一个例子, 可以去找动感下载后台的源代码,
    它就可以直接生成HTML
    但是它是asp的程序,
    最精华的一段是这样的:
    <%
    HtmlFileName=Server.MapPath("index.htm")

    Set fso = Server.CreateObject("Scripting.FileSystemObject")
    Set fout = fso.CreateTextFile(HtmlFileName)
    HtmlContent  = "This is my first create!"
    fout.WriteLine HtmlContent 
    fout.close:set fout = nothing 
    %>
    你可以替换HtmlContent 的内容, 一般是在数据库做一个模板库,读入相应的数据替换它。
      

  4.   

    你提的问题就是门户网站软件(国外的有portal server,国内有(上星期考察了三个产品,都还行。。))的功能,比如一些大型的信息发布网站,访问量比较大,如果每次都动态生成网页,那是不行的,还有门户网站后台的内容管理,这些都需要有后台组织系统来完成。
      

  5.   

    类似php的模板技术,调用模版,写出htm页面
      

  6.   

    按照我的思路,比如新闻发布系统,不是每个登陆或者每次查看都动态生成HTML(或者说进行数据库查询),他只访问已经生成了的html。而这些HTML文件是通过后台软件(你可以用SERVLET来做)来生成的,用线程的方式,比如每1个小时生成、替换一次,这样就达到了提高效率和减轻服务器负担的目的。事实上,一个完整的系统有很多功能都会用到这样的方式来处理,比如报表或者最起码访客信息