2017-03-24,週末整理

  這一週主要的重點仍舊在servlet上,而後學習了MVC模式,如何按照這個模式去實現一些複雜的功能。實現前端和後端之間相互聯繫,在編寫程序的時候,必定要有一個清晰的思路,不能混亂,尤爲是在處理各類頁面相互跳轉的時候。這一週還有一個重點就是JSP(JAVA server page)本質上它仍舊是一個servlet,只不過它的側重點在於展現頁面內容,方便咱們從服務器端獲得響應。html

  1. servlet的多線程問題
    1. servlet的多線程機制:servlet的生命週期是由Web容器負責的,當客戶端第一次請求某個servlet的時候,servlet容器會根據web.xml配置文件來實例化這個servlet,以後新的客戶端來請求時,不會建立新的實例,也就是有多個線程在使用這個實例,servlet容器會自動使用線程池等技術來支持。因此在servlet中設置實例變量時要慎之又慎!
    2. servlet的JMM(java memory model):系統存在一個主存區,java中全部的實例變量都存在這個主存當中,對於全部的線程都是共享的,而後每個線程分配到一個工做內存區,工做內存由緩存和堆棧構成,緩存中保存的是主存中實例變量的拷貝,緩存並不老是和主存同步的,堆棧中保存的是線程中的局部變量,線程之間是沒法相互直接訪問堆棧中的變量。可是對於高併發的場景,此方法在一段時間內只能有一個線程在運行,因此也不是個很好的解決方法。
    3. 如何設計線程安全的servlet:一、實現SingleThreadModel接口,實現了此接口的類,將不會建立多線程,始終保持一個線程,也就是說容器將建立多個實例變量,因此如今被淘汰。二、使用synchronized關鍵字保證一次只有一個線程能夠訪問受保護的區段。三、避免使用實例變量,只要不使用實例變量,就不會形成數據紊亂的狀況發生。
  2. 表單提交前的校驗
    1. 主要是在JS中來實現,能夠預先在客戶端進行校驗,保證數據傳遞的效率,方法有三種:一、在submit按鈕中添加onclick事件,return true則提交,return false則不提交。二、直接用button按鈕添加onclick事件,若是數據正確,則調用form對象的submit()方法。三、在form標籤中修改onsubmit屬性,return true則提交。
    2. 防止表單重複提交:在客戶端中有兩種方法,一、在js腳本中設置一個標誌變量,來區分是否已經提交。二、在單擊提交按鈕後將提交按鈕設置成disabled狀態。可是這兩種方法都不能應對瀏覽器後退和刷新的狀況。
  3. Cookie:
    1. cookie是服務器保存在客戶端上的一些信息,Cookie類,request對象的.getCookies();方法,返回的是一個Cookie數組,而後遍歷就好了。有name和value屬性。
    2. 向客戶端寫入Cookie:Cookie cookie=new Cookie("name","value");cookie.setMaxAge("millis");response.addCookie(cookie);注意在寫入Cookie的時候要注意編碼問題。
  4. JSP(java server page)
    1. 是一種服務器端腳本語言,能夠混合java代碼和html標籤一塊兒使用的技術,能動態生成html。JSP最終會生成java class,是一個規範,是J2EE中重要的一部分,jsp運行在web容器中,設計時是JSP形態,運行時是容器編譯成的Servlet形態。
    2. JSP指令directives,用來設置屬性,1,<%@page ... %>;     2,<%@include ... %>注意被包含的文件中不能有<html>,<head>,<body>;       3,<%@taglib ... %>;
    3. JSP聲明Declaration,能夠定義一些變量,同時也能夠定義一些方法。<%! ... %>
    4. JSP表達式Expressions,表達式,<%= ... %>其結果會在HTML中顯示。注意表達式中沒有;號
    5. JSP腳本Scriptlet,jsp中嵌入的腳本代碼。注意與html嚴格分開來。
    6. 9個內嵌變量,request, response, session, application, config, pageContext, out, page, exception(只能在isErrorPage="true"中使用)。
    7. jsp標籤,<jsp:include .../>能夠傳遞參數。與<%@include ..%>區別,一個是動態的取得標籤所引用文件的輸出結果,一個是在編譯時靜態的導入所引用的文件。
    8. JavaBean:就是一個java類,實現了SUN公司的JavaBean規範,set、get, is, 須要一個無參數的構造函數,須要實現序列化的接口Serializable
      1. <jsp:useBean /> ?     
      2. <jsp:getProperty />取得JavaBean中的屬性值
      3. <jsp:setProperty/>設置對象的屬性值
  5. EL(ExpressionLanguage):在JSP中使用的運算式,${... },便於維護web數據,主要是用來存取、操做對象或數據。
  6. JSTL(Java Server Pages Standard Tag Lib):標準標記庫,<c:out value=""/>  <c:set var="" scope="" value=""/> <c:if test="">...</c:if>          <c:choose><c:when test=""></c:when><c:otherwise></c:otherwise></c:choose> <c:foreach items="" var="" (varStatus)></c:foreach>總之JSTL就是用來解決jsp中出現<%javacode%>的狀況的。*而後還能夠自定義標籤。
  7. MVC設計模式:model,指的是java的各類模型,也就是類;view,主要用jsp和jstl來實現;controller,servlet。
  8. filter:過濾器,是一段可重用的,轉換http請求,響應內容和頭信息的代碼,它先於與之相關的servlet或jsp頁面運行在服務器上。過濾器能夠附加到多個servlet和jsp頁面上,而且能夠檢查進入這些資源的請求信息。建立過濾器:創建一個類實現Filter接口。每一個filter也只有一個實例,對請求和響應進行攔截,並執行過濾方法,而後傳到下一級filter或資源中。
相關文章
相關標籤/搜索