免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
請問如何將jsp動態(tài)網頁轉換成靜態(tài)頁面 Java / Web 開發(fā)

請問如何將jsp動態(tài)網頁轉換成靜態(tài)頁面

zhangwei9730 (zhangwei
   2003-12-11 09:40:29 在 Java / Web 開發(fā) 提問

大家好:  
      我最近作的一個系統(tǒng)。由于大批量的訪問。造成數(shù)據(jù)庫負擔很重。  
  如果我可以將jsp動態(tài)網頁轉換成靜態(tài)頁面,那么訪問的時候就不需要頻繁的訪問數(shù)據(jù)庫了。但是如何實現(xiàn)哪?那位高人能指點一二。多謝
問題點數(shù):100、回復次數(shù):5
1樓  jewelsh   (blog.mynetech.com)
 回復于 2003-12-11 09:59:48  得分 100

給個例子你看看。  
  --------------  
  JSP   顯示內容緩存技巧  
  前段時間做自己社區(qū)的論壇,在jive   的基礎上做一個頁面顯示所有論壇的帖子,可以稱  
  之為總版,模仿Forum   類的接口做個SuperForum   并且實現(xiàn)Cachable,不過因為這個頁面  
  刷新量比較大,雖然被Cache   了,我還是想辦法進行頁面的緩存,感覺用jsp   產生的html  
  靜態(tài)內容當緩存,頁面訪問速度應該有所提高。  
  首先想到的一種辦法,是采用java.net   的URLConnection   把服務器上的jsp   抓過來做緩  
  存,不過我覺得這樣做太見外了,自己服務器上的東西,為何要用HTTP   去訪問.于是想另外一  
  個辦法,把jsp   的out   對象的輸出控制到自己希望的地方.比如輸出到靜態(tài)文件,又或者保存  
  成全局的字符串變量.這樣的話,瀏覽就不需要執(zhí)行jsp,只是瀏覽該html   了.僅僅在數(shù)據(jù)有更  
  新的時候進行一次update   操作,把jsp   重新輸出為html.  
  我覺得,瀏覽事件比數(shù)據(jù)插入或更新發(fā)生的次數(shù)多的時候.不妨試試這個辦法來提高頁  
  面訪問速度.  
  整件事情有點像把jsp   當作模板,生成靜態(tài)的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   沒有實現(xiàn)getWriter   方法,而  
  是采用getOutputStream   取而代之,所以必須修改些代碼來迎合resin   運行環(huán)境:  
  /**   *   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   */  
 
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
jsp生成靜態(tài)頁面
Openfire開發(fā)帶有JSP和Servlet的插件
通過HttpServletResponseWrapper修改response輸出流
Java Web servlet與cookie
JAVA實現(xiàn)遠程文件讀取
java socket編程的一個例子(線程池)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服