`
yanfaguanli
  • 浏览: 657381 次
文章分类
社区版块
存档分类
最新评论

如何将jsp动态网页转换成静态页面

 
阅读更多


如果我可以将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 */

如果我可以将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 */

分享到:
评论

相关推荐

    动态Jsp页面转换成静态Html页面

    动态Jsp页面转换成静态Html页面动态Jsp页面转换成静态Html页面动态Jsp页面转换成静态Html页面动态Jsp页面转换成静态Html页面动态Jsp页面转换成静态Html页面动态Jsp页面转换成静态Html页面动态Jsp页面转换成静态Html...

    jsp实现将动态网页转换成静态页面的方法.docx

    jsp实现将动态网页转换成静态页面的方法.docx

    jsp实现将动态网页转换成静态页面的方法

    本文实例讲述了jsp实现将动态网页转换成静态页面的方法。分享给大家供大家参考。具体如下: 如果我可以将jsp动态网页转换成静态页面,那么访问的时候就不需要频繁的访问数据库了。 jsp 显示内容缓存技巧 前段时间做...

    jsp页面转换成静态页面

    jsp页面转换成静态页面 jsp页面转换成静态页面

    动态Jsp页面转换成静态Html页面.zip

    动态Jsp页面转换成静态Html页面.zip

    JSP中把动态页面转换为静态页面

    JSP中把动态页面转换为静态页面,网上查了很多的资料,总结就这么多,共享一下。

    动静态网页转换器

    为了大大减小服务器的负担,减少数据库的访问次数,减小服务器系统资 源的不必要的浪费,明显增大网站的访问速度等等,把访问量很大的动态 网页(ASP、JSP、PHP等)批量转换成静态网页,保留动态网页的所有显示...

    JSP中把动态页面转换为静态页面.doc

    解决大型网站频繁查询数据库的问题,一定程度上可以暂时解决问题!

    网页动静转换工具 v1.0.zip

    网页动静转换主要功能是用于将ASP网页、JSP网页转换为静态的HTML网页文件,使用这款软件可以加快转换的时间,提高效率。 网页动静转换工具特色: 网页动静转换助手用于将ASP网页、JSP网页转换为静态的HTML网页文件...

    快速将psd,jsp等静态资源转换为html页面

    快速将psd,jsp等静态资源转换为html页面

    JSP(全称JavaServer Pages)

    JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签...

    JSP静态导入与动态导入使用详解

    使用了include指令的JSP页面在转换成Java文件时,将被插入的文件在当前JSP页面出来该指令的位置做整体的插入,合并成一个新的JSP页面,然后JSP引擎再将这个新的JSP页面转译成Java文件。因此,必须保证插入文件后形成...

    JSP技术实现动态页面到静态页面的方法

    为了能深入浅出的理解这个框架的由来,我们首先来了解一下JSP解析器将我们写的JSP代码转换成的JAVA文件的内容。 下面是一个JSP文件test.jsp ﹤%@ page language=java contentType=text/html;charset=GB2312 %﹥ ﹤...

    JSP-常用编码转换工具

    在做J2EE时,经常需要将静态网页转换成jsp,但下载下来的htm或htm文件本身是UTF8和unicode,直接改成jsp会变成乱码,在MyEclipse中修改也不成,颇费劲。这个代码程序就是用来读取某种编码格式的html或txt文件并将它...

    jsp经典笔记jsp经典笔记

    JSP是服务器端运行的页面,JSP本身就是一个Servlet,他不仅可以包含静态的HTML代码,也可以包含动态的JAVA代码,服务器容器可以将JSP转换成Servlet发布,并接受请求。 Jsp文件只需放在应用文件下就可以了。 JSP例子...

    JSP网页编程(JSP学生信息管理系统)

    JSP是服务器端运行的页面,JSP本就是一个文档,他不仅可以包含静态的HTML代码,也可以包含动态的JAVA代码,服务器容器可以将JSP转换成Servlet发布,并接受请求。 Jsp文件只需放在应用文件下就可以了。

    java伪静态URL重写的方法

    伪静态URL重写实际就是以静态地址(如:http://127.0.0.1:8080/pro/index.html)访问地态网页的方法(如:http://127.0.0.1:8080/pro/index.jsp)。 ...把静态的URL地址转换成动态地址,发起请求。

    J2EE体系之-JSP学习

    JSP本质就是一个文档,他不仅可以包含静态的HTML代码,也可以包含动态的JAVA代码,服务器容器可以将JSP转换成Servlet发布,并接受请求 JSP文件只需放在应用文件下就可以了 JSP例子: <title>time ...

Global site tag (gtag.js) - Google Analytics