很多网站,像 阿里巴巴(http://china.alibaba.com/) 等等,网站里的所有数据页都是静态html 的页,最起码链接(.html)是这样的,是不是做的假象就不清楚了, 那如果都真的是静态页的话,那都是怎么生成的呢,大家谈谈,也可以指教指教~~

解决方案 »

  1.   

    问题补充:   包括像咱这个CSDN论坛,发完帖子,立即生成了相应的静态页,及很多网站整站都是静态页,这都是如何实现的 ...
      

  2.   

    呵呵  这个嘛 是你项目做的不多吧  我们原来用的都是jsp页面现在都要静态HTML  这样方便搜素引擎抓取页面信息 像google、百度这样的搜索网站好抓取 用html转换的  工具嘛网上都有 
      

  3.   

    To 4L:   这不是用个html 转换工具转换一下这么简单吧,很多大站,整站都是html 也,甚至很多页都是动态需要的,难道也都是用转换的 ...
      

  4.   

    4l不说就不说,说还不说清楚。。bs一个
      

  5.   

    如果要是让我实现的话就只能用File写文件了 , 呵呵 , 但静态页生成肯定是有工具的 , 期待高手。
      

  6.   

    URLWrittern  
    可能是伪静态的哦。
    不过如果要生成静态的应该也没问题啊,不过我还没想到一个更好的办法。
      

  7.   

    用模板做了
    没什么复杂
    或者
    url重写
      

  8.   

    html里面用了自己写的标签就可以实现了!
      

  9.   

         大型门户正在跑的网站服务器大多数并不且备动态功能.   有统一的发布系统,在内网操作.大多是在预览审核后才同步到外部服务器的。   
        
      象搜索什么的,都有自己独立的服务器.   
        
         与上面有冲突有,比如,BBS,blog的,这就是靠服务器数量、程序取胜了.然后是有很多编辑在盯首着。   
        
        
      通过上面,应该明白小型网站与大型门户网站相比,不同的不止是的程序。而是很多很多因素。   
      生成静态页面,这样的技术都一样的。   
      

  10.   

    如何将jsp动态网页转换成静态页面[转]2008年01月05日 星期六 21:42如果我可以将jsp动态网页转换成静态页面,那么访问的时候就不需要频繁的访问数据库了。jsp 显示内容缓存技巧 
    前段时间做自己社区的论坛,在jive 的基础上做一个页面显示所有论坛的帖子,可以称 
    之为总版,模仿forum 类的接口做个superforum 并且实现cachable,不过因为这个页面 
    刷新量比较大,虽然被cache 了,我还是想办法进行页面的缓存,感觉用jsp 产生的html 
    静态内容当缓存,页面访问速度应该有所提高。 
    首先想到的一种办法,是采用java.net 的urlconnection 把服务器上的jsp 抓过来做缓 
    存,不过我觉得这样做太见外了,自己服务器上的东西,为何要用http 去访问.于是想另外一 
    个办法,把jsp 的out 对象的输出控制到自己希望的地方.比如输出到静态文件,又或者保存 
    成全局的字符串变量.这样的话,浏览就不需要执行jsp,只是浏览该html 了.仅仅在数据有更 
    新的时候进行一次update 操作,把jsp 重新输出为html. 
    我觉得,浏览事件比数据插入或更新发生的次数多的时候.不妨试试这个办法来提高页 
    面访问速度. 
    整件事情有点像把jsp 当作模板,生成静态的html 页面. 
    将如下代码写入web-xml 
    <filter> 
    <filter-name>filecapturefilter</filter-name> 
    <filter-class>com.junjing.filter.filecapturefilter</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>filecapturefilter</filter-name> 
    <url-pattern>/latest.jsp</url-pattern> 
    </filter-mapping> 
    latest.jsp 是我要cache 的页面 
    java 源码代码如下 
    /** * start file filecapturefilter.java */ 
    package com.junjing.filter; 
    import javax.servlet.*; 
    import javax.servlet.http.*; 
    import java.io.*; 
    public class filecapturefilter implements filter 

    private string protdirpath; 
    public void init(filterconfig filterconfig) 
    throws servletexception 

    protdirpath = filterconfig.getservletcontext().getrealpath("/"); 

    public void dofilter(servletrequest request,servletresponse response,filterchain 
    chain) 
    throws ioexception, servletexception 

    string filename = protdirpath + "forum/lastest.html"; 
    printwriter out = response.getwriter(); 
    filecaptureresponsewrapper responsewrapper = new 
    filecaptureresponsewrapper((httpservletresponse)response); 
    chain.dofilter(request, responsewrapper); 
    // fill responsewrapper up 
    string html = responsewrapper.tostring(); 
    //得到的html 页面结果字符串 
    // responsewrapper.writefile(filename); 
    // dump the contents 写成html 文件,也可以保存在内存 
    //responsewrapper.writeresponse( out ); 
    // back to browser 
    //responsewrapper.sendredirect("lastestthread.jsp"); 

    public void destroy() {} 

    /** * end file filecapturefilter.java */ 
    /** * start file filecaptureresponsewrapper.java */ 
    package com.junjing.filter; 
    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 

    filewriter fw = new filewriter(filename); 
    fw.write( output.tochararray() ); 
    fw.close(); 

    public void writeresponse(printwriter out) 

    out.print( output.tochararray() ); 


    /** * end file filecaptureresponsewrapper.java */ 
    附件源代码 
    不过采用resin 服务器的话,以上代码会失效。因为resin 没有实现getwriter 方法,而 
    是采用getoutputstream 取而代之,所以必须修改些代码来迎合resin 运行环境: 
    /** * start file filecaptureresponsewrapper.java */ 
    package com.junjing.filter; 
    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 

    filewriter fw = new filewriter(filename); 
    fw.write( output.tostring()); 
    fw.close(); 

    public servletoutputstream getoutputstream() 
    throws java.io.ioexception 

    return new servletoutputstream(); 

    public void write(int b) 
    throws ioexception 

    output.write(b); 

    public void write(byte b[]) 
    throws ioexception 

    output.write(new string(b,"gbk")); 

    public void write(byte b[], int off, int len) 
    throws ioexception 

    output.write(new string(b, off, len)); 

    }; 
    } public void writeresponse(printwriter out) 

    out.print(output.tochararray()); 


    /** * end file filecaptureresponsewrapper.java */ 
    .转自:http://www.comsonic.com.cn/software/p28/A283410.shtml
     
      

  11.   

    不知道你有没有发现,这些静态的页面都是统一的模版,只是里面的内容不一样罢了。我做的时候是首先上传一个新闻,然后把这个新闻的内容加载到模版中。生成html。然后在连接这个html就可以了!
      

  12.   

    此群是一个 java Flex 技术群,如有想在知识方面想共同进步的请加入,长期不发言者 将会被清楚群号:90551956希望大家都能带着知识和问题进来
      

  13.   

    如果要是让我实现的话就只能用File写文件了 , 呵呵 , 但静态页生成肯定是有工具的 , 期待高手。 
      

  14.   

    没什么好稀奇...
    ...所有的动态页面,都是要被变成静态html,才能访问到的...
      

  15.   

    有些是伪静态的 rurlrewrite 看上去是静态的
    也可以直接生成静态页面 比如用freeer  velocity
      

  16.   

    To 22L:
       你说的那个统一的模版,是事先编程好的,自己的技术团队开发的吗,还是什么别的模板?27 L 的大哥,怎么说的那么简单,查看下网页的源代码文件,你能看出来什么??还是希望高手们继续赐教 ...
      

  17.   

    我觉得我绝对不是静态的,有种办法可以实现上面的说法,实质上页面时动态的,但是现实给客户端的是htm
      

  18.   

    struts2.x+freeer生成html
    下载实例 : http://www.lifeispig.cn/article.asp?id=165  
      

  19.   

    http://topic.csdn.net/u/20090613/12/30302a5d-33c0-4ce4-b9e3-cd503dbafac1.html
    说实话,这里面的东西我看不懂!!!
      

  20.   

    我做过网站,其实很多门户网站为了提高搜索引擎的排名,会倾向于把页面做成HTML页,这里用到了伪静态技术,就是把动态页映射到一个HTML的URL,不难实现。
      

  21.   

    自己想的一个伪静态方法:
    增加过滤器,过滤所有 html ,将被请求的 HTML 路径修改为对应的 JSP
    (应该也可以指向对应的 action,未测试)经测试,
    用 request.getParamater getAttribute, session.getAttribute 等,同样可以得到传递的参数另外,因为是服务器端跳转,所以浏览器中的路径看到的是 *.html关键代码如下:public void doFilter(ServletRequest arg0, ServletResponse arg1,
    FilterChain arg2) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest)arg0;
    HttpServletResponse response = (HttpServletResponse)arg1;

    String uri = request.getRequestURI();
    String projectPath = request.getContextPath();

    if(uri.endsWith(".html")){
    uri = uri.replaceAll("^\\" + projectPath, "");// 去掉工程路径
    uri = uri.replaceAll("\\.html$", ".jsp");// 修改被请求页为对应的JSP
    request.setAttribute("attr", "abc");
    request.getSession().setAttribute("attr2", "def");
    request.getRequestDispatcher(uri).forward(arg0, arg1);
    return;
    }

    arg2.doFilter(arg0, arg1);
    }
    <filter>
    <filter-name>FilterURL</filter-name>
    <filter-class>com.test.filter.FilterURL</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>FilterURL</filter-name>
    <url-pattern>*.html</url-pattern>
    </filter-mapping>
      

  22.   


    现则这个网页肯定是静态的。
    所谓的模板就是试先写好的网页,当页面需要发生变化时,只要找到在服务器中找到这个网页,然后插入要添加的信息,再生成新的html文件。可以查看一下源代码
    <form name="form1" method="post" action="ReplyT.aspx?forumID=8b327318-2c42-4a49-8aed-ef8c33697e7f&amp;topicID=c8a4b4cd-7185-4202-882d-aa6a8eeac8f2&amp;postDate=2009-08-26+14%3a40%3a56&amp;v=13" id="form1">
    forumID应该就是当前浏览的网页。如果你回复了一条信息后,forumID肯定又变化了。PS:不可能通过修改文件的后缀名而得到html文件的,直接将'.JSP'改成'.html'???!!!太不可思议了
      

  23.   

    freeer  写好模板,后台装载数据,生成静态页面,
    不过要实时生成,估计就要个filter拦截数据了
      

  24.   

    urlrewrite 是一种解决方法,不要在浏览器看到的是什么结尾的就是什么程序。这个都是可以配置的。我个人建义中小的网站用urlrewrite可以的,加个缓存。一般都行,例如apache配置转发。这样就不用java还用拦截,这样比urlrewrite效果好点。处理静态nginx是目前相对最好的163,sina都是用的这个。以前开发个相对访问还可以的网站,我们的首页是生成静态的。一个小时生成一次,为什么喜欢。htm .html.因为爬虫喜欢,做成HTML页,搜索引擎爬你的页面会多点。
      

  25.   

    看到那种网页一般都有些有规律的分隔符号吗(比如"/"号)?如果有,一般是伪静态,一种搜索优化(SEO)方法。那些隔开的就是参数。http服务器大都有此功能,写个正则替换罢了。
    不过隔一段时间,内容不太会变的时候,一般会调用静态化程序,生成正的html文件。
      

  26.   


    <!--页头Begin-->
    <div class="top cbody">
    <div class="toplogo"><a href=""><img src="${root}/default/article/img/logo.gif" alt="" /></a></div>
    <div class="topbanner">&nbsp;</div>
    <div class="toplink">
    <ul>
      <li><a href="#">高级搜索</a></li>
      <li><a href="javascript:void(0);" onclick="javascript:window.external.AddFavorite('http://www.JEECMS.com','JEECMS - 国内专业、开源、免费的JAVA (JSP)版网站管理系统');">收藏本站</a></li>
      <li><a href="/">联系我们</a></li>
      <li><a href="javascript:void(0);" onclick="this.style.behavior='url(#default#homepage)';this.setHomePage(location.href)">设为首页</a></li>
    </ul>
    </div>
    </div>
    <!--页头End--> <!--导航栏Begin-->
    <div class="topmenu cbody1">
    <ul>
      <li class="thisclass"><a href="${base}/">首 页</a> [@cms.ChnlList id='' inner='1';c]</li>
      <li class="thisclass"><a href="${c.url}">${c.name}</a> [/@cms.ChnlList]</li>
      <li class="thisclass"><a href="${base}/jeecms/Guestbook.jspx" target="_blank">留言板</a></li>
    </ul>
    </div>
    <!--导航栏End-->这是jeecms的一段代码,文件也是html格式的,里面明显可以看出用了@cms标签,动态生成导航栏。
    应该说静态的html里面加了自定义标签,形成动态。
      

  27.   

    http://topic.csdn.net/u/20090826/14/c8a4b4cd-7185-4202-882d-aa6a8eeac8f2.html?seed=2014535298&r=69988717#r_69988717
    这是刚刚发言之前的路径
      

  28.   

    http://topic.csdn.net/u/20090826/14/c8a4b4cd-7185-4202-882d-aa6a8eeac8f2.html?seed=2116151143&r=69988766#r_69988766
    现在路径一样了。参数不一样。求真解?