自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JSP技術(shù)實現(xiàn)動態(tài)頁面到靜態(tài)頁面的方案

開發(fā) 后端
實現(xiàn)動態(tài)頁面到靜態(tài)頁面以減小數(shù)據(jù)庫與服務(wù)器的壓力和負擔,這是很多實際開發(fā)應(yīng)用工作當中的一個理想的解決辦法,那么本文就向你講解如何實現(xiàn)實現(xiàn)動態(tài)頁面到靜態(tài)頁面的方案。

對于JSP技術(shù)實現(xiàn)動態(tài)頁面到靜態(tài)頁面的方案,我們從三個步驟來說明:

JSP技術(shù)實現(xiàn)動態(tài)頁面到靜態(tài)頁面的方案***:

為了能深入淺出的理解這個框架的由來,我們首先來了解一下JSP解析器將我們寫的JSP代碼轉(zhuǎn)換成的JAVA文件的內(nèi)容。

下面是一個JSP文件test.jsp

  1. ﹤%@ page language=java  contentType=text/html;charset=GB2312 %﹥  
  2.  
  3. ﹤%  
  4. out.write(﹤!--文件開始--﹥);  
  5. %﹥  
  6.  
  7. ﹤html﹥  
  8. ﹤head﹥  
  9. ﹤body﹥  
  10. ﹤%=輸出%﹥  
  11. ﹤/body﹥  
  12. ﹤/head﹥  
  13. ﹤/html﹥  
  14.  

經(jīng)過Tomcat轉(zhuǎn)換出的Java文件test$jsp.java內(nèi)容如下:

  1. package org.apache.jsp;  
  2. import javax.servlet.*;  
  3. import javax.servlet.http.*;  
  4. import javax.servlet.jsp.*;  
  5. import org.apache.jasper.runtime.*;  
  6.  
  7. public class test$jsp extends HttpJspBase {  
  8.  
  9.  static {  
  10.  
  11.  }  
  12.  public testOutRedir$jsp( ) {  
  13.  }  
  14.  
  15.  private static boolean _jspx_inited = false;  
  16.  
  17.  public final void _jspx_init() throws org.apache.jasper.runtime.JspException {  
  18.  
  19.     }  
  20.    public void _jspService(HttpServletRequest request, HttpServletResponse  response)  
  21.  
  22.         throws java.io.IOException, ServletException {  
  23.  JspFactory _jspxFactory = null;  
  24.  PageContext pageContext = null;  
  25.  HttpSession session = null;  
  26.         ServletContext application = null;  
  27.         ServletConfig config = null;  
  28.        JspWriter outnull;  
  29.         Object page = this;  
  30.         String  _value = null;  
  31.         try {  
  32.  
  33.             if (_jspx_inited == false) {  
  34.                 synchronized (this) {  
  35.                     if (_jspx_inited == false) {  
  36.                         _jspx_init();  
  37.                        _jspx_inited = true;  
  38.  
  39.                     }  
  40.                 }  
  41.             }  
  42.             _jspxFactory = JspFactory.getDefaultFactory();  
  43.  
  44.             response.setContentType(text/html;charset=GB2312);  
  45.  
  46.             pageContext = _jspxFactory.getPageContext(this, request, response,  
  47.  
  48.                           , true, 8192, true);  
  49.  
  50.             application = pageContext.getServletContext();  
  51.             config = pageContext.getServletConfig();  
  52.             session = pageContext.getSession();  
  53.            outpageContext.getOut();  
  54.  
  55.                //為了節(jié)省篇幅,我刪除了解釋器添加的注釋  
  56.  
  57.                out.write(\r\n);  
  58.  
  59.   //上一句是由于  
  60.  ﹤%@ page language=java  contentType=text/html;charset=GB2312 %﹥后面的換行產(chǎn)生的  
  61.  
  62.                out.write(﹤!--文件開始--﹥);  
  63.  
  64.                out.write(\r\n﹤html﹥\r\n﹤head﹥\r\n﹤body﹥\r\n);  
  65.  
  66.                out.print(輸出);  
  67.  
  68.                out.write(\r\n﹤/body﹥\r\n﹤/head﹥\r\n﹤/html﹥\r\n);  
  69.  
  70.         } catch (Throwable t) {  
  71.  
  72.             if (out!= null &&out.getBufferSize() != 0)  
  73.  
  74.                out.clearBuffer();  
  75.  
  76.             if (pageContext != null) pageContext.handlePageException(t);  
  77.  
  78.         } finally {  
  79.  
  80.             if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext);  
  81.  
  82.         }  
  83.  
  84.     }  
  85.  
  86. }  
  87.  

從上面的代碼中可以清晰的看到JSP內(nèi)建的幾個對象(out、request、response、session、pageContext、application、config、page)是怎么產(chǎn)生的,懂servlet的朋友一看就能明白。

下面重點理解一下out對象,它被聲明為JspWriter類型,JspWriter是一個抽象類,在包javax.servlet.jsp中可以找到它的定義。

  1. abstractpublicclassjavax.servlet.jsp.JspWriterextends java.io.Writer{  
  2.  
  3.       final public static intNO_BUFFER = 0;  
  4.  
  5.       final public static intDEFAULT_BUFFER = -1;  
  6.  
  7.       final public static intUNBOUNDED_BUFFER = -2;  
  8.  
  9.       protected intbufferSize;  
  10.  
  11.       protected BooleanautoFlush;  
  12.  
  13.       protectedjavax.servlet.jsp.JspWriter(intarg1,booleanarg2);  
  14.  
  15.         
  16.  
  17.    abstractpublicvoidnewLine()throwsIOException;  
  18.  
  19.    abstractpublicvoidprint(booleanarg0)throwsIOException;  
  20.  
  21.    abstractpublicvoidprint(chararg0)throwsIOException;  
  22.  
  23.    abstractpublicvoidprint(intarg0)throwsIOException;  
  24.  
  25.    abstractpublicvoidprint(longarg0)throwsIOException;  
  26.  
  27.    abstractpublicvoidprint(floatarg0)throwsIOException;  
  28.  
  29.    abstractpublicvoidprint(doublearg0)throwsIOException;  
  30.  
  31.    abstractpublicvoidprint(char[]arg0)throwsIOException;  
  32.  
  33.    abstractpublicvoidprint(Stringarg0)throwsIOException;  
  34.  
  35.    abstractpublicvoidprint(Objectarg0)throwsIOException;  
  36.  
  37.    abstractpublicvoidprintln()throwsIOException;  
  38.  
  39.    abstractpublicvoidprintln(booleanarg0)throwsIOException;  
  40.  
  41.    abstractpublicvoidprintln(chararg0)throwsIOException;  
  42.  
  43.    abstractpublicvoidprintln(intarg0)throwsIOException;  
  44.  
  45.    abstractpublicvoidprintln(longarg0)throwsIOException;  
  46.  
  47.    abstractpublicvoidprintln(floatarg0)throwsIOException;  
  48.  
  49.    abstractpublicvoidprintln(doublearg0)throwsIOException;  
  50.  
  51.    abstractpublicvoidprintln(char[]arg0)throwsIOException;  
  52.  
  53.    abstractpublicvoidprintln(Stringarg0)throwsIOException;  
  54.  
  55.    abtractpublicvoidprintln(Objectarg0)throwsIOException;  
  56.  
  57.    abstractpublicvoidclear()throwsIOException;  
  58.  
  59.    abstractpublicvoidclearBuffer()throwsIOException;  
  60.  
  61.    abstractpublicvoidflush()throwsIOException;  
  62.  
  63.    abstractpublicvoidclose()throwsIOException;  
  64.  
  65.    publicintgetBufferSize() ;  
  66.  
  67.    abstractpublicintgetRemaining();  
  68.  
  69.    publicbooleanisAutoFlush();  
  70.  
  71. }  
  72.  

相信到這里你可能已經(jīng)知道怎么做了。是的,來個偷天換日,繼承JspWriter類,然后實現(xiàn)其定義的虛函數(shù),然后把out變量替換成你自己實現(xiàn)的類的實例就ok了。

JSP技術(shù)實現(xiàn)動態(tài)頁面到靜態(tài)頁面的方案第二:

實現(xiàn)替換

假設(shè)

 

  1. ﹤%@ page language=java  contentType=text/html;charset=GB2312 import=jwb.util.HtmlIntoFile,jwb.util.TempSinglet,java.io.File%﹥  
  2. ﹤%  
  3.  
  4. JspWriter outout_bak =out;String arg1=argument1;String filePath = /cache/根據(jù)參數(shù)生成文件名_ + arg1 + .html;  
  5.  
  6. //首先判斷文件是否已經(jīng)存在,如果不存在則執(zhí)行本頁面,否則跳轉(zhuǎn)到靜態(tài)頁面就OK了File f = new File(pageContext.getServletContext().getRealPath(filePath));  
  7.  
  8. if(f.exists()){ out_bak.clear(); pageContext.forward(filePath); System.out.println(直接轉(zhuǎn)到靜態(tài)頁面);  
  9.  
  10.  return;}outnew HtmlIntoFile(pageContext.getServletContext().getRealPath(filePath));out.write(﹤!--文件開始--﹥);  
  11. %﹥  
  12. ﹤html﹥  
  13. ﹤head﹥  
  14. ﹤body﹥  
  15. ﹤%= 看吧,這就是輸出被重定向到文件的實現(xiàn),很簡單吧^_^%﹥  
  16. ﹤/body﹥  
  17. ﹤/head﹥  
  18. ﹤/html﹥  
  19. ﹤%  
  20. out.close();  
  21.  
  22. //關(guān)閉生成的靜態(tài)文件out_bak.clear();pageContext.forward(filePath);  
  23.  
  24. System.out.println(執(zhí)行本頁面后再轉(zhuǎn)到靜態(tài)頁面);return;  
  25. %﹥  
  26.  

 

JSP技術(shù)實現(xiàn)動態(tài)頁面到靜態(tài)頁面的方案第三:

更新問題

下面就討論一下如何更新生成靜態(tài)文件,其實從上面實現(xiàn)中你可以看到,很簡單的就是將生成的靜態(tài)文件刪除即可,至于什么時候刪除,要看你的需求了。我能想到的幾種情況如下

◆當用來生成頁面的數(shù)據(jù)更新時

◆如果不需要很提供時時的數(shù)據(jù)可以定時更新

◆永遠不更新

那么通過這個JSP技術(shù)實現(xiàn)動態(tài)頁面到靜態(tài)頁面的方案,從動態(tài)頁面到靜態(tài)的轉(zhuǎn)變就已經(jīng)告一段落,你是否有點啟發(fā)呢?

 

【編輯推薦】

  1. JSP開發(fā)中的腳本編程淺析
  2. JSP教程基礎(chǔ)篇之JSP的技術(shù)特點
  3. JSP教程基礎(chǔ)知識之JSP2.0特性
  4. JSP入門之網(wǎng)站環(huán)境搭建的步驟
  5. JSP入門之避免Form表單重復(fù)提交的幾種方案
責任編輯:仲衡 來源: 互聯(lián)網(wǎng)轉(zhuǎn)載
相關(guān)推薦

2009-07-06 18:23:56

Struts和JSPJSP頁面

2009-07-03 18:12:49

JSP頁面

2009-11-23 16:09:50

PHP實現(xiàn)偽靜態(tài)化頁面

2009-01-18 10:56:27

JSTLEL表達式JSP標準標記庫

2011-05-11 16:54:49

JSP

2011-05-06 09:36:16

動態(tài)頁面

2009-07-02 09:25:41

JSP實現(xiàn)頁面跳轉(zhuǎn)

2009-02-05 17:09:02

動態(tài)圖片JSPTomcat

2009-08-24 18:00:52

ASP.NET模板生成

2009-06-25 14:05:01

JavaBean實現(xiàn)J

2009-07-01 11:05:18

頁面與代碼分離JSP源碼

2009-07-06 09:34:19

JSP頁面

2009-07-01 18:50:29

Dreamweaver

2012-06-13 02:10:46

Java并發(fā)

2012-07-19 10:59:18

Jav并發(fā)

2009-07-24 10:53:51

ASP.NET實現(xiàn)靜態(tài)

2010-03-25 18:09:23

Nginx配置文件

2012-05-04 09:40:01

JSP時間控件Java

2009-07-06 10:00:31

JSP頁面?zhèn)髦?/a>

2009-03-05 10:10:52

餅圖數(shù)據(jù)庫JSP
點贊
收藏

51CTO技術(shù)棧公眾號