我想知道,现在很多网站都用了静态页面,有些是伪静面,表面是静态的,其实还是动态的,还有就是纯静态页面,不知道像SOHU这样的静态页面是怎么做到的???
freeer可以生成静态页面,但是刚才看了一下,它好像也是要从数据库中读取的,只是填充。像那种从后台添加一条新闻,就生成了一个静态页面,然后我们读取的就是一个静态页面。这个是怎么实现的,另外大家是怎么做成静态页面的????有源码的朋友还望发一源码过来???

解决方案 »

  1.   

    freeer可以生成纯静态页面吗??比如今天是20090204.html这样的???
      

  2.   

    <jsp:include .... 动态?
    <%@ include file=*** 静态?
    >_<
      

  3.   

    看到过一个介绍,页面动态部分是定时生成的js文件,包含动态的所有内容的展示,纯html再引入指定的js(︶︿︶).
      

  4.   

    用html和css样式做静态页面,数据存储在数据库中,从后台录入
      

  5.   

    freeer可以,而且是比较好的模板。
      

  6.   

    呵呵。。我前几天还在看和学习如何生成静态页面的
    我找了很多资料,freeer我不知道怎样用没有学所以不知道怎样用来生成静态页面,但是
    http://axiii.blog.51cto.com/396236/126963这里有一个java生成静态html的方法,是通过替换的方法当你在后台做好之后生成一个新的静态页面,你自己预先把模板给做好,里面的js等都做好,然后通过替换里面的标题,内容就能生成一个静态页面了,但是如果有分页的话就要自己去看看怎样去实现了,呵呵
    希望帮到lz吧还有很多生成html页面的方法,可以到网上去找找学学
      

  7.   

    只用一个servelet就可以了。  1  toHtml.java(不用修改,直接用)
        
        package com.jetsum.mystatic;
        import java.io.ByteArrayOutputStream;
        import java.io.FileOutputStream;
        import java.io.IOException;
        import java.io.OutputStreamWriter;
        import java.io.PrintWriter;
        import javax.servlet.RequestDispatcher;
        import javax.servlet.ServletContext;
        import javax.servlet.ServletException;
        import javax.servlet.ServletOutputStream;
        import javax.servlet.http.HttpServlet;
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        import javax.servlet.http.HttpServletResponseWrapper;
        public class toHtml extends HttpServlet {
            public void service(HttpServletRequest request, HttpServletResponse response)
                            throws ServletException, IOException {
                    String url = request.getParameter("urls")!=null?request.getParameter("urls"):"";
                    //url是要生成htm的jsp页面
                    String name = "";
                    response.setContentType("text/html;charset=gb2312");
                    ServletContext sc = getServletContext();
                    System.out.println("request.getRealPath"+request.getRealPath(""));
                    name = request.getRealPath("") + "/index.htm";      /*生成htm页  位置在%服务器的根目录%/工程名/index.htm 例如:/tomcat5.0/webapp/studyteach/index.htm  ,注意这里是在根目录生成,你可以生成后放到你想放的文件夹里,保证其它东西如图片的路径正确    这里就写成name = request.getRealPath("") + "/kszx/kszx.htm";      */
                  RequestDispatcher rd = sc.getRequestDispatcher(url);
                    final ByteArrayOutputStream os = new ByteArrayOutputStream();
                    final ServletOutputStream stream = new ServletOutputStream()
                    {
                            public void write(byte[] data, int offset, int length) {
                                    os.write(data, offset, length);
                            }
                            public void write(int b) throws IOException {
                                    os.write(b);
                            }
                    };
                    final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os));
                    HttpServletResponse rep = new HttpServletResponseWrapper(response)
                    {
                            public ServletOutputStream getOutputStream() {
                                    return stream;
                            }
                            public PrintWriter getWriter() {
                                    return pw;
                            }
                    };
                    rd.include(request, rep);
                    pw.flush();
                    FileOutputStream fos = new FileOutputStream(name); // 把jsp输出的内容写到xxx.htm
                    os.writeTo(fos);
                    fos.close();
                    PrintWriter out = response.getWriter();
                    out.print("<p align=center><font size=3 color=red>首页已经成功生成!</font></p>");
                }
        }
        web.xml
        中添加
          <servlet>
            <servlet-name>tohtm</servlet-name>
            <servlet-class>com.jetsum.mystatic.toHtml</servlet-class>
        </servlet>
          <servlet-mapping>
            <servlet-name>tohtm</servlet-name>
            <url-pattern>/web/tohtm</url-pattern>
          </servlet-mapping>
        使用方法很简单  mytest.jsp(wwwroot下)
        <a href="web/tohtm?urls=/kszx/kszx.jsp">生成静态页</a>    kszx.jsp为要生成htm的动态页
        如果不在wwwroot下,在wwwroot/pp下
        就要写成
        <a href="../web/tohtm?urls=/kszx/kszx.jsp">生成静态页</a> 
      

  8.   

    有谁用过freeer吗???它是怎么实现的???
      

  9.   

    新闻保存和静态发布分别处理
    保存后,在发布队列中加入一个新闻ID,然后不断扫描这个队列,当不空时,开始发布这条新闻的静态页面,然后不断地递归生成新闻的父栏目一直到根结点。
    静态页面分为2类  新闻正文属于正文页,其它非正文页都是列表页
    现在门户网站都把页面拆分成一块块的碎片,当用户访问时使用ssi组件拼合起来。这就是静态发布的基本思想
      

  10.   

    伪静态一般用地址重写来做
    而像新浪搜狐这样的门户都是真静态,他们配置的是服务器集群
    有n个服务器每天专门来生成静态文件,然后丢到某台服务器上对外发布。
    至于如何生成静态文件有好多方法
    可以用urlconnection
    可以用velocity
    可以用free
    都可以
    我的主页用的伪静态:php的,采用的是apache url重写
    http://www.unetlife.com
      

  11.   

    URL重写
    即使是真的生成了动态的页面,我想他势必会增加服务器的负担,
    必须在服务器有一个静态的转化机制生成一个静态的页面包把这个包扔给客户端。
    我觉得没有必要,什么杨的系统要求这么高 啊
    累人!
      

  12.   

    静态页面不适用于变化较大页面,最适合于新闻之类不会变化的页面。生成静态页面的好处,是可以减轻应用服务器和数据库的压力。新闻的静态页面基本上是后台编辑将新闻录入完成后,将其保存在数据库中,然后再生成 HTML 页面的。另外,存放静态页面的路径得是虚拟路径,不能是当前工程中的一个目录。如果放在当前工程中的某个
    目录下,在工程重新部署后,原来在这个目录下生成的文件将会全部被清掉。比如在 Tomcat 下这样配置一下:<Context docBase="f:/web/base" path="/news/resources"/>
    <Context docBase="news" path="/news"/>工程是放在 webapps/news 目录下的,访问时采用 http://localhost:8080/news 这样访问。
    而生成的静态页面是放在 f:/web/base 目录下的,访问时采用 http://localhost:8080/news/resources/xxxx.html 这样访问的。配置一个虚拟路径的话,那么在应用重新部署后不会影响到一些动态生成的资源。采用 FreeMarker 或者采用 Velocity 模板,都是采用 MVC 的结构将数据与模板进行合并的,
    合并后将数据流写入到某个 HTML 文件中,这样静态页面就生成了。
      

  13.   

    我见有的论坛也生成静态页面HTML的 这样好吗?
      

  14.   

    同意28楼的看法,不过这是理所当然的,既然是发布成静态页面,为什么还要用动态服务器对外提供服务呢?如果是多台服务器怎么办呢?门户都是把静态页面同步到其它服务器的apache或者nginx下,毕竟静态服务器的效率要高得多,即使这样,也不能满足他们的高访问量需求,前端还要使用squid cdn等
      

  15.   

    我写的一个比较菜的静态方法/***************************************************************************
     * 生成静态页面
     **************************************************************************/
    public void convertJSP(String filepath, String template, String title,
    String comments, String showtime, String filename, String keywords,
    String desciption) { File htmlfile = new File(filename); StringBuilder sb = new StringBuilder();
    try {
    htmlfile.createNewFile();// 创建文件 template = template.replaceAll("#title#", title); // 替换预留字符
    template = template.replaceAll("#comments#", comments);
    template = template.replaceAll("#datetime#", showtime);
    template = template.replaceAll("#keywords#", keywords);
    template = template.replaceAll("#desciption#", desciption); sb.append(template); PrintStream printStream = new PrintStream(new FileOutputStream(
    filepath + "/" + htmlfile)); printStream.println(sb.toString());// 将字符串写入文件 } catch (IOException e) {
    e.printStackTrace();
    }
    }
      

  16.   

    其实他们用的都是类AJAX的原理。。
    比如说ext等等。。
    其实说白了还是跟服务器数据交互同步的。。只是你感觉不到而已
      

  17.   

    这个可以转换任何动态页面。
    public static void convertHtml(String sUrl, String charset,
          String sSavePath, String sHtmlFile) throws IOException {    int HttpResult;
        URL url = new URL(sUrl);
        URLConnection urlconn = url.openConnection();
        // 抽象类 URLConnection
        // 是所有类的超类,它代表应用程序和 URL
        // 之间的通信链接,通过在 URL 上调用
        // openConnection 方法创建连接对象
        urlconn.connect(); // 使用 connect 方法建立到远程对象的实际连接
        HttpURLConnection httpconn = (HttpURLConnection) urlconn;
        // 每个
        // HttpURLConnection
        // 实例都可用于生成单个请求,
        // 但是其他实例可以透明地共享连接到
        // HTTP 服务器的基础网络
        HttpResult = httpconn.getResponseCode();
        // getResponseCode可以从 HTTP
        // 响应消息获取状态码
        if (HttpResult != HttpURLConnection.HTTP_OK) {
        } else {
          InputStreamReader isr = new InputStreamReader(httpconn.getInputStream(),
              charset);
          BufferedReader in = new BufferedReader(isr);
          String inputLine;
          if (!sSavePath.endsWith("/")) {
            sSavePath += "/";
          }
          FileOutputStream fout = new FileOutputStream(sSavePath + sHtmlFile);
          while ((inputLine = in.readLine()) != null) {
            System.out.println(inputLine);
            fout.write((inputLine+"\n").getBytes());
          }
          in.close();
          fout.close();
        }
      

  18.   

    freeer 就是一模板,这个能实现的!