整理筆記--Web基礎

来源:https://www.cnblogs.com/kz2017/archive/2018/03/18/8594068.html
-Advertisement-
Play Games

c/s是客戶機/伺服器,b/s是瀏覽器/伺服器。 ipv4 192.168.....(內網ip) 通過路由器的NAT(維護了一張表,用來轉換ip對應外網)。 當ipv6推廣開,就不用使用路由器了。 通信原理: 寫ip地址訪問太麻煩,於是有了功能變數名稱,它會先訪問本地的hosts,沒有則去網路訪問DNS服務 ...


c/s是客戶機/伺服器,b/s是瀏覽器/伺服器。

 

ipv4 192.168.....(內網ip) 通過路由器的NAT(維護了一張表,用來轉換ip對應外網)。

當ipv6推廣開,就不用使用路由器了。

 

通信原理:

寫ip地址訪問太麻煩,於是有了功能變數名稱,它會先訪問本地的hosts,沒有則去網路訪問DNS伺服器,DNS伺服器會幫我們去查找目標伺服器,然後把對應的Ip地址返回。

 

虛擬主機(可以讓多個主機名稱,在一個單一伺服器(或是一個伺服器組)上運作,而且可以分開支持每個單一的主機名稱),

web.xml放在WEB-INF其實就是為了可以訪問虛擬主機。

 

Servlet

生命周期:

伺服器啟動時,Servlet生命周期中的任何方法都不會被調用。
當Servlet第一次被訪問時,首先調用構造函數,之後是init()方法,該方法僅被調用一次,之後是service()方法。
如果Servlet再被訪問,每次訪問伺服器都會開啟新線程,調用service()方法。
當伺服器重啟或正常關閉(shutdown.bat)時,調用destroy()方法。
Servlet對象是tomcat創建的,每次請求都會調用service()方法,tomcat伺服器會在每次調用service()方法時,為該方法創建Request對象和Response對象。
在HttpServlet代碼實現中,根據請求方式的不同,調用相應的doXXX方法,例如get方式請求調用doGet()方法,post方式調用doPost()方法。

 

補充:

<!--Servlet隨伺服器啟動而初始化-->
<load-on-startup>1</load-on-startup> 

 

Cookie(key-value形式)原理:

Cookie的有效時間:

cookie.setMaxAge(數值):
  -1,預設值,表示只在瀏覽器記憶體中存活。
  60*60,代表一小時。
  0,代表作廢。
cookie.setPath(“/”):設置路徑。

 

Cookie的生命周期:

 Cookie cookie =new Cookie("name", "value")//創建

銷毀:
  1.會話Cookie在瀏覽器關閉時銷毀。

  2.持久Cookie在Cookie過期時銷毀。

 

Session原理:

當首次使用session時,伺服器端要創建session,session是保存在伺服器端,而給客戶端的是session的id(一個cookie中保存了sessionId)。客戶端帶走的是sessionId,而數據是保存在session中。
當客戶端再次訪問伺服器時,在請求中會帶上sessionId,而伺服器會通過sessionId找到對應的session,而無需再創建新的session。

 

Session的生命周期:

 request.getSession();//創建

銷毀:
  1.伺服器關閉時銷毀。
  2.Session過期時銷毀。
  3.調用HttpSession.invalidate()。

 

設置Session過期時間:
  1.配置web.xml:

<session-config>
 <!-- 單位是分鐘-->
<session-timeout>30<session-timeout>
</session-config>

  2.調用session.setMaxInactiveInterval(int interval),單位是秒。
  3.手動調用session.invalidate()。

 

ServletContext
生命周期:伺服器啟動時創建,伺服器關閉銷毀,所有Servlet共用保存全局數據。
用途:資料庫連接池、工程配置屬性、配置文件內容。

  a.轉發和重定向:

    轉發(java特有):

      1.如果伺服器在處理客戶請求的時候,需要多個伺服器程式進行同時處理,這時候就需要使用轉發.。

2.ServletContext.getRequestDispatcher(String path) : 指定轉發路徑。
3.RequestDispatcher.forward(ServletRequest request, ServletResponse response) : 轉發參數,進行後續操作。

    重定向 : 伺服器收到請求後,通知客戶端需要訪問下一個目標程式進行後續處理。

  區別:

    1.轉發產生一次請求一次響應,重定向產生兩次請求兩次響應。
    2.轉發只能跳轉站內資源,重定向可以定向任何站點資源 。
    3.轉發URL地址不變,重定向URL地址改變 。
    4.轉發對客戶端不可見,重定向對客戶端可見。
    5.轉發共用同一個Request中數據,重定向產生兩次請求,兩個不同的Request對象,不能共用Request數據。

  b.獲取Web應用資源文件:

    1.在Web應用中,必須通過絕對磁碟路徑來獲取文件。如果該文件位於/WEB-INF/classes目錄下(src的文件保存在/WEB-INF/classes目錄中),還可以通過類載入器獲取
clazz.getResource("/文件").getFile();

2.ServletContext.getRealPath(String path) : 獲取Web應用中的資源的絕對磁碟路徑,String path參數代表相對路徑。

  c.獲取參數:

1.getServletConfig()-->初始化參數。
2.getServletContext()-->全局參數。

  d.數據共用

1.ServletContext.setAttribute(String name, Object object):保存一個全局參數。
2.ServletContext.getAttribute(String name):獲取一個全局參數的值。

 

HttpSession
生命周期:訪問JSP/Servlet等程式時創建。
用途:系統登陸信息、購物車數據

同一客戶端機器多次請求同一個資源,session一樣嗎?

對於多標簽的瀏覽器(比如360瀏覽器)來說,在一個瀏覽器視窗中,多個標簽同時訪問一個頁面,session是一個。對於多個瀏覽器視窗之間,同時或者相隔很短時間訪問一個頁面,session是多個的,和瀏覽器的進程有關。對於一個同一個瀏覽器視窗,直接錄入url訪問同一應用的不同資源,session是一樣的。

 

禁用Cookie後使用Session:

API:response.encodeURL
註意:
如果伺服器進行URL重寫,必須對所有路徑進行重寫,
實際開發中,不要讓用戶禁用Cookie。

例子:

protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
session.setAttribute("name", "zhangsan");
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("寫出成功");
String url = "/LoginDemo/GetSession";
// 重寫URL
String encodeURL = response.encodeURL(url);
response.getWriter().write("<a href='" + encodeURL + "'>查看數據</a>");
}

 

HttpServletRequest
生命周期:客戶端發起請求時,伺服器創建對象,在響應結束時,對象銷毀保存Servlet向JSP傳輸數據信息,Servlet將操作結果傳遞JSP。

用途:登錄錯誤信息

  a.轉發:

getRequestDispatcher(path).forward(request,response)

  和ServletContext的區別:

  1.ServletContext對象當伺服器啟動時創建,伺服器關閉時銷毀

  2.HttpServletRequest對象當產生請求時創建,響應結束時銷毀

  b.亂髮問題解決:

  1.POST請求 :

 request.setCharacterEncoding("客戶端編碼集");

  2.GET請求 :使用new String(name.getBytes("iso-8859-1"), "utf-8")構造函數對數據進行重新編碼

 

生命周期的長度:

ServletContext > HttpSession > HttpServletRequest 

開發中選擇的原則:優先使用生命周期短的。

 

HttpServletResponse

有關setHeader(頭信息):

  1.自動刷新

  需求 : 完成一個類似論壇登錄成功,三秒後打開主頁的功能。
  實現 :
  方式一 :

 "refresh:3;url=http://www.baidu.com" //設置頭信息

  方式二 : 使用meta標簽
  meta標簽能夠實現和頭信息相同的效果

  http-equiv = 頭信息的name
  content = 頭信息的value

  2.禁止緩存

  實現:

設置信息頭 :

"Cache-Control", "no-cache"
"Pragma", "no-cache"
"Expires", "Thu, 01 Dec 1994 16:00:00 GMT"

//下麵這個設置時間的是上面的簡單方法

setDateHeader("Expires", -1)

  由於市面上的瀏覽器比較多,支持的屬性不一致,所以通常情況下會把三個信息頭同時設置。

  3.下載文件

  getServletContext().getMimeType(path): 獲取文件的編碼類型

  ("Content-Disposition","attachment;filename=" + fileName)
  //attachment: 要以下載的形式下載這個文件
  // filename: 指定要下載的文件的名字

輸出中文字元:

setCharacterEncoding() : 設置對外輸出的內容的編碼,無法生成頭信息
setContentType("text/html;charset=utf-8") : 設置對外輸出的內容的編碼,同時生成頭信息,通知瀏覽器按照對應的格式解析內容

 

 Servlet與線程安全:

因為一個類型的Servlet只有一個實例對象,那麼就有可能會現時出一個Servlet同時處理多個請求,Servlet不是線程安全的。
所以我們不應該在Servlet中隨意創建成員變數.

 

tomcat常見問題:
1.    記憶體溢出
系統彈出設置tomcat配置頁面,在Argument中末尾添加參數中的VM arguments中追加:

-Xms256M -Xmx512M -XX:PermSize=256m -XX:MaxPermSize=512m


參數的意思

-vmargs:說明後面是VM的參數
-Xms40m:虛擬機占用系統的最小記憶體
-Xmx256m:虛擬機占用系統的最大記憶體
-XX:PermSize:最小棧記憶體大小。一般報記憶體不足時,都是說這個太小,堆空間剩餘小於5%就會警告,建議把這個稍微設大一點,不過要視自己機器記憶體大小來設置
-XX:MaxPermSize:最大棧記憶體大小。這個也適當大些
-Xmx512M的5%為25.6M,理論上要求-Xmx的數值與-XX:MaxPermSize必須大於25.6M


2.    命令啟動不了
右鍵編輯啟動指令  在第一行下麵添加

SET JAVA_HOME=C:\Program Files\Java\jdk1.7.0_80
SET TOMCAT_HOME=C:\ruan_jian\apache-tomcat-7.0.73


3.    啟動速度變快

<Host appBase="webapps" autoDeploy="false" deployOnStartup="false" name="localhost" unpackWARs="true">

Servers下的 server.xml 116行 註釋掉原來的

4.    解決GET請求
64行 tomcat  get亂碼過濾  URIEncoding="utf-8"

5.    本地tomcat啟動不了 maven tomcat能啟動(或相反)
換一個工作空間 並且重新配置tomcat

連接池:

不使用連接池的缺點:

用戶每次請求都需要向資料庫獲得鏈接,而資料庫創建連接通常需要消耗相對較大的資源,創建時間也較長。假設網站一天10萬訪問量,資料庫伺服器就需要創建10萬次連接,極大的浪費資料庫的資源,並且極易造成資料庫伺服器記憶體溢出、拓機。

 

第3方連接池:

  1.DBCP  2.C3P0

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 優化DOM得從重繪和重排講起,long long ago... 1、重繪和重排 1.1 重繪和重排是什麼 重繪是指一些樣式的修改,元素的位置和大小都沒有改變; 重排是指元素的位置或尺寸發生了變化,瀏覽器需要重新計算渲染樹,而新的渲染樹建立後,瀏覽器會重新繪製受影響的元素。 1.2 瀏覽器渲染頁面 去 ...
  • 本教程案例github:https://github.com/axel10/ngrx_demo-counter-and-list angular2+ 的學習成本應該是三大框架中最高的一個,教程及案例稀缺,流程較為複雜,這裡我用計數器和線上獲取用戶數據並渲染成列表這兩個案例來幫大家快速入手angula ...
  • 閉包(closure)是Javascript語言的一個難點,也是它的特色,很多高級應用都要依靠閉包實現。 下麵就是我的學習筆記,對於Javascript初學者應該是很有用的。 一、變數的作用域 要理解閉包,首先必須理解Javascript特殊的變數作用域。 變數的作用域無非就是兩種:全局變數和局部變 ...
  • 開始接觸不太清楚rtmp協議的流,後來折騰了一番採用了videojs的插件下麵是案例 videojs案例 剛開始採用的是videojs的形式展示rtmp流媒體視頻的,後面發win10的谷歌不相容然後採用了flowplayer的插件播放 ...
  • Cas的全稱是Centeral Authentication Service,是對單點登錄SSO(Single Sign On)的一種實現。其由Cas Server和Cas Client兩部分組成,Cas Server是核心,而Cas Client通常就對應於我們的應用。一個Cas Server可以 ...
  • 6.1.2 介面不是類,不能實例化一個介面;但是可以聲明介面的變數;Comparable x; 介面變數必須引用實現了介面的類對象;x = new Employee(); 檢查一個對象是否屬於某個特定類(instanceof); 檢查一個對象是否屬於某個特定的介面(instance);if (anO ...
  • webService入門 Web service是一個平臺獨立的,低耦合的,自包含的、基於可編程的web的應用程式,可使用開放的XML(標準通用標記語言下的一個子集)標準來描述、發佈、發現、協調和配置這些應用程式,用於開發分散式的互操作的應用程式。[1] Webservice跨平臺跨語言; Java... ...
  • WebService介紹 首先我們來談一下為什麼需要學習webService這樣的一個技術吧.... 問題一 如果我們的網站需要提供一個 天氣預報 這樣一個需求的話,那我們該怎麼做????? 天氣預報這麼一個功能並不是簡單的JS組件就能夠實現的,它的數據是依賴資料庫分析出來的,甚至需要衛星探測..我 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...