仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2032|回复: 20
打印 上一主题 下一主题

[学习教程] JAVA网页设计JSP显现内容缓存技能

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:39:43 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
用winrar打包j2ee的程序和用IDE打包应用程序是一样的。按照你的想法,你是不是也希望服务器都整合由一家公司提供呢?js|缓存|技能|显现
  前段工夫做本人社区的论坛,在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源码代码以下

/***STARTFileFileCaptureFilter.java*/
packagecom.junjing.filter;
importjavax.servlet.*;
importjavax.servlet.http.*;
importjava.io.*;
publicclassFileCaptureFilterimplementsFilter
{
 privateStringprotDirPath;
 publicvoidinit(FilterConfigfilterConfig)
 throwsServletException
  {
   protDirPath=filterConfig.getServletContext().getRealPath("/");
  }
 publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)
 throwsIOException,ServletException
 {
  StringfileName=protDirPath+"forum/lastest.html";
  PrintWriterout=response.getWriter();
  FileCaptureResponseWrapperresponseWrapper=newFileCaptureResponseWrapper((HttpServletResponse)response);
  chain.doFilter(request,responseWrapper);
  //fillresponseWrapperup
  Stringhtml=responseWrapper.toString();
  //失掉的html页面了局字符串
  //responseWrapper.writeFile(fileName);
  //dumpthecontents写成html文件,也能够保留在内存
  //responseWrapper.writeResponse(out);
  //backtobrowser
  //responseWrapper.sendRedirect("lastestThread.jsp");
  }
  publicvoiddestroy(){}
}
/***ENDFileFileCaptureFilter.java*/
/***STARTFileFileCaptureResponseWrapper.java*/
packagecom.junjing.filter;
importjavax.servlet.*;
importjavax.servlet.http.*;
importjava.io.*;
publicclassFileCaptureResponseWrapper
 extendsHttpServletResponseWrapper
 {
  privateCharArrayWriteroutput;
  publicStringtoString()
  {
   returnoutput.toString();
  }
  publicFileCaptureResponseWrapper(HttpServletResponseresponse)
  {
   super(response);
   output=newCharArrayWriter();
  }
  publicPrintWritergetWriter()
  {
   returnnewPrintWriter(output);
  }
  publicvoidwriteFile(StringfileName)
   throwsIOException
   {
    FileWriterfw=newFileWriter(fileName);
    fw.write(output.toCharArray());
    fw.close();
   }
  publicvoidwriteResponse(PrintWriterout)
  {
   out.print(output.toCharArray());
  }
 }
 /***ENDFileFileCaptureResponseWrapper.java*/

  附件源代码
  不外接纳resin服务器的话,以上代码会生效。由于resin没有完成getWriter办法,而是接纳getOutputStream取而代之,以是必需修正些代码来投合resin运转情况:

/***STARTFileFileCaptureResponseWrapper.java*/
packagecom.junjing.filter;
importjavax.servlet.*;
importjavax.servlet.http.*;
importjava.io.*;
publicclassFileCaptureResponseWrapper
 extendsHttpServletResponseWrapper
{
 privateCharArrayWriteroutput;
 publicStringtoString()
 {
  returnoutput.toString();
 }
 publicFileCaptureResponseWrapper(HttpServletResponseresponse)
 {
  super(response);
  output=newCharArrayWriter();
 }
 publicPrintWritergetWriter()
 {
  returnnewPrintWriter(output);
 }
 publicvoidwriteFile(StringfileName)
 throwsIOException
 {
  FileWriterfw=newFileWriter(fileName);
  fw.write(output.toString());
  fw.close();
 }
 publicServletOutputStreamgetOutputStream()
  throwsjava.io.IOException
  {
   returnnewServletOutputStream();
  }
 publicvoidwrite(intb)
 throwsIOException
 {
  output.write(b);
 }
 publicvoidwrite(byteb[])
 throwsIOException
 {
  output.write(newString(b,"GBK"));
 }
 publicvoidwrite(byteb[],intoff,intlen)
 throwsIOException
 {
  output.write(newString(b,off,len));
 }
};
}
 publicvoidwriteResponse(PrintWriterout)
 {
  out.print(output.toCharArray());
 }
}
/***ENDFileFileCaptureResponseWrapper.java*/





为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-31 14:49

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表