1. 程式人生 > >JSP基礎知識詳解

JSP基礎知識詳解

一、JSP基礎語法

    1、JSP簡介

       JSP(Java Server Pages),其根本是一個簡化的Servlet設計,它實現了在Java中使用HTML標籤。JSP是一種動態網頁技術標準,也是JavaEE的標準。JSP和Servlet一樣,是在伺服器端執行的。JSP是在Servlet技術發展之後為了讓開發者寫html標籤更方便而發展起來的技術,JSP實際上就是Servlet。

       但是,人們通常把Servlet作為Web應用中的控制組件來使用,只負責響應請求產生資料,並把資料通過轉發技術帶給jsp,而把jsp技術作為資料顯示模板來使用。這樣使程式結構更清晰,可讀性和可維護性更高。

     2、常用動態網站開發技術

         JSP:Java平臺,安全性高,適合開發大型的,企業級的,分散式的Web應用程式。如Hadoop,電子銀行,12306等

         ASP.net:.Net平臺,簡單易學。但是安全性以及跨平臺型差。

         PHP:簡單,高效,成本低開發週期端,特別適合中小型企業的Web應用開發。(LAMP:Linux+Apache+MySQL+PHP)

      3、JSP頁面元素構成

         3.1、JSP指令

JSP指令(directive)是為JSP引擎二設計的,它們並不直接產生任何可見輸出,而只是告訴引擎如何處理JSP頁面中的其餘部分。在JSP2.0規範中共定義了三個指令,基本語法格式為,<%@ 指令 屬性名="值" %>,如果一個指令有多個屬性,這多個屬性可以寫在一個指令中,也可以分開寫。

              page指令:page指令用於定義JSP頁面的各種屬性,無論指令出現在頁面中的什麼地方,它作用的都是整個JSP頁面,為了保持程式的可讀性和遵循良好的程式設計習慣,page指令通常放在整個JSP頁面的起始位置,一個頁面可以有多個page指令。

<%@ page language="java" contentType="text/html,ISO-8859-1" import="java.util.*,java.sql.*,java.io.*" 
         session="true|flase" buffer="none|8kb|sizekb" autoFlush="true|false" info="一段字串內容" 
         errorPage="relative_url" isErrorpage="true|false"%>
            1、language 指定JSP頁面使用的指令碼語言,預設值為java
            2、contentType 用來指定JSP頁面的檔案型別和所採用的編碼方式, 預設值為“text/html,ISO-8859-1”
            3、import 通過該屬性來引用指令碼語言中使用到的類檔案,匯入多個類或包用逗號分隔。
               JSP引擎自動匯入java.lang.*;java.servlet.*;javax.servlet.jsp.*;javax.servlet.http.*
            4、pageEncoding 指定JSP頁面的編碼方式, 預設值為“ISO-8859-1”
            5、session,用來說明是否建立session物件,預設為true
            6、buffer,用來指定out物件是否建立buffer緩衝區,並指定緩衝區大小。預設為8kb,none表示不建立緩衝區。
            7、autoFlush,緩衝區是否自動重新整理,預設為true,如果為false,緩衝區滿後不手動重新整理會包異常。
            8、info,定義一個字串常量,使用getServletInfo方法可以列印。
            9、errorPage,指定異常處理頁。也可以在web.xml中使用<error-page>元素為整個WEB應用程式設定處理頁面,
              其中的<exception-type>子元素指定異常類的完全限定名,<location>元素指定以"/"開頭的錯誤處理頁面的路徑。
              如果設定了某個JSP頁面的errorPage屬性,那麼在web.xml檔案中這是的錯誤處理將不對該頁面起作用。

               include指令:用於引入其他JSP頁面,如果使用include指令引入了其他JSP頁面,那麼JSP引擎將把這兩個JSP翻譯成一個Servlet,所以include指令引入通常也成為靜態引入。

               <%@ include file=“被包含元件的絕對URL或相對URL"%>

               被引入的檔案必須遵循JSP語法。被引入的檔案可以是任意副檔名,即使其副檔名是html,JSP引擎也會按照處理jsp頁面的方式處理它裡面的內容,為了見名知意,JSP規範建議使用.jspf(JSP fragments)作為靜態引入檔案的副檔名。由於使用include指明將會涉及到2個JSP頁面,並會把JSO翻譯成一個Servlet,所以這兩個JSP頁面的指令不能衝突(pageEncoding和導包除外)

               taglib指令:使用標籤庫定義顯得自定義標籤,在JSP頁面中啟用定製行為。

          3.2、表示式

                在JSP頁面中執行的表示式 <%=表示式%>,注意表示式不以分號結束。例如,當前時間:<%= new java.util.Date() %>

          3.3、指令碼片段

                在JSP頁面中插入多行java程式碼 <% Java程式碼 %>,JSP引擎在翻譯JSP頁面時,會將JSP指令碼片段中的Java程式碼原封不動的放到Servlet的_jspServlet方法中,所以,<% %>中的Java程式碼必須嚴格遵循java語法。

          3.4、宣告

                在JSP頁面中定義變數或者方法  <%! Java程式碼 %>,宣告中的Java程式碼被翻譯到_jspService方法的外面,屬於類,所以可以宣告成員變數並初始化,也可以宣告方法或定義方法,同時還可以宣告靜態程式碼塊。

                JSP隱式物件的作用範圍僅限於Servlet的_jspService方法,所以在JSP宣告中不能使用這些隱式物件

<%!
static 
{ 
    System.out.println("loading Servlet!"); 
}
private int globalVar = 0;
public void jspInit()
{
    System.out.println("initializing jsp!");
}
%>
<%!
public void jspDestroy()
{
    System.out.println("destroying jsp!");
}
%>

          3.5、註釋(3種方式)

                 HTML註釋:<!--html註釋,且客戶端可見-->

                 JSP註釋:<%--JSP註釋,客戶端不可見--%>

                 JSP指令碼註釋:即java註釋 //單行 , /*多行 */

          3.6、靜態內容

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

<html>
  <head>
    <title>index.jsp page</title>
  </head>
  <body>
    <h1>大家好</h1>
    <hr>
    <!-- 我是HTML註釋,在客戶端可見 -->
    <%-- 我是JSP註釋,在客戶端不可見 --%>
    <%! 
       String s = "張三";  //聲明瞭一個字串變數
       int add(int x,int y) //聲明瞭一個返回整型的函式,實現兩個整數的求和。
       {
          return x+y;
       }
    %>
    <% 
       //單行註釋
       /*多行註釋*/
       out.println("大家好");
    %>
    <br>
    你好,<%=s %><br>
    x+y=<%=add(10,5) %><br>    
  </body>
</html>

    4、JSP執行原理及生命週期

          

           使用者第一次請求Tomcat會將jsp檔案程式設計成一個Servlet的java檔案,並將java檔案編譯成class檔案,載入到記憶體,生成檔案在Tomcat的work目錄的對應專案資料夾。如果jsp頁面發生了修改,JSP引擎會對其進行重新編譯並載入到記憶體,以方便使用者請求。注意,使用者第一次請求一個jsp頁面時,首先被執行的方法是構造方法。

           _jspService()方法被呼叫來處理客戶端的請求。對每一個請求,JSP引擎建立一個執行緒來處理該請求。如果有多個客戶端同時請求該JSP檔案,則JSP引擎會建立多個執行緒。每個客戶端請求對應一個執行緒。以多執行緒方式執行可以大大降低對系統資源的需求,提高系統的併發量及響應時間。但也要主要多執行緒的程式設計帶來的額同步問題,由於該Servlet始終駐於記憶體,所以響應是非常快的。

            JSP引擎在呼叫JSP對應的_jspServlet時,會傳遞或建立9個與web開發相關的物件共_jspServlet使用。JSP技術的設計者為便於開發人員在編寫JSP頁面是獲得這些web物件的引用,特意定義了9個相應的變數,開發人員在JSP頁面中通過這些變數就可以快速獲得這9大物件的引用。

二、JSP 9個內建物件

      1、內建物件簡介

           JSP內建物件是Web容器建立的一組物件,不使用new關鍵字就可以使用的內建物件。

           

      2、四種作用域範圍

         application_SCOPE:作用於整個Web應用,多個使用者之間共享。

         session_SCOPE:作用於整個Web應用,單個使用者之間共享。

         request_SCOPE:作用於請求,轉發間請求共享。

         page_SCOPE:作用於當前頁面,當前頁面可見。

      3、out物件

         緩衝區:Buffer,即記憶體中的一塊區域用來儲存臨時資料

         out物件:是JspWriter類的例項,是向客戶端傳送文字常用的物件,是通過呼叫pageContext物件的getOut方法返回的,其作用和用法與ServletResponse.getWriter方法返回的PrintWriter物件非常相似。JSP頁面中的out隱式物件的型別為JspWriter,JspWriter相當於一種帶快取功能的PrintWriter,設定JSP頁面的page指令的buffer屬性可以調整它的快取大小,甚至關閉它的快取。當緩衝區滿足如下條件是才會寫入Servlet引擎提供的緩衝區:設定page指令的buffer屬性關閉了out物件的快取功能;out物件的緩衝區已滿。整個JSP頁面結束。      

<%
   out.println("aaa");
   response.getWriter().write("bbb");
%>
"bbb會比aaa先輸出"

常用方法:1、void println(); 向客戶端列印字串                    2、void clear(); 清除緩衝區的內容,如果在flush之後呼叫會丟擲異常。                    3、void clearBuffer(); 清除緩衝區的內容,如果在flush之後呼叫不會丟擲異常                    4、void flush(); 將緩衝區內容輸出到客戶端                    5、int getBufferSize(); 返回緩衝區以位元組數的大小,如不設緩衝區則為0                    6、int getRemaining(); 返回緩衝區還剩餘多少可用                    7、boolean isAutoFlush(); 返回緩衝區滿是,是自動清空還是丟擲異常                    8、void close(); 關閉輸出流

      4、request/response物件

          請求響應機制請參考本部落格的Servlet部分。

           4.1、表單的兩種提交方式:get與post

                get:以明文的方式通過URL提交資料,資料在URL中可以看到。提交的資料最多不超過2KB。安全性較低,但效率比post方式搞。適合提交資料量不大,安全性高的資料。比如:搜尋、查詢等功能

                post:將使用者提交的資訊封裝在HTML header內。適合提交資料量大,安全性高的使用者資訊。比如:註冊、修改、上傳等功能。

           4.2、request物件

                客戶端的請求資訊被封裝在request物件中,通過它才能瞭解到客戶端的需求,然後做出響應。它是HttpServletRequest類的例項。request物件具有請求域,即完成客戶端的請求之前,該物件一直有效。             

  1. //request常用方法:
  2. String getParameter();返回指定引數的引數值
  3. String[] getParameterValues();返回指定引數的所有值
  4. void setAttribute();儲存此請求中的屬性
  5. object getAttribute();返回指定屬性的屬性值
  6. String getContentType();得到請求體的MIME型別
  7. String getProtocol();返回請求用的協議及版本號
  8. String getServerName();返回接受請求的伺服器主機名
  9. int getServerPort();返回伺服器接受此請求的埠號
  10. String getCharacterEncoding();返回字元編碼方式
  11. void setContentEncoding();設定請求的字元編碼方式
  12. int getContentLength();返回請求體的長度(以位元組數)
  13. String getRemoteAddr();返回傳送此請求的客戶端IP地址
  14. String getRealPath(String path);返回一個虛擬路徑的真實路徑或相對路徑的絕對路徑
  15. StringgetContextPath();返回上下文路徑,即專案的根目錄

                中文亂碼問題:request.setCharacterEncoding("UTF-8");

                URL中中文亂碼問題:Tomcat的/conf/server.xml 的新增<Connector URIEncoding="UTF-8">屬性。

           4.3、response物件

                response物件包含了響應客戶請求的有關資訊,但在JSP中很少直接用到它。它是HttpServletResponse類的例項。response物件具有頁面作用域,及訪問一個頁面時,該頁面內的response物件只能對這次訪問有效,其他的response物件對當前頁面無效。           

  1. //response物件的常用方法
  2. String getCharacterEncoding();返回響應用的是何種字元編碼
  3. void setContentType();設定響應的MIME型別,一般為"text/html, charset=UTF-8"
  4. PrintWriter getWriter();返回可以向客戶端輸出字元的一個物件("注意比較:PrintWriter與內建out物件的區別,PrintWriter物件的其輸出總是提前於內建out物件,或者在out中手動flush")
  5. sendRedirect(loaction);重新定向客戶端的請求

                 請求重定向:是客戶端行為,response。sendRedirect(),從本質上將等同於兩次請求,前一次的請求物件不會儲存,位址列的URL地址會改變。

                 請求轉發:是伺服器行為,request.getRequestDispatcher().forward();是一次請求,轉發後請求物件會儲存,位址列的URL地址不會改變。

      5、session物件

          session表示客戶端與伺服器的一次會話,Web中的session指的是使用者在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間,也就是使用者瀏覽這個網站所花費的時間。

          在伺服器的記憶體中,為不同的使用者儲存著不同的session。

          session物件是一個JSP內建的物件。

          session物件在第一個JSP頁面被裝載是自動建立,完成會話期管理。

          從一個客戶開啟瀏覽器並連線到伺服器開始,到客戶關閉瀏覽器離開這個伺服器結束,被稱為一個會話。

          當一個客戶訪問一個伺服器時,肯能會在伺服器的幾個頁面之間切換,伺服器應當通過某種辦法知道這是一個客戶,就需要session物件。

          session物件是HttpSession類的例項。

  1. //session的常用方法
  2. long getCreationTime();返回session建立時間
  3. String getId();返回session建立時JSP引擎為它設的唯一ID號
  4. Object setAttribute();使用指定名稱將物件繫結到此會話
  5. Object getAttribute();返回與此會話中的指定名稱繫結在一起的物件,沒有返回null
  6. String[] getValueNames();返回一個包含此session中所有可用屬性的陣列
  7. int getMaxInactiveInterval();返回兩次強求間隔多長時間此session被取消(單位秒)
  8. void setMaxInactiveInterval();設定session存活時間。

          session的生命週期:

              建立:當客戶端第一次訪問某個jsp或者Servlet時候,伺服器會為當前會話建立一個SessionId,每次客戶端向服務端傳送請求時,都會將此SessionId攜帶過去,服務端會對此SessionId進行校驗。

              活動: 某次會話當中通過超連結開啟的新頁面屬於同一次會話。只要當前會話頁面沒有全部關閉,重新開啟新的瀏覽器視窗訪問同一專案資源時屬於同一次會話。除非本次會話的所有頁面都關閉後,在重新訪問某個jsp或者Servlet將會建立新的會話(但此時原有會話還存在,這個就的SessionId仍然存在於服務端,只不過再也沒有客戶端會攜帶它然後教育服務端校驗,直到該會話超時。)。

              銷燬:有三種銷燬方式

                    1、呼叫了session.invalidate()方法

                    2、Session過期(超時)可以在web.xml中配置Session超時時間<session-config><session-timeout>1單位是分鐘

                    3、伺服器重新啟動

      6、application物件

             application物件實現了使用者間資料的共享,可存放全域性變數。

             application開始於伺服器的啟動,終止於伺服器的關閉。

             在使用者的前後連線或不同使用者之間的連線中,可以對application物件的同一屬性進行操作。

             在任何地方對application物件屬性的操作,都將影響到其他使用者對此的訪問。

             伺服器的啟動和關閉決定了application物件的生命。

             application物件是ServletContext類的例項。     

  1. //application的常用方法
  2. void setAttribute();使用指定名稱將物件繫結到此會話
  3. Object getAttribute();返回與此會話中的指定名稱繫結在一起的物件,如果沒有,返回null
  4. Enumeration getAttributeNames();返回所有可用屬性名的列舉
  5. String getServerInfo();返回JSP(Servlet)引擎名及版本號

       7、page物件

             page物件就是指向當前jsp頁面本身,有點像類中的this指標,它是java.lang.Object類的例項。常用方法就是Object類的成員方法。

       8、pageContext物件  

              pageContext物件是JSP技術中最重要的一個物件,它代表JSP頁面的執行環境,這個物件不僅封裝了對其他8個隱式物件的引用,其自身還是一個域物件,可以用來儲存資料。並且,這個物件還封裝了web開發中經常涉及到的一些常用操作,例如include,forward其他資源、檢索其他域物件中的屬性等。

              pageContext物件提供了對jsp頁面內所有的物件及名字空間的訪問。該物件可以訪問到本頁所在的Session,也可以取本頁所在的application中的屬性值。該物件相當也頁面中所有功能的集大成者。該物件的本類名也叫pageContext。             

  1. //pageContext的常用方法
  2. JspWriter getOut();返回當前客戶端響應被使用的out物件
  3. HttpSession getSession();返回當前頁中的Session物件
  4. Object getPage();返回當前頁的page物件
  5. ServletRequest getRequest();返回當前頁的Request物件
  6. ServletResponse getResponse();返回當前頁的Response物件
  7. void setAttribute();設定屬性及屬性值
  8. Object getAttribute();在指定範圍內取屬性的值
  9. int getAttributeScope();返回某屬性的作用範圍
  10. void forward();跳轉到另一個頁面,位址列不變
  11. void include();包含另一個頁面,
  12. PageContext.APPLICATION_SCOPE 代表各個域的常量
  13. PageContext.SESSION_SCOPE
  14. PageContext.REQUEST_SCOPE
  15. PageContext.PAGE_SCOPE
  16. findAttribute(); 查詢各個域中的屬性

        9、Config物件

              Config物件是在一個Servlet初始化時,JSP引擎向它傳遞資訊用的,此資訊包括Servlet初始化時所要用到的引數(通過屬性名和屬性值構成)以及伺服器的有關資訊(通過傳遞一個ServletContext物件)              

  1. //Config的常用方法
  2. ServletContext getServletContext();返回含有伺服器資訊的ServletContext物件
  3. String getInitParameter();返回初始化引數的值
  4. Enumeration getInitparameterNames();返回Servlet初始化所需所有引數的列舉

        10、Exception物件

                Exception物件是一個異常物件,當一個頁面在執行過程中發生了異常,就產生這個物件。如果一個jsp頁面要應用此物件,就必須報isErrorPage設為true,否則無法編譯。它實際上是java.lang.Throwable的物件。頁面要想在有異常時得到處理,就要指定異常處理頁面<% page errorPage="exception.jsp"%>         

  1. //exception的常用方法
  2. String getMessage();返回描述異常的訊息
  3. String toString();返回關於異常的簡短描述訊息
  4. void printStackTrace();顯示異常及其棧軌跡
  5. ThrowableFillInStackTrace();重寫異常的執行棧軌跡

三、JSP動作標籤

         1、JSP動作元素(action elements)

                動作元素為請求處理階段提供資訊。動作元素遵循XML元素的語法,有一個包含元素名的開始標籤,可以有屬性、可選的內容、與開始標籤匹配的結束標籤。

            JSP標籤也稱之為JSP Action(JSP動作)元素,它用於在JSP頁面中提供業務邏輯功能,避免在JSP頁面中直接編寫java程式碼,造成jsp頁面難以維護。

         2、JSP動作元素包含五大類

              1、與儲存JavaBean有關的:<jsp:useBean>, <jsp:setProperty>, <jsp:getProperty>

              2、JSP1.2規範就有的6個基本動作元素:<jsp:include>, <jsp:forward>, <jsp:param>, <jsp:plugn>, <jsp:params>, <jsp:fallback>

              3、JSP2.0新增加,主要與JSP Document有關的6個動作元素:<jsp:root>, <jsp:declaration>, <jsp:scriptlet>, <jsp:exception>, <jsp:text>, <jsp:output>

              4、JSP2.0新增加,主要永磊動態生成XML元素標籤的值,包括3個動作:<jsp:attribute>, <jsp:body>, <jsp:element>

              5、JSP2.0新增加,只要用在Tag File中:<jsp:invoke>, <jsp:dobody>

         3、JSP常用標籤

             <jsp:include>:該標籤用於把另外一個資源的輸出內容插入進當前JSP頁面的輸出內容中,這種在JSP頁面執行時的引入方式稱之為動態引入。<jsp:include page="relativeURL | <%=expression%>" flush="true|false" />。flush屬性指定在插入其他資源的輸出內容時,是否先將當前JSP頁面的已輸出的內容重新整理到客戶端。

             <jsp:include>與include指令比較:<jsp:include>標籤是動態引入, <jsp:include>標籤涉及到的2個JSP頁面會被翻譯成2個servlet,這2個servlet的內容在執行時進行合併。而include指令是靜態引入,涉及到的2個JSP頁面會被翻譯成一個servlet,其內容是在原始檔級別進行合併。不管是<jsp:include>標籤,還是include指令,它們都會把兩個JSP頁面內容合併輸出,所以這兩個頁面不要出現重複的HTML全域性架構標籤,否則輸出給客戶端的內容將會是一個格式混亂的HTML文件。但include指令要比<jsp:include>標籤效率高些。可以從下面的表格中更直觀的看到兩者的區別   

             

             <jsp:forward>:該標籤用於把請求轉發給另外一個資源。<jsp:forward page="relativeURL | <%=expression%>" />。等同於request.getRequestDispatcher("/url").forward(request,response)。即執行伺服器內部跳轉操作。

             <jsp:param>:當使用<jsp:include>和<jsp:forward>標籤引入或將請求轉發給其它資源時,可以使用<jsp:param>標籤向這個資源傳遞引數。

<jsp:include page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>"/>
</jsp:include>
可以使用多個<jsp:param>標籤來傳遞多個引數。

         4、對映JSP

            對映JSP就是將一個JSP對映成其他任意形式的URL,在web.xml檔案張配置

<servlet>
    <servlet-name>SimpleJspServlet</servlet-name>
    <jsp-file>/jsp/simple.jsp</jsp-file>
    <load-on-startup>1</load-on-startup >
</servlet>
    ……
<servlet-mapping>
    <servlet-name>SimpleJspServlet</servlet-name>
    <url-pattern>/xxx/yyy.html</url-pattern>
</servlet-mapping>

四、JavaBeans

       1、Javabean簡介

              Javabeans就是符合某種特定規範的Java類。使用Javabeans的好處是解決程式碼重複編寫,減少程式碼冗餘,功能區分明確,提高了程式碼的可維護性。

       2、Javabean設計原則

               必須是共有類;

               必須包含一個無參的共有構造方法;

               所有屬性必須私有;

               使用getter和setter訪問器對屬性訪問封裝。      

public class Book {  //一個符合要求的Javabean類
    private String bookName;
    private String author;
    private double price;
    public Book() {
    }
    public String getBookName() {
        return bookName;
    }
    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }

       3、JSP中如何使用Javabean

              第一種方式:像使用普通java類一樣,建立javabean例項。

              第二種方式:在JSP頁面中通常使用jsp動作標籤使用javabean。

       4、<jsp:useBeans>

              作用:在jsp頁面中例項化或者在指定範圍內使用javabean

              <jsp:useBean id="識別符號" class="java類名" scope="作用範圍"/> scope預設為page。

       5、<jsp:setProperty>

               作用:給已經例項化的Javabean物件的屬性賦值,一共有四種形式:

               <jsp:setProterty name="Javabean例項名" property="*"/>(跟表單關聯)

               <jsp:setProterty name="Javabean例項名" property="Javabean屬性名"/>(跟表單關聯)

               <jsp:setProterty name="Javabean例項名" property="Javabean屬性名" value="BeanValue"/>(手工設定)

               <jsp:setProterty name="Javabean例項名" property="propertyName" param="request物件中的引數名"/>(跟request引數關聯)通過url地址傳遞的引數

       6、<jsp:getProperty>

               作用:獲取指定Javabean物件的屬性值。

               <jsp:getProperty name="Javabean例項名" property="屬性名"/>

       7、Javabean的四個作用域範圍

                使用useBeans的scope屬性可以用來指定javabean的作用範圍。

                page:僅在當前頁面有效

                request:可以通過request.getAttribute方法取得JavaBean物件

                session:可以通過session.getAttribute方法取得JavaBean物件

                application:可以通過application.getAttribute方法取得JavaBean物件

       8、Model1簡介

            Model1出現前,整個Web應用幾乎全部由JSP頁面組成,JSP頁面接收處理客戶端請求,對請求處理後直接作出響應。

            弊端:在介面層充斥著大量的業務邏輯的程式碼和資料訪問層的程式碼,Web程式的可擴充套件性和可維護性非常差。

            Javabean的出現可以使jsp頁面中使用Javabean封裝的資料或者呼叫Javabean的業務邏輯程式碼,這樣大大提升了程式的可維護性。

            

        9、Model2簡介

            

五、JSP狀態管理

         1、http協議的無狀態性

              無狀態是指,當瀏覽器傳送請求該伺服器的時候,伺服器響應客戶端請求。但是當同一個瀏覽器再次傳送請求給伺服器的時候,伺服器並不知道它就是剛才那個瀏覽器。簡單的說就是伺服器不會記得你,所以就是無狀態協議。

         2、儲存使用者狀態的兩大機制

              Cookie技術、Session技術

         3、Cookie簡介

              Cookie:是Web伺服器儲存在客戶端的一系列文字資訊。

              典型應用:判定註冊使用者是否已經登入網站。

                        購物車的處理。

              Cookie的作用:

                          對特定物件的追蹤

                          儲存使用者網頁瀏覽記錄與習慣

                          簡化登入

               安全風險:容易洩露使用者隱私資訊。

         4、Cookie的建立與使用

               Cookie與Session的詳細講解請參考本部落格文章《Servlet---JavaWeb技術的核心基礎,JavaWeb框架的基石(二)》中的Cookie與Session部分。

         5、Session與Cookie的對比

                共同點:都是用來儲存使用者狀態的;都會過期

                Session:在伺服器端儲存使用者資訊,儲存的是Object型別,隨會話的結束而將其儲存的資料銷燬,儲存重要的資訊。

                Cookie:在客戶端儲存使用者資訊,儲存的是String型別,可以長期儲存在客戶端,儲存不重要的使用者資訊。