javaweb三大核心基礎技術


我建了一個公眾號,主要是分享java項目,linux知識,日語學習相關的內容,大家喜歡的話可以關注一下,謝謝大家。


Servlet(大重點)

img

  • @web.xml配值方法

    img

  • 概念:運行在服務器端的小程序

    • Servlet就是一個接口,定義了Java類被瀏覽器訪問到(tomcat識別)的規則。
    • 將來我們自定義一個類,實現Servlet接口,復寫方法
  • Servlet的生命周期

    • https://www.runoob.com/servlet/servlet-life-cycle.html 菜鳥教程

      • init
      • service
      • destroy
    • Servlet3.0可以用注解的方式來配置虛擬路徑 load-on-startup等信息,可以不用 @web.xml 。web.xml 部署描述符優先於注釋

      • load-on-startup大於0的話一啟動這個服務器的web項目就執行init方法,小於0時需要訪問這個路徑才執行init方法

        img

    • Servlet體系結構

      img

    • urlpartten:Servlet訪問路徑

      • \1. 一個Servlet可以定義多個訪問路徑 : @WebServlet({"/d4","/dd4","/ddd4"})
      • \2. 路徑定義規則:
        • \1. /xxx:路徑匹配
        • \2. /xxx/xxx:多層路徑,目錄結構
        • \3. *.do:擴展名匹配(這個前面不要加/ 會報錯的)
  • request #request

    • \3. request功能:

      • \1. 獲取請求消息數據

        • \1. 獲取請求行數據
          • * GET /day14/demo1?name=zhangsan HTTP/1.1
          • * 方法:
            • \1. 獲取請求方式 :GET
              • * String getMethod()
            • \2. (*)獲取虛擬目錄:/day14
              • * String getContextPath()
            • \3. 獲取Servlet路徑: /demo1
              • * String getServletPath()
            • \4. 獲取get方式請求參數:name=zhangsan
              • * String getQueryString() a=b&c=d&e=f
            • \5. (*)獲取請求URI:/day14/demo1
            • \6. 獲取協議及版本:HTTP/1.1
              • * String getProtocol()
            • \7. 獲取客戶機的IP地址:
              • * String getRemoteAddr()
        • \2. 獲取請求頭數據
          • * 方法:
            • * (*)String getHeader(String name):通過請求頭的名稱獲取請求頭的值
            • * Enumeration getHeaderNames():獲取所有的請求頭名稱
        • \3. 獲取請求體數據:
          • * 請求體:只有POST請求方式,才有請求體,在請求體中封裝了POST請求的請求參數
          • * 步驟:
            • \1. 獲取流對象
              • * BufferedReader getReader():獲取字符輸入流,只能操作字符數據
              • * ServletInputStream getInputStream():獲取字節輸入流,可以操作所有類型數據
            • \2. 再從流對象中拿數據
      • \2. 其他功能:

        • \1. 獲取請求參數通用方式:不論get還是post請求方式都可以使用下列方法來獲取請求參數

          • \1. String getParameter(String name):根據參數名稱獲取參數值 username=zs&password=123

          • \2. String[] getParameterValues(String name):根據參數名稱獲取參數值的數組 hobby=xx&hobby=game

          • \3. Enumeration getParameterNames():獲取所有請求的參數名稱

            img

          • \4. Map<String,String[]> getParameterMap():獲取所有參數的map集合

        • * 中文亂碼問題:

          • * get方式:tomcat 8 已經將get方式亂碼問題解決了
          • * post方式:會亂碼
          • * 解決:在獲取參數前,設置request的編碼request.setCharacterEncoding("utf-8");
        • \2. 請求轉發:一種在服務器內部的資源跳轉方式

          • \1. 步驟:
            • \1. 通過request對象獲取請求轉發器對象:RequestDispatcher getRequestDispatcher(String path)
            • \2. 使用RequestDispatcher對象來進行轉發:forward(ServletRequest request, ServletResponse response)
          • \2. 特點:
            • \1. 瀏覽器地址欄路徑不發生變化
            • \2. 只能轉發到當前服務器內部資源中。
            • \3. 轉發是一次請求
          • #重定向和轉發的區別
    • BeanUntils

      • https://github.com/sogeisetsu/-java-/blob/master/logindemo/src/club/suyuesheng/test/AD.java
      • 用途:簡化數據封裝
      • 限制
        • 被封裝的類必須是標准的簡單java類
        • 具體標准
          • \1. 類必須被public修飾
          • \2. 必須提供空參的構造器
          • \3. 成員變量必須使用private修飾
          • \4. 提供公共setter和getter方法(必須標准,如屬性為name,那么setter方法必須是setName())
      • 方法
        • \1. setProperty()
        • \2. getProperty()
        • \3. populate(Object obj , Map map):將map集合的鍵值對信息,封裝到對應的JavaBean對象中
          • 注釋:BeanUtils.populate(user, map); 的map對象的value如果是數組的話就以數組第一個為准
  • response

    • \1. HTTP協議:響應消息

      • 請求消息

        • #request
      • 響應消息

        • 響應行

          • HTTP/1.1 200
          • 狀態碼 :服務器告訴客戶端瀏覽器本次請求和響應的一個狀態
            • 分類
              • 1xx 表示客戶端數據已經上傳到服務器,但沒有上傳完,服務器返回1xx
              • 2xx 訪問成功
              • 3xx 訪問被重定向302(重定向) 304(訪問緩存)
              • 4xx客戶端請求出錯
                • 404 客戶端訪問的路徑不存在
                • 405 請求方式沒有對應的doxxx()方法
              • 5xx 服務器內部程序出錯
        • 響應頭

          img

          • \1. Content-Type:服務器告訴客戶端本次響應體數據格式以及編碼格式

          • \2. Content-disposition:服務器告訴客戶端以什么格式打開響應體數據

            • * in-line:默認值,在當前頁面內打開
            • * attachment;filename=xxx:以附件形式打開響應體。文件下載
        • 響應空行

        • 響應體

          • 就是數據,像文本圖片一類的數據

            img

    • \2. Response對象

    • 3.ServletContext對象:

      • \1. 概念:代表整個web應用,可以和程序的容器(服務器)來通信

      • \2. 獲取:

        • \1. 通過request對象獲取
          • request.getServletContext();
        • \2. 通過HttpServlet獲取
          • this.getServletContext();
      • \3. 功能:

        • \1. 獲取MIME類型:

          • * MIME類型:在互聯網通信過程中定義的一種文件數據類型
            • * 格式: 大類型/小類型 text/html image/jpeg
          • * 獲取:String getMimeType(String file)
        • \2. 域對象:共享數據

          • \1. setAttribute(String name,Object value)
          • \2. getAttribute(String name)
          • \3. removeAttribute(String name)
          • * ServletContext對象范圍:所有用戶所有請求的數據
        • \3. 獲取文件的真實(服務器)路徑

          • \1. 方法:String getRealPath(String path)

          • String realPath = context.getRealPath(""); 或者 System.out.println(context.getRealPath("/"));

            • 都指向 '//D:\day13\out\artifacts\day16_war_exploded'

            • 即web目錄

              img

          • String b = context.getRealPath("/b.txt");//web目錄下資源訪問

          • System.out.println(b);

          • String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目錄下的資源訪問

          • System.out.println(c);

          • String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目錄下的資源訪問

          • System.out.println(a);

  • 會話技術

    • \1. 會話:一次會話中包含多次請求和響應。

      • 一次會話:瀏覽器第一次給服務器資源發送請求,會話建立,直到有一方斷開為止
    • \2. 功能:在一次會話的范圍內的多次請求間,共享數據

    • \3. 方式:

      • \1. 客戶端會話技術:Cookie
      • \2. 服務器端會話技術:Session
    • cookie----客戶端會話技術

      • 語法
        • \1. new Cookie(name,value)
        • \2. 向response添加cookie response.addCookie(cookie)
        • 3 . 從request獲取Cookie request.getCookies 返回cookie數組
        • getValue getName
        • setValue
        • \2. 持久化存儲:
          • *** setMaxAge(int seconds)**
            • \1. 正數:將Cookie數據寫到硬盤的文件中。持久化存儲。並指定cookie存活時間,時間到后,cookie文件自動失效
            • \2. 負數:默認值
            • \3. 零:刪除cookie信息
        • *setPath(String path):設置cookie的獲取范圍。默認情況下,設置當前的虛擬目錄
          • * 如果要共享,則可以將path設置為"/"
      • 意義
        • 一次會話的范圍內的多次請求間,共享數據 數據儲存在服務器端
      • \5. Cookie的特點和作用
        • \1. cookie存儲數據在客戶端瀏覽器
        • \2. 瀏覽器對於單個cookie 的大小有限制(4kb) 以及 對同一個域名下的總cookie數量也有限制(20個)
        • * 作用:
          • 1. cookie一般用於存出少量的不太敏感的數據
          • 2. 在不登錄的情況下,完成服務器對客戶端的身份識別
    • session--服務器端會話

      • \1. 概念:服務器端會話技術,在一次會話多次請求間共享數據,將數據保存在服務器端的對象中。HttpSession
      • \2. 快速入門:
        • \1. 獲取HttpSession對象:
          • HttpSession session = request.getSession();
        • \2. 使用HttpSession對象:
          • Object getAttribute(String name)
          • void setAttribute(String name, Object value)
          • void removeAttribute(String name)
      • \3. 原理
        • * Session的實現是依賴於Cookie的。
      • 4.細節:
        • 1.當客戶端關閉后,服務器不關閉,兩次獲取session是否為同一個?
          • 默認情況下。不是。
            • 如果需要相同,則可以創建Cookie,鍵為JSESSIONID,設置最大存活時間,讓cookie持久化保存。
              • Cookie c = new Cookie("JSESSIONID",session.getId());
              • c.setMaxAge(60*60);
              • response.addCookie(c);
        • 2. 客戶端不關閉,服務器關閉后,兩次獲取的session是同一個嗎?
          • ** 不是同一個,但是要確保數據不丟失。tomcat自動完成以下工作*
            • ** session的鈍化:*
              • ** 在服務器正常關閉之前,將session對象系列化到硬盤上*
            • ** session的活化:*
              • ** 在服務器啟動后,將session文件轉化為內存中的session對象即可。*
        • \3. session什么時候被銷毀?
          • \1. 服務器關閉
          • \2. session對象調用invalidate() 。
          • \3. session默認失效時間 30分鍾
          • 選擇性配置修改
            • 30
      • \5. session的特點
        • \1. session用於存儲一次會話的多次請求的數據,存在服務器端
        • \2. session可以存儲任意類型,任意大小的數據
    • session與Cookie的區別:

      • \1. session存儲數據在服務器端,Cookie在客戶端

      • \2. session沒有數據大小限制,Cookie有

      • \3. session數據安全,Cookie相對於不安全

      img

    • cookie session 轉發 ServletContext 的區別

  • jsp(語法不重要,重要的是思想)

    • 基礎語法

      • <%java代碼%>

        • 內置對象不需要創建,直接使用的對象

          在jsp頁面中不需要創建,直接使用的對象

          • 九個內置對象

            img

      • <%= 直接在頁面輸出%>

      • <%!定義類%>

    • 指令

      • * 作用:用於配置JSP頁面,導入資源文件

      • * 格式:

        • <%@ 指令名稱 屬性名1=屬性值1 屬性名2=屬性值2 ... %>
      • * 分類:

        • \1. page : 配置JSP頁面的

          img

          • * contentType:等同於response.setContentType()

            • \1. 設置響應體的mime類型以及字符集
            • \2. 設置當前jsp頁面的編碼(只能是高級的IDE才能生效,如果使用低級工具,則需要設置pageEncoding屬性設置當前頁面的字符集)
          • * import:導包

          • * errorPage:當前頁面發生異常后,會自動跳轉到指定的錯誤頁面

          • * isErrorPage:標識當前也是是否是錯誤頁面。

            • * true:是,可以使用內置對象exception
            • * false:否。默認值。不可以使用內置對象exception
        • \2. include : 頁面包含的。導入頁面的資源文件

          • * <%@include file="top.jsp"%>
        • \3. taglib : 導入資源 需要先引入jstl jar包

          jstl 的jar包引入方法較為復雜

    • ELhttps://sogeisetsu.github.io/javaweblearn/day17/src/cn/suyuesheng/day17/rr

      • \1. 概念:Expression Language 表達式語言

      • \2. 作用:替換和簡化jsp頁面中java代碼的編寫

      • \3. 語法:${表達式}

      • \4. 注意:

        • * jsp默認支持el表達式的。如果要忽略el表達式
          • \1. 設置jsp中page指令中:isELIgnored="true" 忽略當前jsp頁面中所有的el表達式
          • \2. ${表達式} :忽略當前這個el表達式
      • 代碼參考

      • 獲取值

        img

    • jstl

  • 三層架構:軟件設計架構

    • \1. 界面層(表示層):用戶看的得界面。用戶可以通過界面上的組件和服務器進行交互

    • \2. 業務邏輯層:處理業務邏輯的。

    • \3. 數據訪問層:操作數據存儲文件。

    img


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM