网站是个投资类的门户,www.investide.cn 投资潮。
首页内容较多,有四屏多吧,数据库调用也很多,虽然数据库层做了缓存,页面上也使用了oscache,但还是感觉慢,于是想到做静态化。
用quartz来定时抓取动态页面的内容,生成静态页面
首页顶部的登录,用ajax来加载
<!-- 首页静态页的定时任务 ,每5分钟运行一次--> <bean id="indexHtmlJobBean" class="com.dbcapital.job.HtmlJob" singleton="false"></bean> <bean id="indexHtmlJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="indexHtmlJobBean"/> </property> <property name="targetMethod"> <value>execute</value> </property> </bean> <bean id="indexHtmlJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="indexHtmlJob"/> <property name="cronExpression" value="0 0/5 * * * ?"/> </bean> <!-- 首页静态页任务配置结束 -->
public void execute() { String url="http://www.investide.cn/index.do"; String filePath=PropertyUtil.getProperty("dbcapital.root.path")+"index.html"; //创建文件 File file=new File(filePath); try{ if(!file.exists()){ file.createNewFile(); } }catch(IOException e){} //生成文件 String content=UrlfileInfo.readUrlContent(url); if(!StringUtil.isEmpty(content)){ DocUtil.writeFile(content,filePath);//写静态文件 } }
public static String readUrlContent(String url){ StringBuffer sb=new StringBuffer(); try{ String strLine; URL urlObj = new URL(url); InputStream streamObj = urlObj.openStream(); InputStreamReader readerObj = new InputStreamReader(streamObj,"GBK"); BufferedReader buffObj = new BufferedReader(readerObj); while((strLine = buffObj.readLine())!=null) sb.append(strLine+"\r"); buffObj.close(); }catch(MalformedURLException e){ System.err.println("url error"); }catch(IOException e){ System.out.println("IO error"); } return sb.toString(); }
public static boolean writeFile(String str,String filePath){ boolean result=true; try{ Writer fw = new OutputStreamWriter(new FileOutputStream (filePath),"GBK"); fw.write(str); fw.close(); }catch(IOException e){ result=false; System.out.println("写文件失败"); } return result; }
ajax加载登录代码
<span id="loginInfo">正在载入,请稍后...</span>
将login.jsp的状态加载到loginInfo里
theHREF = window.top.location.href.split('/'); hostHREF=''; for(i=3;i<theHREF.length;i++){ hostHREF=hostHREF+'/'+theHREF[i]; } setTimeout("fillData('/top_login.jsp?fromUrl="+hostHREF+"&t="+new Date()+"','loginInfo')",1000);
替换登录内容的js
function fillData(url,elementId){ http_request=false; if(window.ActiveXObject){ try{ http_request=new ActiveXObject("MSXML2.XMLHttp"); }catch(e){ try{ http_request=new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){} } }else if (window.XMLHttpRequest) { // Mozilla, Safari, ... http_request = new XMLHttpRequest(); http_request.overrideMimeType('text/xml'); } http_request.onreadystatechange = function() { if (http_request.readyState == 4) { if (http_request.status == 200) { var str=http_request.responseText; document.getElementById(elementId).innerHTML=str; } else { alert("服务器忙,请稍候再试!"); } } else { document.getElementById(elementId).innerHTML="载入中,请稍候..."; } }; http_request.open('GET', url+"&t="+new Date(), true); http_request.send(null); }