• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JSP > jsp实现将动态网页转换成静态页面的方法

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

作者:crazy_itman 字体:[增加 减小] 来源:互联网 时间:2017-05-11

crazy_itman通过本文主要向大家介绍了jsp动态页面静态化,jsp是动态还是静态,jsp页面静态化,jsp生成静态页面,jsp静态页面等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了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> 
</div>

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 */ 

</div>
/** * 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 */ 

</div>

附件源代码:

不过采用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 */

</div>

希望本文所述对大家的JSP程序设计有所帮助。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • jsp实现将动态网页转换成静态页面的方法
  • 动态JSP页生成静态HTML的方法
  • jsp生成静态页面的方法
  • 用JSP生成静态页面

相关文章

  • 2017-05-11Java 创建cookie和删除cookie
  • 2017-05-11jsp利用POI生成Excel并在页面中导出的示例
  • 2017-05-11frameset布局时frame中src路径的页面没有加载的解决方法
  • 2017-05-11把WebLogic EJB程序迁移到JBoss上
  • 2017-05-11JavaScript实现图片倒影效果 - reflex.js
  • 2017-05-11jsp防止跨域提交数据的具体实现
  • 2017-05-11如何使用JSP+MySQL创建留言本(一)
  • 2017-05-11hibernate中的增删改查实现代码
  • 2017-05-11完美解决jsp页面在IE8下文本模式自动为(杂项Quirks)导致页面显示错位
  • 2017-05-11JSP由浅入深(11)—— 标记库

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • jsp跳转getRequestDispatcher()和sendRedirect()的区别
    • Jdbc连Sybase数据库的几种方法
    • 详解Hibernate cascade级联属性的CascadeType的用法
    • 页面自动刷新,不用按回车键来提交数据!
    • JavaMail访问Hotmail邮箱
    • CORBA对象生命周期之实现和内存管理
    • JSP避免Form重复提交的三种方案
    • jsp页面循环集合操作整理
    • 纯JSP+DWR实现三级联动下拉选择菜单实现技巧
    • JDBCTM 指南:入门3 - DriverManager

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有