JavaEE系列之(一)JSP基礎知識詳解

1、JSP基礎語法html

    一、JSP簡介
       JSP(Java Server Pages),其根本是一個簡化的Servlet設計,它實現了在Java中使用HTML標籤。JSP是一種動態網頁技術標準,也是JavaEE的標準。JSP和Servlet同樣,是在服務器端執行的。JSP是在Servlet技術發展以後爲了讓開發者寫html標籤更方便而發展起來的技術,JSP實際上就是Servlet。
       可是,人們一般把Servlet做爲Web應用中的控制組件來使用,只負責響應請求產生數據,並把數據經過轉發技術帶給jsp,而把jsp技術做爲數據顯示模板來使用。這樣使程序結構更清晰,可讀性和可維護性更高。
     二、經常使用動態網站開發技術
         JSP:Java平臺,安全性高,適合開發大型的,企業級的,分佈式的Web應用程序。如Hadoop,電子銀行,12306等
         ASP.net:.Net平臺,簡單易學。可是安全性以及跨平臺型差。
         PHP:簡單,高效,成本低開發週期端,特別適合中小型企業的Web應用開發。(LAMP:Linux+Apache+MySQL+PHP)
      三、JSP頁面元素構成
         3.一、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"%> 一、language 指定JSP頁面使用的腳本語言,默認值爲java 二、contentType 用來指定JSP頁面的文件類型和所採用的編碼方式, 默認值爲「text/html,ISO-8859-1」 三、import 經過該屬性來引用腳本語言中使用到的類文件,導入多個類或包用逗號分隔。
JSP引擎自動導入java.lang.*;java.servlet.*;javax.servlet.jsp.*;javax.servlet.http.* 四、pageEncoding 指定JSP頁面的編碼方式, 默認值爲「ISO-8859-1」 五、session,用來講明是否建立session對象,默認爲true 六、buffer,用來指定out對象是否建立buffer緩衝區,並指定緩衝區大小。默認爲8kb,none表示不建立緩衝區。 七、autoFlush,緩衝區是否自動刷新,默認爲true,若是爲false,緩衝區滿後不手動刷新會包異常。 八、info,定義一個字符串常量,使用getServletInfo方法能夠打印。 九、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.二、表達式:
                在JSP頁面中執行的表達式 <%=表達式%>,注意表達式不以分號結束。例如,當前時間:<%= new java.util.Date() %>
          3.三、腳本片斷:
                在JSP頁面中插入多行java代碼 <% Java代碼 %>,JSP引擎在翻譯JSP頁面時,會將JSP腳本片斷中的Java代碼原封不動的放到Servlet的_jspServlet方法中,因此,<% %>中的Java代碼必須嚴格遵循java語法。
          3.四、聲明:
                在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.五、註釋(3種方式):java

                 HTML註釋:<!--html註釋,且客戶端可見-->
                 JSP註釋:<%--JSP註釋,客戶端不可見--%>
                 JSP腳本註釋:即java註釋 //單行 , /*多行 */
          3.六、靜態內容:
<%@ 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>

    四、JSP運行原理及生命週期:web

          
           用戶第一次請求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大對象的引用。
 
2、JSP 9個內置對象
      一、內置對象簡介
           JSP內置對象是Web容器建立的一組對象,不使用new關鍵字就可使用的內置對象。
           
      二、四種做用域範圍
         application_SCOPE:做用於整個Web應用,多個用戶之間共享。
         session_SCOPE:做用於整個Web應用,單個用戶之間共享。
         request_SCOPE:做用於請求,轉發間請求共享。
         page_SCOPE:做用於當前頁面,當前頁面可見。
      三、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先輸出"

 

 經常使用方法:一、void println(); 向客戶端打印字符串
                   二、void clear(); 清除緩衝區的內容,若是在flush以後調用會拋出異常。
                   三、void clearBuffer(); 清除緩衝區的內容,若是在flush以後調用不會拋出異常
                   四、void flush(); 將緩衝區內容輸出到客戶端
                   五、int getBufferSize(); 返回緩衝區以字節數的大小,如不設緩衝區則爲0
                   六、int getRemaining(); 返回緩衝區還剩餘多少可用
                   七、boolean isAutoFlush(); 返回緩衝區盡是,是自動清空仍是拋出異常
                   八、void close(); 關閉輸出流

      四、request/response對象sql

          請求響應機制請參考本博客的Servlet部分
           4.一、表單的兩種提交方式:get與post
                get:以明文的方式經過URL提交數據,數據在URL中能夠看到。提交的數據最多不超過2KB。安全性較低,但效率比post方式搞。適合提交數據量不大,安全性高的數據。好比:搜索、查詢等功能
                post:將用戶提交的信息封裝在HTML header內。適合提交數據量大,安全性高的用戶信息。好比:註冊、修改、上傳等功能。
           4.二、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.三、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地址不會改變。
      五、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仍然存在於服務端,只不過再也沒有客戶端會攜帶它而後教育服務端校驗,直到該會話超時。)。
              銷燬:有三種銷燬方式
                    一、調用了session.invalidate()方法
                    二、Session過時(超時)能夠在web.xml中配置Session超時時間<session-config><session-timeout>1單位是分鐘
                    三、服務器從新啓動
      六、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)引擎名及版本號
       七、page對象
             page對象就是指向當前jsp頁面自己,有點像類中的this指針,它是java.lang.Object類的實例。經常使用方法就是Object類的成員方法。
       八、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(); 查找各個域中的屬性
        九、Config對象
              Config對象是在一個Servlet初始化時,JSP引擎向它傳遞信息用的,此信息包括Servlet初始化時所要用到的參數(經過屬性名和屬性值構成)以及服務器的有關信息(經過傳遞一個ServletContext對象)              
  1. //Config的經常使用方法
  2. ServletContext getServletContext();返回含有服務器信息的ServletContext對象
  3. String getInitParameter();返回初始化參數的值
  4. Enumeration getInitparameterNames();返回Servlet初始化所需全部參數的枚舉
        十、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();重寫異常的執行棧軌跡
 
3、JSP動做標籤
         一、JSP動做元素(action elements):動做元素爲請求處理階段提供信息。動做元素遵循XML元素的語法,有一個包含元素名的開始標籤,能夠有屬性、可選的內容、與開始標籤匹配的結束標籤。
            JSP標籤也稱之爲JSP Action(JSP動做)元素,它用於在JSP頁面中提供業務邏輯功能,避免在JSP頁面中直接編寫java代碼,形成jsp頁面難以維護。
         二、JSP動做元素包含五大類:
              一、與存儲JavaBean有關的:<jsp:useBean>, <jsp:setProperty>, <jsp:getProperty>
              二、JSP1.2規範就有的6個基本動做元素:<jsp:include>, <jsp:forward>, <jsp:param>, <jsp:plugn>, <jsp:params>, <jsp:fallback>
              三、JSP2.0新增長,主要與JSP Document有關的6個動做元素:<jsp:root>, <jsp:declaration>, <jsp:scriptlet>, <jsp:exception>, <jsp:text>, <jsp:output>
              四、JSP2.0新增長,主要永磊動態生成XML元素標籤的值,包括3個動做:<jsp:attribute>, <jsp:body>, <jsp:element>
              五、JSP2.0新增長,只要用在Tag File中:<jsp:invoke>, <jsp:dobody>
         三、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>標籤向這個資源傳遞參數。
  1. <jsp:include page="relativeURL | <%=expression%>">
    <jsp:param name="parameterName" value="parameterValue|<%= expression %>"/>
    </jsp:include>
    可使用多個<jsp:param>標籤來傳遞多個參數。

             四、映射JSPexpress

            映射JSP就是將一個JSP映射成其餘任意形式的URL,在web.xml文件張配置
  1. <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>

     

  2. 4、JavaBeans編程

       一、Javabean簡介
              Javabeans就是符合某種特定規範的Java類。使用Javabeans的好處是解決代碼重複編寫,減小代碼冗餘,功能區分明確,提升了代碼的可維護性。
       二、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;
    }

       三、JSP中如何使用Javabean數組

              第一種方式:像使用普通java類同樣,建立javabean實例。
              第二種方式:在JSP頁面中一般使用jsp動做標籤使用javabean。
       四、<jsp:useBeans>
              做用:在jsp頁面中實例化或者在指定範圍內使用javabean
              <jsp:useBean id="標識符" class="java類名" scope="做用範圍"/> scope默認爲page。
       五、<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地址傳遞的參數
       六、<jsp:getProperty>
               做用:獲取指定Javabean對象的屬性值。
               <jsp:getProperty name="Javabean實例名" property="屬性名"/>
       七、Javabean的四個做用域範圍
                使用useBeans的scope屬性能夠用來指定javabean的做用範圍。
                page:僅在當前頁面有效
                request:能夠經過request.getAttribute方法取得JavaBean對象
                session:能夠經過session.getAttribute方法取得JavaBean對象
                application:能夠經過application.getAttribute方法取得JavaBean對象
       八、Model1簡介
            Model1出現前,整個Web應用幾乎所有由JSP頁面組成,JSP頁面接收處理客戶端請求,對請求處理後直接做出響應。
            弊端:在界面層充斥着大量的業務邏輯的代碼和數據訪問層的代碼,Web程序的可擴展性和可維護性很是差。
            Javabean的出現可使jsp頁面中使用Javabean封裝的數據或者調用Javabean的業務邏輯代碼,這樣大大提高了程序的可維護性。
            
        九、Model2簡介
            
 
5、JSP狀態管理
         一、http協議的無狀態性
              無狀態是指,當瀏覽器發送請求該服務器的時候,服務器響應客戶端請求。可是當同一個瀏覽器再次發送請求給服務器的時候,服務器並不知道它就是剛纔那個瀏覽器。簡單的說就是服務器不會記得你,因此就是無狀態協議。
         二、保存用戶狀態的兩大機制
              Cookie技術、Session技術
         三、Cookie簡介
              Cookie:是Web服務器保存在客戶端的一系列文本信息。
              典型應用:斷定註冊用戶是否已經登陸網站。
                        購物車的處理。
              Cookie的做用:
                          對特定對象的追蹤
                          保存用戶網頁瀏覽記錄與習慣
                          簡化登陸
               安全風險:容易泄露用戶隱私信息。
         四、Cookie的建立與使用
               Cookie與Session的詳細講解請參考本博客文章《Servlet---JavaWeb技術的核心基礎,JavaWeb框架的基石(二)》中的Cookie與Session部分。
         五、Session與Cookie的對比
                共同點:都是用來保存用戶狀態的;都會過時
                Session:在服務器端保存用戶信息,保存的是Object類型,隨會話的結束而將其存儲的數據銷燬,保存重要的信息。
                Cookie:在客戶端保存用戶信息,保存的是String類型,能夠長期保存在客戶端,保存不重要的用戶信息。
 


 
相關文章
相關標籤/搜索