javaWeb簡單易懂

2021-07-28 03:19:44 字數 2351 閱讀 4215

武松: 瀏覽器。

酒館: 伺服器。

店小二、廚師: servlet或者jsp。

來三碗好酒!: 瀏覽器向伺服器發出http請求。

店小二上酒: 伺服器的響應。

武松從進店到離開: 乙個http對話。

我們可以看到,web互動的最基本單位為http請求(武松點菜)。 每個使用者從進入**到離開**這段過程稱為乙個http會話 (武松進店到出店),乙個伺服器的執行過程中會有多個使用者訪問, 就是多個http會話(酒館當然不可能只接待武松乙個客人)。 那麼作用域就可以理解為:

request http請求開始到結束這段時間 

session http會話開始到結束這段時間 

request

乙個http請求的處理可能需要多個servlet合作(武松點菜時店小二就要吩咐廚房做菜), 幾個servlet之間可以通過某種方式傳遞資訊(店小二就用吆喝的方式通知廚房), 但這個資訊在請求結束後就無效了(廚房在做完菜之後就不用再管這道菜的事兒了)。

servlet之間的資訊共享是通過httpservletrequest介面的兩個方法來實現的:

void setattribute(string name, object value) 將物件 value 以 name 為名稱儲存到request作用域中。object getattribute(string name) 從request作用域中取得指定名字的資訊。doget()、dopost()函式的第乙個引數就是 httpservletrequest 物件, 使用這個物件的 setattribute 即可傳遞資訊。

那麼設定好資訊之後,如何將資訊傳給其他servlet? 這就要用到 requestdispatcher 介面的 forward 方法,將請求**給其他servlet。

requestdispatcher servletcontext.getrequestdispatcher(string path) 取得dispatcher以便**。path為**的目的servlet。void requestdispatcher.forward(servletrequest request, servletresponse response) 將request和response**。因此,只要在當前servlet中先 setattribute,然後forward,最後在forward到的servlet中 getattribute即可實現資訊傳遞。

php的程式設計師可能不太好理解這一段,因為php中沒有**的概念, 乙個請求只能由乙個php檔案來處理,所以php中根本沒有request作用域的概念。 而servlet則不同,請求可以在應用程式中任意**,所以用request作用域在不同servlet之間傳遞資訊。 需要注意兩點:

**不是重定向,**是在web應用內部進行的。php支援重定向但沒有**。

**對瀏覽器是透明的,也就是說,無論在伺服器上如何**,瀏覽器位址列中顯示的仍然是最初那個servlet的位址。

session

session作用域比較容易理解,同一瀏覽器訪問多次,在這多次訪問之間傳遞資訊,就是session作用域。 ('''武松每次點菜帳房先生都要記一筆賬,等武松走之前結帳用。 這筆帳在武松吃飯過程中始終有效,即位於session作用域中''')

session是通過httpsession介面實現的。

object httpsession.getattribute(string name) 從session中獲取資訊void httpsession.setattribute(string name, object value) 向session中儲存資訊而通過httpservletrequest.getsession()方法可以獲得httpsession物件。

httpsession httpservletrequest.getsessio() 獲取當前請求所在的session的物件。session的開始容易判斷(瀏覽器發出第乙個http請求即可認為會話開始), 但結束就不好判斷了(因為瀏覽器關閉時不會通知伺服器「我關了,會話可以結束了」), 所以只能通過這種方法判斷:如果一定的時間內客戶端沒有反應,則認為會話結束。 tomcat的預設值為120分鐘,但這個值也可以通過 httpsession 的 setmaxinactiveinterval 方法來設定。

void setmaxinactiveinterval(int interval) 設定繪畫的超時值。如果想主動讓會話結束,如使用者單擊「登出」的時候,可以使用 httpsession 的 invalidate 方法:

可以看到,每個作用域除了實現介面不同、意義不同之外,它們的使用方法和作用都是相同的, 都是通過 getattribute 和 setattribute 方法進行資訊傳遞。

作用域 意義 實現介面 

request http請求內 httpservletrequest 

session http會話內 httpsession 

簡單易懂BFS

廣度優先搜尋,又稱寬度優先搜尋,簡稱bfs bfsbfsbf sbfs bfs從起點開始,優先搜尋離起點最近的點,然後由這個最近的點擴充套件其他稍近的點,這樣一層一層的擴充套件,就像水波擴散一樣。b fs bfsbf s需要借助佇列來實現 根據該思路可以得出乙個簡單的 框架 void bfs 起始點...

KMP 簡單易懂

解決問題 str1中是否有某個子串等於str2,有則返回在str1中得到起始位置。舉例 abcabck 和 abcabct 此時返回 1 abcabcabct 和 abcabct 此時返回3 常規思路 用str2去比較str1從0開始的每一位,比較結束若有str2返回此時比較的起始位置,否則返回 1...

mockjs簡單易懂

專案開發的時候,有時候後端介面不給力,要是必須從後端獲取資料,沒有其他方式獲取資料,那就很蛋疼了 只能等後端介面正常,才可以繼續開發前端 mock 是乙個資料模擬生成器,用於幫助前端獨立於後端進行開發,其模擬 ajax 並返回相應的資料,從而使前端不必依賴於後端介面,方便開發。npm 安裝 mock...