1.靜態頁面
優點:相對於其他兩種頁面(動態頁面和偽靜態頁面),速度最快,而且不需要從數據庫里面提取數據,速度快的同時,也不會對服務器產生壓力。
缺點:由於數據都是存儲在HTML里面,所以導致文件非常大。並且最嚴重的問題是,更改源代碼必須全部更改,而不能改一個地方,全站靜態頁面就自動更改了。如果是大型網站有較多的數據,那會占用大量的服務器空間,每次添加內容都會生成新的HTML頁面。如果不是專業人士維護比較麻煩。
動態頁面靜態化:
1 /** 2 * 動態頁面靜態化 3 */ 4 public class GoToHtml { 5 6 private static String title ="我是標題"; 7 private static String h1 ="我是 H1 標簽"; 8 private static String h2 ="我是 H2 標簽"; 9 private static String h3 ="我是 H3 標簽"; 10 private static String h4 ="我是 H4 標簽"; 11 private static String h5 ="我是 H5 標簽"; 12 13 /** 14 * 根據本地模板生成靜態頁面 15 * 16 * @param filePath HTML 模版路徑 17 * @param HtmlFile HTML 保存路徑 18 * @return 19 */ 20 public static boolean toHtmlFile(String filePath, String HtmlFile) { 21 String str = ""; 22 try { 23 String tempStr = ""; 24 FileInputStream is = new FileInputStream(filePath);// 讀取模塊文件 25 BufferedReader br = new BufferedReader(new InputStreamReader(is)); 26 while ((tempStr = br.readLine()) != null) 27 str = str + tempStr; 28 is.close(); 29 } catch (IOException e) { 30 e.printStackTrace(); 31 return false; 32 } 33 try { 34 // 替換掉模塊中相應的地方 35 str = str.replaceAll("###title###", title); 36 str = str.replaceAll("###h1###", h1); 37 str = str.replaceAll("###h2###", h2); 38 str = str.replaceAll("###h3###", h3); 39 str = str.replaceAll("###h4###", h4); 40 str = str.replaceAll("###h5###", h5); 41 File f = new File(HtmlFile); 42 BufferedWriter o = new BufferedWriter(new FileWriter(f)); 43 o.write(str); 44 o.close(); 45 } catch (IOException e) { 46 e.printStackTrace(); 47 return false; 48 } 49 return true; 50 } 51 52 public static void main(String[] args) { 53 long startTime = System.currentTimeMillis(); //獲取開始時間 54 SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); 55 String newFileName = df.format(new Date()); 56 toHtmlFile("d:/b.html", "d:/" + newFileName + ".html"); 57 long endTime = System.currentTimeMillis(); //獲取結束時間 58 System.out.println("程序運行時間: " + (endTime - startTime) + "ms"); 59 } 60 }
模塊文件代碼:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>###title###</title> 5 </head> 6 <body> 7 <h1>###h1###</h1> 8 <h2>###h2###</h2> 9 <h3>###h3###</h3> 10 <h4>###h4###</h4> 11 <h5>###h5###</h5> 12 </body> 13 </html>
於是便能生成靜態頁面了。
2.動態頁面
優點:空間使用量非常小,一般幾萬條數據的網站,使用動態頁面,可能只有幾M的文件大小,而使用靜態頁面少則十幾M,多則幾十M甚至更多。因為數據庫是從數據庫里面調出來的,如果需要修改某些值,直接更改數據庫,那么所有的動態網頁,就會自動更新了。這一點相比靜態頁面優點就顯而易見了。
缺點:用戶訪問速度較慢,為什么會訪問動態頁面較慢呢?這個問題要從動態頁面的訪問機制說起了,其實我們的服務器上面有一個解釋引擎,當用戶訪問的時候,這個解釋引擎就會把動態頁面翻譯為靜態頁面,這樣大家就能夠在瀏覽器里面查看源碼了。而這個源碼就是解釋引擎翻譯之后的源碼。除訪問速度較慢以外,動態頁面的數據是從數據庫里面調用過來的如果訪問的人數較多,數據庫的壓力會非常大。不過現在的動態程序多數都使用了緩存技術。但是總體來講,動態頁面對於服務器的壓力比較大一些。同時動態頁面的網站一般對於服務器的要求比較高一些,同時訪問的人越多也會造成服務器的壓力越大。
3.偽靜態頁面
偽靜態頁面定義:“假”靜態頁面,實質上是動態頁面。
優點:相比靜態頁面而言,並沒有速度上的明顯提升,因為是“假”靜態頁面,其實還是一個動態頁面,也是同樣需要翻譯為靜態頁面的。最大的好處就是讓搜索引擎(Search Engine)把自己的網頁當做靜態頁面來處理。
缺點:顧名思義,“偽靜態”就是“假靜態”,搜索引擎不會把他當做靜態頁面來處理,這只是我們靠經驗考邏輯去分析的,並不一定准確。或許搜索引擎直接把它認為是動態頁面。
動態頁面變為偽靜態:
1、下載並引用jar包: urlrewritefilter-4.0.3.jar
2、配置 web.xml ,在 web.xml 中配置過濾器:
1 <!--配置Url Rewrite的Filter --> 2 <filter> 3 <filter-name>UrlRewriteFilter</filter-name> 4 <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> 5 </filter> 6 <!--配置Url Rewrite的Filter攔截所有請求--> 7 <filter-mapping> 8 <filter-name>UrlRewriteFilter</filter-name> 9 <url-pattern>/*</url-pattern> 10 <dispatcher>REQUEST</dispatcher> 11 <dispatcher>FORWARD</dispatcher> 12 </filter-mapping>
3、在 WEB-INF 目錄下新建文件 urlrewrite.xml 文件:
1 <?xml version="1.0" encoding="utf-8"?> 2 <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN" 3 "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd"> 4 <urlrewrite> 5 <rule> 6 <from>/userinf-([0-9]+).html</from> 7 <to type="forward">/NewFile.jsp?username=$1</to> 8 </rule> 9 <!-- forward redirect 10 <outbound-rule> 11 <from>/NewFile.jsp\?username=([0-9]+)</from> 12 <to>/userinf-$1.html</to> 13 </outbound-rule> --> 14 </urlrewrite>
4、建立一個簡單的 jsp 頁面:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5 <html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 8 <title>Insert title here</title> 9 </head> 10 <body> 11 <% 12 String user = request.getParameter("username"); 13 %> 14 <% 15 out.println("現在時間是: " + new java.util.Date() + "<br />"); 16 out.println("用戶名: " + user); 17 %> 18 <br /> 19 <c:url value="/NewFile.jsp?username=8" var="tempNewsUrl"></c:url> 20 <a href="${tempNewsUrl}">新聞2</a> 21 </body> 22 </html>
5、展示效果
輸入偽靜態頁面地址,事實上請求的是動態頁面數據;
簡單總結:
- 靜態頁面訪問最快;維護較為麻煩。
- 動態頁面占用空間小、維護簡單;訪問速度慢,如果訪問的人多,會對數據庫造成壓力。
- 使用純靜態和偽靜態對於SEO(Search Engine Optimization:搜索引擎優化)沒有什么本質的區別。
- 使用偽靜態將占用一定量的CPU占用率,大量使用會導致CPU超負荷。
參考鏈接: