大数据WEB阶段总结
生活随笔
收集整理的這篇文章主要介紹了
大数据WEB阶段总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、概述
二、HTML CSS JS JQUERY
三、WEB容器 - Tomcat
Tomcat
!!!虛擬主機的配置
在tomcat的conf/server.xml文件中配置
<Engin><Host name="虛擬主機名稱" appBase="虛擬主機管理的目錄">...</Host></Engin>!!!web應用的配置
方式 1:
在tomcat的conf/server.xml文件中配置
<Engin><Host name="虛擬主機名稱" appBase="虛擬主機管理的目錄"><Context path="虛擬路徑" docBase="真實路徑"></Context></Host> </Engin>!!!!!四、HTTP協議
1.概述HTTP是一種通用的應用層協議 定義了客戶端和服務器端通信方式底層時TCP/IP協議2.基本原則基于請求響應模型一次請求對應一次響應請求只能由客戶端發出 服務器端被動等待請求做出響應3.版本區別HTTP/1.0 - 一次請求響應后底層的連接關閉 下次訪問再重新創建HTTP/1.1 - 提供了連接保持能力 當短時內多次訪問服務器時 復用底層連接 效率高4.HTTP請求一個請求行GET /index.jsp HTTP/1.1請求方式:一共7種 最常用的GET POST GET請求參數在地址后 POST請求參數請求的實體內容中請求資源的虛擬路徑當前遵循的協議版本若干請求頭Accept: text/html,image/* -- 通知服務器當前瀏覽器可以接受那些格式的數據Accept-Charset: ISO-8859-1 -- 瀏覽器可以接受的字符集編碼Accept-Encoding: gzip,compress -- 瀏覽器可以接受的壓縮格式Accept-Language: en-us,zh-cn -- 瀏覽器接受的語言環境,和國際化相關的頭Host: www.tedu.cn:80 -- 需要訪問的虛擬主機的名稱If-Modified-Since: Fri, 17 Feb 2017 18:23:51 GMT -- 這是和緩存機制相關的頭Referer: http://www.tedu.cn/index.jsp -- 這是和防盜鏈相關的頭,對當前資源的訪問來自哪個頁面的超鏈接User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) -- 客戶端的基本信息Cookie -- 和cookie相關的頭Connection: close/Keep-Alive -- 是否繼續保持連接 Date: Fri, 17 Feb 2017 18:23:51 GMT -- 當前發送請求的時間 空行實體內容5.HTTP響應一個狀態行HTTP/1.1 200 OK協議版本狀態碼:200 302 304 307 404 500描述信息若干響應頭Location: http://www.tedu.cn/index.jsp -- 配合302使用實現請求重定向Server:apache tomcat -- 服務器的基本信息Content-Encoding: gzip -- 服務器發送的數據使用的壓縮格式Content-Length: 80 -- 服務器發送的數據的大小Content-Language: zh-cn --服務器發送的數據使用的語言環境 國際化相關的頭Content-Type: text/html; charset=GB2312 -- 服務器發送的數據是什么格式的,如果是字符格式的數據,則還可以通知服務器發送的數據使用的是什么編碼,瀏覽器會根據這個頭指定的編碼決定使用哪個編碼來打開收到的數據Last-Modified: Fri, 17 Feb 2017 18:24:11 GMT -- 和緩存相關的頭Refresh: 1;url=http://www.tedu.cn -- 定時刷新相關的頭,通知瀏覽器,過幾秒后自動刷新訪問哪個地址Content-Disposition: attachment;filename=aaa.zip -- 通知瀏覽器以附件的形式打開發送過去的數據,是和文件下載相關的頭Set-Cookie:SS=Q0=5Lb_nQ; path=/search -- 和Cookie相關的頭Expires: -1 -- 通知瀏覽器是否緩存Cache-Control: no-cache -- 通知瀏覽器是否緩存Pragma: no-cache -- 通知瀏覽器是否緩存--之所以一個功能有三個頭,是因為歷史原因.所以為了網頁的兼容性考慮,通常這三個頭要一起使用Connection: close/Keep-Alive -- 是否保持連接Date: Fri, 17 Feb 2017 18:24:11 GMT -- 響應時的時間一個空行實體內容!!五、Servlet
1.概述Servlet是sun公司提供的一門用于開發動態web資源的技術。按照這套規范寫出來的Servlet可以放置到web應用中在Servlet容器中運行。 2.開發步驟寫一個類實現Servlet接口在web.xml中配置Servelt的訪問路徑<servlet><servlet-name>起一個名字</servlet-name><servlet-class>Servlet類的全路徑名稱</servlet-class></servlet><servlet-mapping><servlet-name>起一個名字</servlet-name><url-pattern>對外訪問虛擬路徑</url-pattern></servlet-mapping>對外訪問路徑的配置:/xxx/xxx/**.xx哪個最像找哪個*.后綴優先級最低 3.繼承結構Servelt|-GenericServlet|-HttpServlet4.Servlet的生命周期第一次被訪問時創建 調用init方法執行初始化創建出來后駐留在內存中為后續對該Servelt的請求服務每次訪問都觸發service方法執行處理邏輯直到web應用被銷毀之前 Servlet銷毀 銷毀之前調用destory方法執行善后工作5.Servlet訪問流程參看圖!!六、Request Response
1.Request概述在服務器內部代表http請求的對象2.Request繼承結構ServletRequest|-HttpServletRequest 3.Request主要功能獲取請求相關信息getRequestURL方法 -- 返回客戶端發出請求完整URL如: http://localhost/day09/servlet/SecondServletgetRequestURI方法 -- 返回請求行中的資源名部分如: /day09/servlet/SecondServletgetQueryString方法 -- 返回請求行中的參數部分如: username=zhangfei&password=123getRemoteAddr方法 -- 返回發出請求的客戶機的IP地址如: 127.0.0.1 //可能會出現0:0:0:0:0:0:0:1形式,是ipv6的表現形式。getMethod -- 得到客戶機請求方式如: GET或POST!!getContextPath -- 獲得當前web應用虛擬目錄名稱 如: /day09獲取請求頭getHeader(name)getHeaderNames()getIntHeader(name)方法 --- intgetDateHeader(name)方法 --- long(日期對應毫秒)獲取請求參數getParameter(String name) --- String 通過name獲得值getParameterValues(String name) --- String[] 通過name獲得多值 checkboxgetParameterMap() --- Map<String,String[]> key :name value: 多值getParameterNames() --- Enumeration<String> 獲得所有name亂碼:request.setCharacterEncoding(encode) -- post亂碼new String(param.getBytes("iso8859-1"),encode) -- get亂碼實現轉發包含request.getRequestDispatcher("xxx").forward(request,response); -- 服務器內部跳轉 只能看到被轉發的資源內容 轉發前的內容會被拋棄request.getRequestDispatcher("xxx").include(request,response); -- 服務器內部包含 兩邊的內容都有作為域來使用生命周期請求開始時創建request對象 生命周期開始 請求結束request對象銷毀 生命周期結束作用范圍整個請求鏈主要功能在整個請求過程中共享數據4.Response概述代表http響應的對象5.Response繼承結構ServletResponse|-HttpServletResponse6.主要功能設置狀態碼setStatus(int sc)setStatus(int sc, String sm)設置響應頭setHeader(String name, String value)setIntHeader(String name, int value)setDateHeader(String name, long date)獲取輸出流輸出數據到實體內容 PrintWriter getWriter()ServletOutputStream getOutputStream();亂碼:response.setCharacterEncoding(encode) -- 服務器將字符解析為字節時的編碼response.setContentType("text/html;charset="+encode) -- 通知瀏覽器解析響應時使用的編碼實現重定向302+Locationresponse.sendRedirect("xxx");實現定時刷新response.setHeader("refresh","3;url=xxx");實現禁止緩存response.setDateHeader("Expires",-1);response.setHeader("Cache-contrl","no-cache");response.setHeader("Pragma","no-cache");七、ServletConfig !ServletContext
1.ServletConfig概述代表當前Servlet的配置的對象 2.ServletConfig獲取this.getServletConfig(); 3.ServletConfig功能獲取Servlet的初始化參數 - 在web.xml的<servlet>標簽下配置的<init-param>標簽里指定的參數 可以將不像寫在servlet的提取到web.xml中管理getInitParameter()getInitparameterNames() 4.ServeltContext對象代表當前web應用 5.ServletContext對象的生命周期web應用創建時跟著創建 一直駐留在內存中 唯一的代表當前web應用 直到web應用銷毀時 跟著web應用的銷毀被銷毀 6.ServleltContext對象獲取servletConfig.getServletContext()this.getServletContext(); 7.ServletContext對象功能 - 獲取web應用的初始化參數可以在web應用的web.xml中<context-param>標簽為當前web應用配置初始化參數可以通過ServletContext獲取該web應用初始化參數getInitParametergetInitparameterNames 8.ServletContext對象作為域對象使用生命周期和web應用的命一樣長作用范圍整個web應用主要功能在web應用范圍內共享數據 9.ServletContext解決路徑難題web應用中獲取資源時路徑怎么寫都不對如果寫 相對路徑 -- tomcat/bin如果寫 絕對路徑 -- tomcat所在磁盤的根目錄下如果寫 盤符開始的路徑 -- 可以找到資源 一旦換一個發布環境 路徑就錯了servletContext.getRealPath("xxx") -- 會在傳入的路徑前拼接當前web應用的盤符開始的路徑 得到資源的盤符開始的路徑 從而訪問到資源 由于是動態獲取的 所以即使換了發布環境也沒問題**類加載器加載資源如果沒有ServletContext可以通過類加載器加載資源classLoader.getResource().getPath("xxx") -- 需要傳入相對于類加載器加載類的路徑!!八、Cookie Session
1.會話技術概述瀏覽器為了實現某一個功能 開發訪問服務器 從開始訪問 到結束功能 之間多次 請求響應加在一起 稱之為發生了一次會話會話最主要的問題時會話數據的保存2.cookiecookie的原理 - set-cookie響應頭 和 cookie請求頭cookie的apiCookie c = new Cookie(name,value);c.setMaxAge() -- 設定cookie的保存時長 如果不設置 默認保存在瀏覽器的內存中 瀏覽器關閉則消失 如果配置過則在瀏覽器的臨時文件夾下保存 到指定的時間c.setPath() -- 設定瀏覽器在訪問哪些路徑時 帶回這個cookie 如果不設置 默認值時 發送cookie的Servlet的父目錄及其子孫目錄response.addCookie(c)request.getCookies();刪除cookie發送同名 同path 但是maxage為0的cookie3.sessionsession的原理 - 在服務器內部創建瀏覽器對應的空間保存數據 專門為指定瀏覽器服務 這樣每個瀏覽器都有對應空間 保存會話數據- 通過一個特殊的Cookie - JSESSIONID 來識別瀏覽器域對象:生命周期第一次調用request.getSession()方法時創建 自殺超時意外身亡作用范圍整個會話范圍主要功能 在會話范圍內共享數據九、!!AJAX !!!!URL編碼 三種資源跳轉方式
AJAX - 異步請求 局部刷新 - 背著瀏覽器通過js訪問服務器 獲取 數據后 通過js改變頁面URL編碼 - HTTP協議只支持ISO8859-1 如果 想要在請求攜帶非iso8859-1的字符 需要進行URL編碼三種資源跳轉方式轉發重定向定時刷新十、JSP基礎
1.jsp概述看起來像html 但是其中可以寫java代碼 便于開發頁面在第一次被訪問時被翻譯成了Servlet執行 本質上仍然是一種動態web資源開發技術2.jsp語法模版元素腳本表達式<%= %>腳本片段<% %>jsp聲明<%! %>jsp注釋<%-- --%>jsp指令<%@ %>page指令<%@ page %>include指令<%@ include file=""%>taglib指令<%@ taglib uri="" prefx="" %>!!!jsp的九大隱式對象pagerequestresponseconfigapplicationsessionoutexceptionpageContextPageContext作為入口獲取其他八大隱式對象作為入口操作四大作用域域對象生命周期jsp頁面訪問開始時創建 訪問結束時銷毀作用范圍整個jsp頁面主要功能在當前jsp頁面中共享數據便捷的轉發包含十一、JSP標簽技術
jsp標簽 <jsp:inclue>用來替代request.getRequestDispatcher().include()<jsp:forward>用來替代request.getRequestDispatcher().forward()<jsp:param>配合前兩個標簽使用,可以在包含或轉發時,帶一些參數過去 !!el表達式獲取數據常量數據變量數據集合 數組中的數據map中的數據javabean的屬性執行運算算術運算比較運算邏輯運算empty運算符三元表達式使用內置常用對象 - 11內置對象pageContextpageScoperequestScopesessionScopeapplicationScopeparamparamValuesheaderheaderValuesCookieinitParam調用java方法jstl中fn函數庫jstl標簽庫c庫fn庫fmt庫sql庫xml庫<c:out>!<c:set>!<c:remove><c:catch>!!<c:if>!!<c:foreach><c:choose><c:when><c:otherwise><c:fortokens><c:fortokens><c:url>!!十二、JAVAEE開發模式
1.javaee開發模式的發展ServeltJSPJSP + JavaBeanServlet + JavaBean +Jsp!!!JAVAEE的經典三層架構 - web service dao - Servlet JSP Service Dao Javabean!!!!!**MVC設計模式 !!!!!**耦合 解耦 - 高內聚低耦合 - 接口+配置文件+工廠 - 依賴注入十三、Filter
1.filter概述三大組件之一攔截對資源的請求 控制是否允許通過 或在通過之前或之后做一些額外操作2.filter開發步驟寫一個類實現Filtler接口在web.xml中進行配置3.filter的聲明周期應用啟動創建 執行init 駐留在內存中工作 每次攔截執行 dofilter方法 應用銷毀前銷毀 調用destory方法善后4.filter的相關對象filterConfiggetInitParametergetInitparameterNamesgetServletContextfilterChaindofilter5.filter的應用全站亂碼解決過濾器!!!改造已有對象身上的不喜歡的方法:繼承裝飾動態代理Proxy.newProxyInstance自動登錄過濾器!!!MD5加密算法 - 數據摘要算法 數據指紋算法任意二進制算出128位二進制原文相同密文相同原文不同密文不同只能由原文算成密文 密文算不回原文數據中密碼保存 文件校驗 數字簽名十四、Listener
1.概述 三大組件之一監聽相關事件進行處理2.八大監聽器監聽三大作用域創建和銷毀的監聽器監聽三大作用域中屬性變化的監聽器使javabean自己敢做自己在session域中屬性變化的監聽器十五、文件上傳
1.文件上傳表單
上傳項必須有name屬性
必須post提交
設置enctype為multipart/form-data
!!!!!!十六、數據庫 - sql
1.mysql數據庫的安裝配置2.sql語言 增刪改查普通查詢條件查詢 where分組查詢 group by聚合查詢 count sum avg min max排序查詢 order by分頁查詢 limit子查詢連接查詢(多表查詢)3.多表設計數據之間的關系 要用表之間的關系保存1 - 1 在任意一方設計外鍵保存另一方的主鍵1 - * 在多的一方設計外鍵保存另一方的主鍵* - * 建立第三方關系表來保存兩張表主鍵的對應關系4.多表查詢笛卡爾積查詢 - 兩張表相乘的結果內連接查詢 - 兩邊都有的數據才查詢外連接查詢左外連接查詢 - 在內連接的基礎上增加左邊有右邊沒有的數據右外連接查詢 - 在內連接的基礎上增加右邊有左邊沒有的數據全外連接查詢 - 在內連接的基礎上增加左邊有右邊沒有的數據 和 右邊有左邊沒有的數據!!!!!!十七、數據庫 - jdbc
1.jdbc概述jdbc:sun提供的操作數據庫的接口數據庫驅動:不同數據庫廠商對jdbc接口的實現2.開發jdbc步驟導入驅動包 注冊數據庫驅動 獲取數據庫連接獲取傳輸器對象傳輸sql執行得到結果集遍歷結果集獲取數據關閉資源3.sql注入攻擊將用戶提交的數據拼接為sql的一部分造成 當用戶提交惡意參數 造成意外的sql的執行PreparedStatement 4.批處理5.連接池頻繁的開關數據庫連接 效率低下 通過數據庫連接池 來管理復用連接!!!!!!十八、數據庫 - 事務
1.事務的概念邏輯上的一組操作 要么同時完成 要么同時不完成2.控制事務mysql默認一條語句一個事務sql控制事務:start transaction;commit;rollback;jdbc控制事務: conn.setAutoCommit(false)conn.commit()conn.rollback()SavePoint sp = conn.setSavePoint();conn.rollback(sp);3.事務四大特性 - ACID原子性一致性隔離性持久性4.隔離性加鎖 - 效率低 - 并不是所有場景都要嚴格的隔離性 - 提供了選項5.四大隔離級別Read Uncommitted - 臟讀 不可重復讀 虛讀(幻讀)Read committed - 不可重復讀 虛讀(幻讀)Repeatable read - 虛讀(幻讀)Serilizable - 沒有任何問題 但是效率低臟讀:一個事務讀取到另一個事務未提交的數據不可重復讀:一個事務讀取到另一個事務已經提交的數據虛讀(幻讀):一個事務讀取全表數據 讀取到另一個并發事務的新增刪除記錄已提交的結果根據需求 選擇能夠防止想要防止的問題的基礎上 性能盡可能高的隔離級別6.鎖機制兩個并發讀取 - 不隔離兩個并發修改 - 必須隔離一個修改一個讀取 - Serializable下隔離 其他情況下不隔離共享鎖共享鎖和共享鎖共存 共享鎖和排他鎖不能共存非Serializable隔離級別下查詢不加所 Serializable隔離級別下查詢加共享鎖排他鎖排他鎖和任意鎖都不能共存任意隔離級別下增刪改加排他鎖**死鎖7.更新丟失兩個并發的事務基于同一個查詢結果進行修改 后提交的事務忽略了先提交的事務對數據庫的影響 造成的問題案例:重復充值秒殺搶購解決方案:數據庫隔離級別設置為Serializable - 效率低悲觀鎖for update 樂觀鎖修改時拼接額外檢查查詢條件的語句 之后 判斷是否修改成功 以此檢測是否更新丟失 如果丟失重來更新多查詢少 悲觀鎖查詢多更新少 樂觀鎖!!!!十九、ThreadLocal
Thread內部有map 但是外界無法直接操作 通過ThreadLocal可以操作 利用線程內部的map攜帶數據 由程序執行的上游向下游傳遞數據 又由于每個Thread有各自的map可以保存各自的對象 可以防止線程安全問題的產生set(obj) - 向當前線程map中存 tl->obj get() - 從當前線程map中獲取 tl對應的值 remove() - 從當前線程map中移除 tl鍵值對總結
以上是生活随笔為你收集整理的大数据WEB阶段总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据WEB阶段(二十)更新丢失
- 下一篇: 大数据WEB阶段Spring框架(一)I