Topic: 讨论:发布程序的做法

  Print this page

1.讨论:发布程序的做法 Copy to clipboard
Posted by: fat32
Posted on: 2004-03-18 16:38

问题:将动态页面内容发布成静态html文件。
我目前的做法:

  public static void genHtml(String template, String path, String fileName)
    throws IssueException, IOException {
    URL url = new URL(template);
    BufferedReader reader =
      new BufferedReader(new InputStreamReader(url.openStream(), "GBK"));
    String line = "";
    java.io.File file = new java.io.File(path);
    file.mkdirs();
    file = new java.io.File(path + fileName);
    FileOutputStream fileOut = new FileOutputStream(file);
    while ((line = reader.readLine()) != null)
      try {
        fileOut.write(line.getBytes());
      } catch (IOException _ex) {

      }
    fileOut.close();
  }

我感觉这种做法效率很低。因为一个url请求的返回所用时间太长,在需要发布的数据很多的时候,耗时太长了。我们的信息量很大,比如我们一天要更新很多新闻,这些新闻都要发布成静态页面。
请问哪位高手有更好的方法?

2.Re:讨论:发布程序的做法 [Re: fat32] Copy to clipboard
Posted by: fat32
Posted on: 2004-03-19 10:05

自己顶一下

3.Re:讨论:发布程序的做法 [Re: fat32] Copy to clipboard
Posted by: jameszhang
Posted on: 2004-03-19 10:22

(题外请教)为什么不用数据库,而用文件呢?

4.Re:讨论:发布程序的做法 [Re: jameszhang] Copy to clipboard
Posted by: fat32
Posted on: 2004-03-19 10:33

我们的新闻数据确实时放在数据库的,但我们要把动态从数据库取数据的程序(例如jsp、servlet等)发布成静态页面,让用户访问这些发布好的静态页面,而不是直接访问动态取数据的程序。
这样作的目的主要是减轻服务器的压力,因为我们数据量太大,而且用户太多。

5.Re:讨论:发布程序的做法 [Re: fat32] Copy to clipboard
Posted by: jameszhang
Posted on: 2004-03-19 10:38

那我还有个问题请教,静态文件生成后,下一次是否再去数据库取数据呢?如果不取,是怎样一个找到静态文件的过程呢?谢谢,呵呵

6.Re:讨论:发布程序的做法 [Re: fat32] Copy to clipboard
Posted by: wes109
Posted on: 2004-03-19 11:00

在数据库中保存文件路径

修改时更新文件

7.Re:讨论:发布程序的做法 [Re: fat32] Copy to clipboard
Posted by: fat32
Posted on: 2004-03-19 11:14

fat32 wrote:
我们的新闻数据确实时放在数据库的,但我们要把动态从数据库取数据的程序(例如jsp、servlet等)发布成静态页面,让用户访问这些发布好的静态页面,而不是直接访问动态取数据的程序。
这样作的目的主要是减轻服务器的压力,因为我们数据量太大,而且用户太多。

你指的下次是不是用户访问?用户的访问是不用通过数据库的。已我们一个简单的新闻栏目为例,我先发布这个栏目下所有的新闻,同时在数据库记录下发布好文件的目录及文件名(文件名自动生成,一般是新闻数据在数据库的ID)。然后发布栏目的新闻列表。新闻列表中具体某条新闻的链接就取上面记录好的目录及文件名。用户访问倒这个发布好的新闻列表,就可以访问具体某条新闻了。

8.Re:讨论:发布程序的做法 [Re: wes109] Copy to clipboard
Posted by: fat32
Posted on: 2004-03-19 11:55

wes109 wrote:
在数据库中保存文件路径

修改时更新文件

数据库的数据修改之后,要重新发布才能更新文件,而不是修改数据库的时候直接修改文件。

9.Re:讨论:发布程序的做法 [Re: fat32] Copy to clipboard
Posted by: floater
Posted on: 2004-03-19 12:32

looks like you are doing it on the client side, can you do it on the server side?

The cost is on the network.

AND you are not using buffer when writing!

10.Re:讨论:发布程序的做法 [Re: floater] Copy to clipboard
Posted by: fat32
Posted on: 2004-03-19 13:09

floater wrote:
looks like you are doing it on the client side, can you do it on the server side?

The cost is on the network.

AND you are not using buffer when writing!

是在服务器端的,网络传输的时耗应该不是很大。我可以这样调用:
genHtml("http://localhost:80/index.jsp","/htmldir","index.html");

11.Re:讨论:发布程序的做法 [Re: fat32] Copy to clipboard
Posted by: jameszhang
Posted on: 2004-03-21 10:00

fat32 wrote:
你指的下次是不是用户访问?用户的访问是不用通过数据库的。已我们一个简单的新闻栏目为例,我先发布这个栏目下所有的新闻,同时在数据库记录下发布好文件的目录及文件名(文件名自动生成,一般是新闻数据在数据库的ID)。然后发布栏目的新闻列表。新闻列表中具体某条新闻的链接就取上面记录好的目录及文件名。用户访问倒这个发布好的新闻列表,就可以访问具体某条新闻了。

你的意思是说:数据库不存文件,只存路径?如果这样的话,你是怎样平衡多个用户同时访问一个文件的,从文件读的效率是否支持大量访问呢?

千万别嫌我烦,谢谢,呵呵

12.Re:讨论:发布程序的做法 [Re: fat32] Copy to clipboard
Posted by: fat32
Posted on: 2004-03-22 17:07

难道没有人能给点建议?

13.Re:讨论:发布程序的做法 [Re: fat32] Copy to clipboard
Posted by: nothing
Posted on: 2004-03-22 17:26

学习ing.....

14.Re:讨论:发布程序的做法 [Re: fat32] Copy to clipboard
Posted by: ziben
Posted on: 2004-03-25 09:14

为什么不采用已有的CMS系统呢?

15.Re:讨论:发布程序的做法 [Re: ziben] Copy to clipboard
Posted by: fat32
Posted on: 2004-03-25 13:10

ziben wrote:
为什么不采用已有的CMS系统呢?

我们看过几家公司的cms系统,价格便宜的不能满足我们的需要,能满足我们需要的又太贵了。大部分cms系统都只能用于企业的门户网站,根本满足不了我们的需要。

16.Re:讨论:发布程序的做法 [Re: fat32] Copy to clipboard
Posted by: mummy_zc
Posted on: 2004-03-26 14:01

java初学:多指教。我觉得:
瓶颈:
1,url.openconnection(时间都浪费在等待服务器响应上了,严重)
2,Bufferedreader,(一次读一行,不如一次读他一个buffersize)
3,fileout.write(byte[])(没有用缓冲,严重)
建议:
1,多线程,看你用static 方法,估计你是没用Multi Thread,
2,读文件直接就用带缓冲的inputStream
3,写文件用RandomAcessFile(注意是jdk1.4版本之后的,包括1.4)

17.Re:讨论:发布程序的做法 [Re: mummy_zc] Copy to clipboard
Posted by: fat32
Posted on: 2004-03-28 21:07

mummy_zc wrote:
java初学:多指教。我觉得:
瓶颈:
1,url.openconnection(时间都浪费在等待服务器响应上了,严重)
2,Bufferedreader,(一次读一行,不如一次读他一个buffersize)
3,fileout.write(byte[])(没有用缓冲,严重)
建议:
1,多线程,看你用static 方法,估计你是没用Multi Thread,
2,读文件直接就用带缓冲的inputStream
3,写文件用RandomAcessFile(注意是jdk1.4版本之后的,包括1.4)

非常感谢mummy_zc的建议。
不过我觉得难道除了我上面给出的方法之外,没有别的方法可以制作发布程序了吗?


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923