怎么把jsp动态转成静态的?

baihexige 2008-08-05 05:23:30
是个新闻发布的页面,所以首页连接好多数据库,打开首页时很慢

我是想打开首页时就不在访问数据库了,而是之前就把需要显示的新闻生成静态页面,
不知道能不能实现? 改怎么实现? 并且不断更新消息

不能的话还有什么办法让打开首页的时间快点?




--------------------------------------------------------------------
以下内容为自动编辑的内容,并非楼主的发贴内容,此仅用于显示而已,并无任何其他特殊作用
楼主【baihexige】截止到2008-08-05 17:23:39的历史汇总数据(不包括此帖):
发帖的总数量:17 发帖的总分数:565 每贴平均分数:33
回帖的总数量:19 得分贴总数量:4 回帖的得分率:21%
结贴的总数量:11 结贴的总分数:370
无满意结贴数:0 无满意结贴分:0
未结的帖子数:6 未结的总分数:195
结贴的百分比:64.71 % 结分的百分比:65.49 %
无满意结贴率:0.00 % 无满意结分率:0.00 %
楼主加油

取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=baihexige
...全文
140 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
shalu2008 2008-08-08
  • 打赏
  • 举报
回复
既然首页打开了,数据库都连接一次了,已经慢了啊,还什么静态不静态的了啊。
xchh1220 2008-08-08
  • 打赏
  • 举报
回复
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.util.NodeList;


Parser myParser = new Parser("http://xxx.xxx.xxx/xxx");
myParser.setEncoding("UTF-8");
String filterStr = "html";
NodeFilter filter = new TagNameFilter(filterStr);
NodeList nodeList = myParser.extractAllNodesThatMatch(filter);
String content = nodeList.elementAt(0).toHtml().toString();
System.out.println(content);
张梅甫 2008-08-08
  • 打赏
  • 举报
回复

import java.io.*;
//需要一个包
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
//自己的一个写日志类
import com.qingke.logs.Logs;

public class GetStaticPage {
String host;
int port;

public String getHost() {
return host;
}

public void setHost(String host) {
this.host = host;
}

public int getPort() {
return port;
}

public void setPort(int port) {
this.port = port;
}

public void jspToHtml(String jspPath,String jspName,String htmlPath,String htmlName){
try{
HttpClient client = new HttpClient();
client.getHostConfiguration().setHost(host,port);
String allpath=jspPath+jspName;
String allpathto = htmlPath+htmlName;
GetMethod get = new GetMethod(allpath);
client.executeMethod(get);
StringBuffer resultBuffer = new StringBuffer();
BufferedReader in = new BufferedReader(new InputStreamReader(get.getResponseBodyAsStream(),"GBK"));
String inputLine = null;
while( (inputLine = in.readLine()) != null ){
resultBuffer.append(inputLine);
resultBuffer.append("\n");
}
in.close();
String s = resultBuffer.toString();
//String s = get.getResponseBodyAsString();
BufferedWriter bw = new BufferedWriter(new FileWriter(new File(allpathto)));
bw.write(s);
bw.close();
get.releaseConnection();
}catch (Exception ex ){
Logs.writerLog(ex.getMessage());
}
}



}

在JSP中这样调用
<%
GetStaticPage gethtml = new GetStaticPage();
//主机地址
gethtml.setHost("127.0.0.1");
//访问端口
gethtml.setPort(80);

String pathreal=request.getRealPath("");
//得到你所要的结果集
rs=******;
while(rs.next()) {
//例如你的动态网页是article.jsp?id=多少,那你设置个目录,例如在/news/下生成静态页面
gethtml.jspToHtml("/company/","article.jsp?id="+rs.getLong("newsid"),pathreal+"\\news\\",rs.getLong("newsid")+".html");
}

//这样可以将你的所有新闻页面直接生成静态页面
yuhai_fish 2008-08-05
  • 打赏
  • 举报
回复
动态jsp 页面生成以后,是一个网页是吧!
网页上都有菜单栏是吧
菜单栏里都有一个《另存为》
点击另存为不就好了
可以得到静态页面
goosman 2008-08-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 baihexige 的帖子:]
是个新闻发布的页面,所以首页连接好多数据库,打开首页时很慢

我是想打开首页时就不在访问数据库了,而是之前就把需要显示的新闻生成静态页面,
不知道能不能实现? 改怎么实现? 并且不断更新消息

不能的话还有什么办法让打开首页的时间快点?
[/Quote]

可以使用Ajax把需要显示的新闻做出来。
rascalboy520 2008-08-05
  • 打赏
  • 举报
回复
这个是第一种方法的简单例子

public static String Jsp2Html(){
File f=new File("你要存放文件的路径");
StringBuffer sb=new StringBuffer();//这里放的是你页面里的所有内容
//如果调用数据库的话,把从数据里得到的内容也写到时面,
Info_db idb=new Info_db();//一个数据库类,只是给你一个例子,
String name=idb.getName();
sb.append("<html>");
sb.append("\n<head>");
sb.append("\n<title>我的页面</title>");
sb.append("\n</head>");

sb.append("\n<body>");
sb.append("\n 这里是从数据库里取的数据"+name);
sb.append("\n<body>");
sb.append("\n</html>");
try {
FileOutputStream os = new FileOutputStream(f.toString(), false);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(os,
"gbk"));
out.write(sb.toString());
out.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
rascalboy520 2008-08-05
  • 打赏
  • 举报
回复
可以实现,用很多方法,
我知道的有两种:
1.用File类 操作,
你把生成动态页的内容写到一个html文件里,保存到你的服务目录,首页就用index.html好了,然后定时生成一次就可以,
2.如果是unix系统,可以定时的用wget去抓取这个动态页面的内容,把内容保存为一个index.html
还有一种方法,好像是得用什么ingx,把页面的内容写到内在中去,
baihexige 2008-08-05
  • 打赏
  • 举报
回复
能不能贴点具体的代码?
「已注销」 2008-08-05
  • 打赏
  • 举报
回复
或者模板技术
「已注销」 2008-08-05
  • 打赏
  • 举报
回复
用 缓存技术 EHCache ...
fulianglove 2008-08-05
  • 打赏
  • 举报
回复
我是想打开首页时就不在访问数据库了,而是之前就把需要显示的新闻生成静态页面,
======================================================
那你该访问数据库多少次不是没变么?有改进么??


并且不断更新消息
==========================
ajax

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧