jsp生成静态页实践及其设计思想[1] _jsp技巧
4757 点击·0 回帖
![]() | ![]() | ||||
![]() | 引子: 我们以两个大型网站为例作比较: 51job和智联招聘(先声明我不是为他们作广告,仅以他们为例作技术上的比较) 51job采用的是比较“先进”的php技术,而智联用的是比较落后的asp.但我们可能会明显的感觉到51job的反应速度相比智联招聘实在是太慢了,为什么会这样?细心的人可能会察觉到了。智联虽然用的是asp,但他采用了另一种更巧妙的技术--asp生成静态页技术。所有的动态页基本上都转换成了html静态页,不用访问数据库,当然反应快了。 下面我们讨论一下jsp怎么转换成html?? 首先要做一个模板。后缀不限,但一般都用*.template例子 #title# 作者:#author# #content# 做一个处理模板的类或jsp文件、(为说明问题我们从简单入手以一个jsp文件为例) filePath = request.getRealPath("/")+"web-INF/templates/template.htm"; out.print(filePath); String templateContent=""; FileInputStream fileinputstream = new FileInputStream(filePath);//读取模块文件 int lenght = fileinputstream.available(); byte bytes[] = new byte[lenght]; fileinputstream.read(bytes); fileinputstream.close(); templateContent = new String(bytes); out.print("以下是模板内容: "+templateContent+" 以下是置换以后的html内容 "); templateContent=templateContent.replaceAll("#title#",title); templateContent=templateContent.replaceAll("#author#",editer);//替换掉模块中相应的地方 templateContent=templateContent.replaceAll("#content#",content); // 根据时间得文件名 Calendar calendar = Calendar.getInstance(); String fileame = String.valueOf(calendar.getTimeInMillis()) +".html"; fileame = request.getRealPath("/")+fileame;//生成的html文件保存路径 out.print(templateContent); FileOutputStream fileoutputstream = new FileOutputStream(fileame);//建立文件输出流 byte tag_bytes[] = templateContent.getBytes(); fileoutputstream.write(tag_bytes); fileoutputstream.close(); 嗯,核心技术就是这样了,如果大家需求的性能更高,能改用freemarker做模板。 经过一翻调试,成功了。。呵 附上源码。。 JDK 1.5 +ECLIPSE +TOMCAT 5.0.28 + MYSQL 5.0 数据库TEST ,表名news 字段: id int 自动增长 , Title varchar(20) , Content varchar(200) , Author varchar(10) makeFile.jsp //数据库连接文件 import java.sql.*; public class DBconn { public DBconn() { // TODO Auto-generated constructor stub } public static Connection getConnection() { Connection conn = null; try { Class.forName("org.gjt.mm.mysql.Driver"); conn = DriverManager.getConnection("jdbc:mysql://" + "localhost" + "/" + "test" + "?useUnicode=true;characterEncoding=GB2312","root","111111"); } catch(Exception e) { e.printStackTrace(); } return conn; } /*public static void main(String[] args) throws Exception { Connection con=getConnection(); System.out.println(con.isClosed()); } */ } // 模板文件 template.htm
| ||||
![]() | ![]() |