撩課-Java每天5道面試題第10天

来源:https://www.cnblogs.com/gxq666/archive/2018/11/25/10014545.html
-Advertisement-
Play Games

撩課Java+系統架構 視頻 點擊開始學習 81.Servlet的會話機制? 82.Filter是什麼?有什麼作用? 83.Listener是什麼?有什麼作用? 84.你瞭解過Servlet3.0嗎? 85.JSP和Servlet有哪些相同點和不同點? ...


撩課Java+系統架構 視頻 點擊開始學習

81.Servlet的會話機制?

HTTP 是一種無狀態協議,
這意味著每次客戶端檢索網頁時,
都要單獨打開一個伺服器連接,
因此伺服器不會記錄下
先前客戶端請求的任何信息。
它與FTP、Telnet等協議不同,
FTP等協議可以記住用戶的連接信息。

會話(Session)是指一個終端用戶
與交互系統進行通信的時間間隔,
通常指從登陸系統到註銷系統之間
所經過的時間以及如果需要的話,
可能還有一定操作空間。
JSP有四種方式實現會話跟蹤功能。

Cookie
伺服器在響應請求時
可以將一些數據以"鍵-值"對的形式
通過響應信息保存在客戶端。
當瀏覽器再次訪問相同的應用時,
會將原先的存有session ID的Cookie
通過請求信息帶到伺服器端,
網路伺服器通過識別唯一的session ID來
代表每個客戶端,
從而識別這個客戶端接下來的請求。

用於會話跟蹤的Cookie叫做會話Cookie。
Servlet規範中會話跟蹤的cookie名字
必須是JSESSIONID,
保存在瀏覽器的記憶體中。

Cookie可以用於保持用戶的會話狀態,
但Cookie信息保存在客戶端,
存在較大的安全隱患,
且一般瀏覽器對Cookie的數目
及數據大小有嚴格的限制。
在Web應用中,
一般情況下通過HttpSession對象保持會話狀態

Session
Session技術則是
服務端的解決方案,
它是通過伺服器來保持狀態的。
在Java中是通過調用
HttpServletRequest的getSession方法
使用true作為參數創建的。
在創建了Session的同時,
伺服器會為該Session生成唯一的Session id,
而這個Session id在隨後的請求中
會被用來重新獲得已經創建的Session;
在Session被創建之後,
就可以調用Session相關的方法
往Session中增加內容了,
而這些內容只會保存在伺服器中,
發到客戶端的只有Session id;
當客戶端再次發送請求的時候,
會將這個Session id帶上,
伺服器接受到請求之後
就會依據Session id找到相應的Session,
從而再次使用之。
正式這樣一個過程,
用戶的狀態也就得以保持了。

隱藏表單域
隱藏表單域是將會話ID
添加到HTML的隱藏表單中
(類型為hidden的input)。
重定向和轉發

重寫URL
把會話ID編碼在URL中。 
counter.jsp;jsessionnid=be8d697876787876befdbde898789098980

對於URL覆寫,
伺服器從請求的URI中提取出會話ID,
並把該請求與相應的會話關聯起來,
然後在訪問會話數據的時候,
JSP頁面所進行的處理方式
就和使用cookie跟蹤會話id時
所使用的方式完全相同。
所以sesssion的實現
要依靠cookie或URL覆寫技術。

 

82.Filter是什麼?有什麼作用?

過濾器是處於客戶端與伺服器
資源文件之間的一道過濾網,
在訪問資源文件之前,
通過一系列的過濾器對請求進行修改、判斷等,
把不符合規則的請求在中途攔截或修改。
也可以對響應進行過濾,
攔截或修改響應。

 

 
瀏覽器發出的請求先遞交給第一個filter進行過濾,
符合規則則放行,
遞交給filter鏈中的下一個過濾器進行過濾。
過濾器在鏈中的順序
與它在web.xml中配置的順序有關,
配置在前的則位於鏈的前端。
當請求通過了鏈中所有過濾器後
就可以訪問資源文件了,
如果不能通過,
則可能在中間某個過濾器中被處理掉。

在doFilter()方法中,
chain.doFilter()前的一般是對request執行的過濾操作,
chain.doFilter後面的代碼
一般是對response執行的操作。


過濾器一般用於登錄許可權驗證、
資源訪問許可權控制、
敏感辭彙過濾、
字元編碼轉換等等操作,
便於代碼重用,
不必每個servlet中還要進行相應的操作。

 

83.Listener是什麼?有什麼作用?

監聽器用於監聽web應用中某些對象、
信息的創建、銷毀、增加,修改,刪除等
動作的發生,
然後作出相應的響應處理。
當範圍對象的狀態發生變化的時候,
伺服器自動調用監聽器對象中的方法。
常用於統計線上人數和線上用戶,
系統載入時進行信息初始化,
統計網站的訪問量等等。

分類:
按監聽的對象劃分,可以分為
ServletContext對象監聽器
HttpSession對象監聽器
ServletRequest對象監聽器
 
按監聽的事件劃分
對象自身的創建和銷毀的監聽器
對象中屬性的創建和消除的監聽器
session中的某個對象的狀態變化的監聽器

 

84.你瞭解過Servlet3.0嗎?

Servlet3.0相對於Servlet2.0來說
最大的改變是引入了Annotation註解
來取代xml配置,
用於簡化web應用的開發和部署。
最主要幾項特性:

1. 新增的註解支持:
該版本新增了若幹註解,
用於簡化 Servlet、
過濾器(Filter)
和監聽器(Listener)的聲明,
這使得 web.xml 部署描述文件
從該版本開始不再是必選的了。

2. 非同步處理支持:
有了該特性,
Servlet 線程不再需要一直阻塞,
直到業務處理完畢才能再輸出響應,
最後才結束該 Servlet 線程。
在接收到請求之後,
Servlet 線程可以將耗時的操作
委派給另一個線程來完成,
自己在不生成響應的情況下返回至容器。
針對業務處理較耗時的情況,
這將大大減少伺服器資源的占用,
並且提高 併發處理速度。

3. 可插性支持:
熟悉 Struts2 的開發者一定會
對其通過插件的方式
與包括 Spring 在內的各種常用框架的整合
特性記憶猶新。
將相應的插件封裝成 JAR 包並放在類路徑下,
Struts2 運行時便能自動載入這些插件。
現在 Servlet 3.0 提供了類似的特性,
開發者可以通過插件的方式很方便的
擴充已有 Web 應用的功能,
而不需要修改原有的應用。

 

85.JSP和Servlet有哪些相同點和不同點?

JSP是Servlet技術的擴展,
本質上是Servlet的簡易方式,
更強調應用的外表表達。
JSP編譯後是"類servlet"。

Servlet和JSP最主要的不同點在於,
Servlet的應用邏輯是在Java文件中,
並且完全從表示層中的HTML里分離開來。
而JSP的情況是
Java和HTML可以組合
成一個擴展名為.jsp的文件。

在實際項目開發當中,
JSP側重於視圖,
Servlet主要用於控制邏輯。

 

 


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

-Advertisement-
Play Games
更多相關文章
  • [1]Sprite [2]Label [3]Spine [4]Button [5]Audio ...
  • tang先生 Django~1 一 什麼是web框架? 框架,即framework,特指為解決一個開放性問題而設計的具有一定約束性的支撐結構,使用框架可以幫你快速開發特定的系統,簡單的說,就是你用別人搭建好的舞臺來做表演。 對於所有的Web應用,本質上其實就是一個socket服務端,用戶的瀏覽器其實 ...
  • 什麼是ui-router ui-router是AngularUI庫最有用的組件之一(AngularUI庫由AngularJS社區構建)。它是一個第三方路由框架,允許通過狀態機制組織介面,而不是簡單的URL路由。 什麼是ocLoayLoad ocLoayLoad是AngularJS的模塊按需載入器。按 ...
  • setInterval()和setTimeout()方法都是js原生的定時方法,當然它們兩個的作用也是不同的,並且最近在做上下滾動公告欄的時候,發現了setInterval()非常令人抓狂的問題,那就是用setInterval()做的定時滾動會隨著瀏覽器頁面切換變得無法控制!為什麼會說無法控制呢,因 ...
  • @[toc] 轉載請註明出處 初識jQuery 為什麼要使用jQuery? 1.什麼是jquery? jQuery是js的一個庫,簡化了js代碼的書寫(註:jQuery語句中用逗號分隔各個css,因為一條css對應一個對象屬性,對象屬性之間是用逗號分隔而非分號) 舉例: 例1:簡化了獲取元素的語句 ...
  • 本文針對react navigation^3.0.0版本,版本不對的話,請不要看本文,直接看官方英文文檔 ​ 最近一直在學習RN,沒找到什麼好的視頻,所以一直看文檔,一路上來雖然遇到一些亂七八糟的bug,但是能比較友好的解決掉 直到我使用 ,這個官方文檔上說 的導航組件,搞的我心態爆照,調試了一下午 ...
  • 微服務的目標是通過將應用程式分解為可以獨立部署的小型自治服務來提高應用程式版本的速度。微服務架構也帶來了一些挑戰,這些模式可以幫助緩解這些挑戰。設計模式(design pattern)是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。當然微服務中的雲設計模式也是對微服務中普遍存在的問題... ...
  • 一.在Servlet中,表單提交的非字元串類型需要手動轉換 1.在struts中,表單提供的常見數據類型struts框架自動轉換,無需手動轉換 2.在某些情況下,某些自定義類型struts不能完成自動轉換,需要進行手動轉換,如果需要轉換的類型轉換頻率較高時,手動轉換的代碼增多,這時可以使用strut ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...