JavaWeb核心知識點
一:HTTP協議
一、概述
1. 概念:超文字傳輸協議
2. 作用:規範了客戶端(瀏覽器)和伺服器的資料互動格式
3. 特點
1. 簡單快速:客戶端向伺服器請求服務時,僅通過鍵值對來傳輸請求方法和路徑
2. 靈活:允許傳輸任意型別的資料物件,正在傳輸的型別由Content-Type標記(例如圖片,文字)
3. 持續連線:處理完客戶端的一個請求時候,伺服器不立馬關閉,而是在指定的時間之後才關閉
4. 無狀態:如果第二次請求中需要用到第一次請求的資料,那麼必須在請求第一次的資料
二、互動流程
1. 連線:客戶端和伺服器端建立連線
2. 請求:客戶端傳送請求資料到伺服器端
3. 響應:伺服器端接收到請求後進行處理,將處理結果返回響應客戶端
4. 關閉:關閉客戶端和伺服器端連線(HTTP1.1版本之後不會立即關閉)
三、請求
1. 請求格式
1. 請求行:請求方式、請求地址和HTTP協議版本
2. 請求頭:訊息報頭,附加資訊,不包括核心資料
3. 空行:請求頭和請求實體之間的必須有空行
4. 請求實體:核心資料,非必須
2. 請求方式
1. GET請求(沒有請求實體):請求資料以?的形式拼接在請求頭中,URL中有具體的請求資料,不安全,由於瀏覽器對URL的長度有限制,所以適合資料量小的傳輸
2. POST請求:請求資料字請求實體中傳送,URL中沒有具體的請求資料,安全,適合資料量大的傳輸
四、響應
1. 響應格式
1. 響應行:HTTP版本、狀態碼和狀態訊息
2. 響應頭:訊息報頭,附加資訊
3. 空行:響應頭和響應實體之間必須存在空行
4. 響應實體:伺服器返回給客戶端的資料
2. 狀態碼
1. 200:客戶端請求成功
2. 400:客戶端請求有語法錯誤,不能被伺服器所理解
3. 403:伺服器收到請求,但是拒絕服務
4. 404:請求資源不存在(URL錯誤)
5. 500:伺服器發生不可預期的錯誤
6. 503:伺服器不能處理當前客戶端的請求,一段時間後恢復正常
二:Tomcat伺服器
一、概念及作用
1. 概念:Tomcat 伺服器是一個免費的開源的輕量級Web 應用伺服器(Java編寫的),是開發和除錯JSP 程式的首選。
2. 作用:能夠根據客戶端的請求來啟動並執行我們編寫的資料邏輯程式碼。
二、安裝
1. 下載
1. Tomcat官網
2. 點選左側Download下對應的版本
3. 下載壓縮包(zip)
4. 解壓即可
2. 目錄介紹
1. bin:存放tomcat的命令,以.sh結尾的(linux命令),以.bat結尾的(windows命令)
1. startup:啟動Tomcat
2. shutdown:關閉Tomcat
2. conf:存放tomcat的一些配置檔案
1. server.xml:設定埠、域名或IP、預設載入的專案及請求編碼
2. web.xml:檔案型別設定
3. context.xml:配置資料來源
4. tomcat-users.xml:管理tomcat的使用者與許可權
3. lib:存放tomcat執行需要載入的jar包
4. log:存放tomcat在執行過程中產生的日誌檔案
5. webapps:存放應用程式,當tomcat啟動時會去載入webapps目錄下的應用程式
6. work:存放tomcat在執行時的編譯後文件
三、檢測安裝
1. 雙擊bin目錄下的startup檔案,不要關閉
2. 在瀏覽器URL中輸入:localhost:8080
3. 如果跳轉到tomcat推薦頁面則安裝成功
二:Servlet
一、概述
1. 概念:Servlet是指任何實現了這個Servlet介面的類,Servlet運行於支援Java的應用伺服器中,Servlet只用來擴充套件基於HTTP協議的Web伺服器。
2. 作用 :互動式地瀏覽和修改資料,動態生成網頁。
2. 使用
1. 建立普通的Java類繼承HttpServlet
2. 覆寫service方法
3. 在service方法中書寫邏輯程式碼
4. 在webRoot下的WEB-INF資料夾下的web.xml檔案中配置servlet的別名
二、訪問流程和生命週期
1. 訪問流程
1. 客戶端輸入URL(伺服器地址:埠號/虛擬專案名/servlet的別名)發起請求到伺服器
2. 伺服器解析請求URL地址中的URI資訊(虛擬專案名/servlet的別名)
3. 按照虛擬專案名在webapps目錄下找到對應的專案檔案
4. 按照servlet的別名(url-pattern)在專案下的web.xml中檢索對應的servlet
5. 執行servlet-class中的所對應的servlet
2. 生命週期
1. 從第一次載入進記憶體(呼叫)到伺服器關閉
2. 在web.xml中配置了load-on-startup,生命週期為從伺服器的啟動到伺服器的關閉
3. doGet、doPost、service方法的區別
1. service方法:可以處理get/post方式的請求,如果servlet中有service方法,會優先呼叫service方法對請求進行處理。如果service方法中呼叫了父類的service方法,那麼在此service執行完成之後會再次執行對應請求的處理方法,如果不存在會報405錯誤,一般情況下不會呼叫。
2. doGet方法:只能處理get方式的請求
3. doPos方法: 只能處理post的請求方式
三、request物件
1. 概述
1. 概念: 封裝了所有請求資訊,由伺服器建立並作為實參傳遞給處理請求的servlet的service方法。
2. 作用:解決了一次請求內的資料共享問題
3. 作用域:一次請求內
2. 獲取請求行資料
1. 獲取請求方式:String method = req.getMethod();
2. 獲取請求URL:String url = req.getRequestURl();
3. 獲取請求URI: String uri = req.getRequestURI();
4. 獲取請求協議:String scheme = req.getScheme();
3. 獲取請求頭資料
1. 獲取指定的請求頭資料:String header = req.getHeader("鍵名");
2. 獲取所有請求頭鍵的列舉
Enumeration e = req.getHeaderNames();
while(e.hasMoreElements) {
String name = (String) e.nextElement();
String value = req.getHeader(name);
System.out.println(name + ":" + value);
}
4. 獲取使用者資料
1. 獲取指定的使用者資料:String name = req.getParameter("鍵名");
2. 獲取同鍵不同值的使用者資料(多選): String[] values = req.getParameterValues("鍵名");
5. 設定請求編碼格式:req.setCharacterEncoding("")
6. 請求轉發
1. 作用:多個servlet聯動操作處理請求。
2. 特點:一次請求(只有一個request物件),位址列資訊不改變。
3. 使用: req.getRequestDispatcher("jsp路徑").forward(req, resp);
return;
7. 資料的儲存和獲取(儲存優先於獲取)
1. 儲存:req.setAttribute(Object name, Object value);
2. 獲取:req.getAttribute(Object obj);
四、response物件
1. 概述
1. 概念:封裝了所有響應資訊,由伺服器建立並作為實參傳遞給要處理請求的servlet的service方法
2. 作用:將伺服器的資訊響應給瀏覽器
2. 設定響應編碼格式:resp.setContentType("text/html;charset=utf-8");
3. 設定響應狀態碼:sendError(int sc, String msg);
4. 設定響應頭
1. 同鍵會覆蓋:setHeader(“鍵名”, “鍵值”);
2. 同鍵不覆蓋:addHeader(“鍵名”, “鍵值”);
5. 設定響應實體
1. 響應字串或HTML頁面:resp.getWrite().write("");
2. 請求重定向:resp.sendRedirect("uri");
6. 請求重定向
1. 作用:解決表單重複提交併將不能處理的請求交給其他servlet處理。
2. 特點:多次請求(多個request物件),位址列資訊改變。
3. 使用:resp.sendRedirect("uri");
五、cookie物件
1. 概述
1. 概念:瀏覽器端的儲存技術
2. 作用:解決傳送的不同請求資料共享問題
3. 特點
1. cookie物件由伺服器建立,儲存在客戶端
2. 臨時儲存:儲存在瀏覽器的執行記憶體中,瀏覽器關閉即失效
3. 定時儲存:儲存在硬碟中,在有效期內符合有效路徑要求的請求都會附帶該資訊
2. 儲存
1. 建立cookie物件(一個物件只能儲存一條資訊):Cookie c = new Cookie(String name, String value);
2. 設定cookie資訊(非必須)
1. 設定有效期:c.setMaxAge(int seconds);
2. 設定有效路徑:c.setPath(Strign uri);
3. 響應cookie資訊:resp.addCookie(cookie物件);
3. 獲取
1. 獲取cookie物件陣列: Cookie[] cks = req.getCookie();
2. 遍歷cookie資訊:判斷是否為null後使用for迴圈遍歷
1. 獲取鍵:c.getName();
2. 獲取值:c.getName();
六、session物件
1. 概述
1. 概念:使用者第一次訪問伺服器,伺服器會建立一個session物件給此使用者,並將該session物件的JSESSIONID使用cookie技術儲存到瀏覽器中,保證該使用者的其它請求能夠獲得同一個session物件。
2. 作用:解決了一個使用者不同請求的資料共享問題。
3. 作用域:一次會話(從訪問到瀏覽器關閉)
4. 特點
1. session物件由伺服器建立,儲存在伺服器端
2. session依賴Cookie技術,JESSIONID儲存在Cookie的臨時儲存空間中,瀏覽器關閉失效
2. 獲取session物件: HttpSession hs = req.getSession();
1. 如果請求中擁有session的識別符號(JSESSIONID),則返回其session物件
2. 如果請求中沒有session的識別符號(JSESSIONID),則建立session物件
3. 如果session物件是失效的,則建立session物件
3. 設定session資訊
1. 設定有效期(預設30分鐘):hs.setMaxInactiveInterval(int seconds);
2. 設定強制失效:hs.invalidate();
4. 資料的儲存和獲取
1. 儲存:hs.setAttribute(String name, Object value);
2. 獲取:hs.getAttribute(String nam)
七、ServletContext物件
1. 概述
1. 概念:ServletContext物件內部封裝了該web應用(專案)的資訊。
2. 作用:解決了不同使用者的資料共享問題。
3. 作用域:從伺服器啟動到伺服器關閉
4. 特點
1. ServletContext物件由伺服器建立,儲存在伺服器端
2. 使用者共享,一個專案只有一個
2. 獲取ServletContext物件
1. ServletContext sc = this.getServletContext();
2. ServletContext sc = this.getServletConfig().getServletContext();
3. ServletContext sc = req.getSession().getServletContext();
3. 獲取專案中web.xml檔案中的全域性配置資料:String name = sc.getInitParameter(String name);
4. 獲取webroot下資源的絕對路徑:String path = sc.getRealPath("/資料夾/檔名");
5. 獲取webroot下資源的流物件:InputStream is = sc.getResourceAsStream("/資料夾/檔名");
6. 資料的儲存和獲取
1. 儲存:hs.setAttribute(String name, Object value);
2. 獲取:hs.getAttribute(String nam)
八、ServletConfig物件
1. 概述
1. 概念:ServletConfig物件是Servlet的專屬物件,每個Servlet都單獨擁有一個ServletCinfig物件。
2. 作用:ServletConfig物件用來獲取每一個Servlet在web.xml檔案中的配置資訊。
2. 獲取ServletConfig物件:ServletConfig sc = this.getServletConfig();
3. 獲取web.xml中的配置資料:String name = sc.getInitParameter(String name);
十一、web.xml
1. 全域性配置引數
<context-param>
<param-name>name</param-name>
<param-value>value</param-value>
</context-param>
2. Servlet配置
<init-param>
<param-name>name</param-name>
<param-value></param-value>
</init-param>
3. 過濾器配置
4. 監聽器配置
5. 載入時機:伺服器啟動
6. 載入順序:全域性配置-->監聽器-->過濾器-->Servlet配置
三:JSP
一、概述
1. 概念:JSP(全稱Java Server Pages)是由sun公司主導建立的一種動態網頁技術標準。
2. 作用:將Java程式碼和特定變動內容嵌入到靜態的頁面中,實現以靜態頁面為模板,動態生成其中的部分內容。
3. 本質:Servlet
4. 原理:當請求訪問JSP檔案時,JSP檔案會被JspServlet轉義成對應的Servlet同時執行轉義好的Servlet。
二、三個指令
1. page指令:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
1. 作用:配置jsp檔案的轉譯相關的引數
2. 屬性
2. include指令(靜態引入):<% include file="要引入的jsp檔案的相對路徑" %>
1. 作用:在當前jsp檔案中引入其他jsp檔案
2. 特點
1. 會將當前和引入的jsp檔案合併成一個servlet(不會單獨轉義)然後顯示
2. 當前和引入的jsp檔案中不能使用Java程式碼塊宣告的同名變數(合併成一個servlet)
3. taglib指令
1. 作用:宣告jstl標籤庫
2. 指令:<%@taglib uri="標籤庫" prefix="c" %>
三、六個動作
1. 動態引入:<jsp:include >
1. 使用:<jsp:include page="path"></jsp:include>
2. 作用:在當前jsp檔案中引入其他jsp檔案
3. 特點
1. 將引入的jsp檔案單獨轉譯,然後在當前servlet(當前jsp檔案)中呼叫轉義引入的servlet並顯示
2. 允許含有同名變數
2. 請求轉發:<jsp:forward>
1. 使用:<jsp:forward page="path">< /jsp:forward>
2. 作用:請求轉發
3. 特點:標籤中間只能寫<jsp:param>子標籤,其他的任意字元都會報錯
3. 設定請求引數:<jsp:param>
1. 使用
<jsp:forward page="path">
<jsp:param name="名" value="值" />
< /jsp:forward>
2. 作用: 將額外的請求資訊儲存到request物件中
3. 特點:一個標籤只能儲存一個資訊
4. 建立物件:<jsp:useBean>
1. 使用:<jsp:useBean id="物件名" class="className" scope="作用域">
2. 作用:例項化一個類物件
3. 特點:一個標籤只能例項化一個物件
5. 給指定的物件屬性賦值:<jsp:setProperty>
1. 使用:<jsp:setProperty name="beanName" property="propertyName" value=" propertyValue" />
1. 在<jsp:useBean>外:立即執行
2. 在<jsp:useBean>內:只有物件被例項化時才會執行
2. 作用:給指定物件屬性賦值
6. 取出指定物件的屬性值:<jsp:getProperty>
1. 使用:<jsp:getProperty name="beanName" property="propertyName" />
2. 作用:取出指定物件的屬性值
3. 特點:先例項化物件才能取對應屬性的值
四、九大內建物件
1. pageContext物件
1. 作用:管理當前JSP的執行及其他內建物件
2. 使用
1. 獲取其他內建物件:pageContext.getXxx();
2. 獲取指定作用域中的資料:pageContext.getAttribute(String name,int Scope)
3. 向指定作用域中儲存資料:pageContext.setAttribute(String name,Object o,int Scope);
4. 刪除指定作用域中的資料:removeAttribute(String name,int Scope);
5. 作用域常量
1. page: PageContext.PAGE_SCOPE
2. request:PageContext.REQUEST_SCOPE
3. session:PageContext.SESSION_SCOPE
4. application:PageContext.APPLICATION_SCOPE
6. 自動從page request session application中獲取資料:findAttribute(String name);
五、四大作用域
1. pageContext
1. 作用:解決了當前頁面內資料共享問題
2. 作用域:當前頁面
3. 資料流轉方式:獲取其他內建物件
2. request
1. 作用:解決了一次請求內的servlet的資料共享問題
2. 作用域:一次請求內
3. 資料流轉方式:請求轉發,將資料流轉給下一個servlet
3. session
1. 作用:解決了同一使用者的不同請求的資料共享問題
2. 作用域:一次回話
3. 資料流轉方式:將資料從一次請求流轉給其他請求
4. application
1. 作用:解決不同使用者的資料共享問題
2. 作用域:專案內
3. 資料流轉方式:將資料從一個使用者流轉給其他使用者
四:EI表示式
一、概述
1. 概念:EL(全稱Expression Language) 是為了使JSP寫起來更加簡單。
2. 作用:獲取四個作用域中的資料
3. 使用:${表示式}
二、獲取作用域資料
1. 獲取請求頭資料(瞭解)
1. 獲取所有請求頭資訊:${header}
2. 獲取指定鍵對應的值:${header["鍵名"]}
3. 獲取同鍵不同值的所有值:${headerValues["鍵名"]}
2. 獲取cookie資料(瞭解)
1. 獲取所有cookie物件的map集合:${cookie}
2. 獲取指定cookie物件: ${cookie.鍵名}
3. 獲取指定cookie物件的儲存資料的鍵:${cookie.鍵名.name}
4. 獲取指定cookie物件的儲存資料的值:${cookie.鍵名.value}
3. 獲取請求資料(掌握)
1. 獲取唯一鍵的值:param.鍵名
2. 獲取同鍵不同值:paramValues.鍵名
4. 獲取自定義資料(掌握)
1. 獲取普通字串: ${鍵名}
2. 獲取普通物件
1. 屬性是普通型別:${鍵名.屬性名}
2. 屬性是物件型別:${鍵名.屬性名(物件屬性).屬性名(物件屬性的屬性)...}
3. 獲取集合物件
1. list集合:${ 鍵名[角標].屬性名(如果有) }
2. map集合:${ 鍵名.map集合儲存的鍵名.屬性名(如果鍵名是物件)}
三、作用域查詢順序
1. 預設:pageContext-->request-->session-->application
2. 自定義:${pageScope.鍵名}----${requestScope.鍵名}----${sessionScope.鍵名}----${applicationScope.鍵名}
四、運算
1. 算數運算:${變數1 算數表示式(+ - * /) 變數2}
2. 邏輯運算:${變數1 邏輯表示式(&& || !) 變數2}
3. 關係運算:${變數1 關係表示式(> < == >= !=) 變數2}
4. 空值判斷:${empty 鍵名}
五:JSTL
一、概述
1. 概念:JSTL(Java server pages standarded tag library,即JSP標準標籤庫)是由JCP(Java community Proces)所制定的標準規範。
2. 作用:提高jsp中的編寫邏輯程式碼的效率
二、核心標籤庫
1. 基本標籤:操作作用域中的資料
1. 輸出資料給瀏覽器:<c:out value="可以是常量值也可以是EL表示式" default="預設值"></c:out>
2. 新增資料到指定作用域中:<c:set var="鍵名" value="資料" scope="作用域物件"></c:set>
3. 刪除指定作用域中的資料:<c:remove var="鍵名" scope="作用域物件"/>
2. 邏輯標籤
1. 單分支判斷:<c:if test="${表示式}">前端程式碼</c:if>
2. 多分支判斷
<c:choose>
<c:when test="">前端程式碼</c:when>
<c:when test="">前端程式碼</c:when>
......
<c:otherwise>前端程式碼</c:otherwise>
</c:choose>
3. 迴圈標籤
1. 常量迴圈
<c:forEach begin="起始位" end="結束位" step="步長" varStatus="記錄每次迴圈的資料(如索引)">
迴圈體
</c:forEach>
2. 動態迴圈
<c:forEach items="${物件}" var="每次迴圈的結果(物件中的資料)">
${s}
${s.屬性}
</c:forEach>
三、格式化標籤庫
1. 格式化日期
1. yyyy年MM月dd日 上午HH時mm分ss秒格式:<fmt:formatDate type="both" dateStyle="long" timeStyle="long" value="${日期物件}" />
2. yyyy-MM-dd HH:mm:ss格式 :<fmt:formatDate pattern="yyyy-MM-dd HH:mm:ss" value="${日期物件}" />
2. 格式化數字
1. ¥000,000.00格式:<fmt:formatNumber type="number" value="${數值物件}" />
2. 000,000.000格式:<fmt:formatNumber type="number" maxFractionDigits="整數型最大位數" value="${數值物件}" />
3. $120,000.23格式:<fmt:formatNumber value="${貨幣物件}" type="currency"/></p>
四、SQL標籤庫
1. 資料庫連線:<sql:setDataSource var="物件名" driver="驅動" url="連線地址" user="使用者名稱" password="密碼"/>
2. 查詢語句
<sql:query dataSource="${物件名}" var="結果集變數">
SQL查詢語句
</sql:query>
3. 更新語句
<sql:update dataSource="${物件名}" var="受影響行數變數">
SQL增刪改語句
</sql:update>
4. 給佔位符賦值(巢狀在查詢和更新語句中):<sql:param value="${empId}" />
&n