Java面試題(JavaWeb)

64. jsp 和 servlet 有什么區(qū)別?

  1. jsp經(jīng)編譯后就變成了Servlet.(JSP的本質(zhì)就是Servlet平道,JVM只能識別java的類,不能識別JSP的代碼,Web容器將JSP的代碼編譯成JVM能夠識別的java類)
  2. jsp更擅長表現(xiàn)于頁面顯示恰响,servlet更擅長于邏輯控制税肪。
  3. Servlet中沒有內(nèi)置對象晾浴,Jsp中的內(nèi)置對象都是必須通過HttpServletRequest對象负乡,HttpServletResponse對象以及HttpServlet對象得到。
  4. Jsp是Servlet的一種簡化脊凰,使用Jsp只需要完成程序員需要輸出到客戶端的內(nèi)容抖棘,Jsp中的Java腳本如何鑲嵌到一個類中,由Jsp容器完成狸涌。而Servlet則是個完整的Java類切省,這個類的Service方法用于生成對客戶端的響應。

65. jsp 有哪些內(nèi)置對象帕胆?作用分別是什么朝捆?

JSP有9個內(nèi)置對象:

  • request:封裝客戶端的請求,其中包含來自GET或POST請求的參數(shù)懒豹;
  • response:封裝服務器對客戶端的響應芙盘;
  • pageContext:通過該對象可以獲取其他對象;
  • session:封裝用戶會話的對象歼捐;
  • application:封裝服務器運行環(huán)境的對象何陆;
  • out:輸出服務器響應的輸出流對象;
  • config:Web應用的配置對象豹储;
  • page:JSP頁面本身(相當于Java程序中的this);
  • exception:封裝頁面拋出異常的對象淘这。

66. 說一下 jsp 的 4 種作用域剥扣?

JSP中的四種作用域包括page、request铝穷、session和application钠怯,具體來說:

  • page代表與一個頁面相關(guān)的對象和屬性。
  • request代表與Web客戶機發(fā)出的一個請求相關(guān)的對象和屬性曙聂。一個請求可能跨越多個頁面晦炊,涉及多個Web組件;需要在頁面顯示的臨時數(shù)據(jù)可以置于此作用域宁脊。
  • session代表與某個用戶與服務器建立的一次會話相關(guān)的對象和屬性断国。跟某個用戶相關(guān)的數(shù)據(jù)應該放在用戶自己的session中。
  • application代表與整個Web應用程序相關(guān)的對象和屬性榆苞,它實質(zhì)上是跨越整個Web應用程序稳衬,包括多個頁面、請求和會話的一個全局作用域坐漏。

67. session 和 cookie 有什么區(qū)別薄疚?

  • 由于HTTP協(xié)議是無狀態(tài)的協(xié)議碧信,所以服務端需要記錄用戶的狀態(tài)時,就需要用某種機制來識具體的用戶街夭,這個機制就是Session.典型的場景比如購物車砰碴,當你點擊下單按鈕時,由于HTTP協(xié)議無狀態(tài)板丽,所以并不知道是哪個用戶操作的衣式,所以服務端要為特定的用戶創(chuàng)建了特定的Session,用用于標識這個用戶檐什,并且跟蹤用戶碴卧,這樣才知道購物車里面有幾本書。這個Session是保存在服務端的乃正,有一個唯一標識住册。在服務端保存Session的方法很多,內(nèi)存瓮具、數(shù)據(jù)庫荧飞、文件都有。集群的時候也要考慮Session的轉(zhuǎn)移名党,在大型的網(wǎng)站叹阔,一般會有專門的Session服務器集群,用來保存用戶會話传睹,這個時候 Session 信息都是放在內(nèi)存的耳幢,使用一些緩存服務比如Memcached之類的來放 Session。
  • 思考一下服務端如何識別特定的客戶欧啤?這個時候Cookie就登場了睛藻。每次HTTP請求的時候,客戶端都會發(fā)送相應的Cookie信息到服務端邢隧。實際上大多數(shù)的應用都是用 Cookie 來實現(xiàn)Session跟蹤的店印,第一次創(chuàng)建Session的時候,服務端會在HTTP協(xié)議中告訴客戶端倒慧,需要在 Cookie 里面記錄一個Session ID按摘,以后每次請求把這個會話ID發(fā)送到服務器,我就知道你是誰了纫谅。有人問炫贤,如果客戶端的瀏覽器禁用了 Cookie 怎么辦?一般這種情況下系宜,會使用一種叫做URL重寫的技術(shù)來進行會話跟蹤照激,即每次HTTP交互,URL后面都會被附加上一個諸如 sid=xxxxx 這樣的參數(shù)盹牧,服務端據(jù)此來識別用戶俩垃。
  • Cookie其實還可以用在一些方便用戶的場景下励幼,設(shè)想你某次登陸過一個網(wǎng)站,下次登錄的時候不想再次輸入賬號了口柳,怎么辦苹粟?這個信息可以寫到Cookie里面,訪問網(wǎng)站的時候跃闹,網(wǎng)站頁面的腳本可以讀取這個信息嵌削,就自動幫你把用戶名給填了,能夠方便一下用戶望艺。這也是Cookie名稱的由來苛秕,給用戶的一點甜頭。所以找默,總結(jié)一下:Session是在服務端保存的一個數(shù)據(jù)結(jié)構(gòu)艇劫,用來跟蹤用戶的狀態(tài),這個數(shù)據(jù)可以保存在集群惩激、數(shù)據(jù)庫店煞、文件中;Cookie是客戶端保存用戶信息的一種機制风钻,用來記錄用戶的一些信息顷蟀,也是實現(xiàn)Session的一種方式。

68. 說一下 session 的工作原理骡技?

其實session是一個存在服務器上的類似于一個散列表格的文件鸣个。里面存有我們需要的信息,在我們需要用的時候可以從里面取出來哮兰。類似于一個大號的map吧毛萌,里面的鍵存儲的是用戶的sessionid,用戶向服務器發(fā)送請求的時候會帶上這個sessionid喝滞。這時就可以從中取出對應的值了。

69. 如果客戶端禁止 cookie 能實現(xiàn) session 還能用嗎膏秫?

Cookie與 Session右遭,一般認為是兩個獨立的東西,Session采用的是在服務器端保持狀態(tài)的方案缤削,而Cookie采用的是在客戶端保持狀態(tài)的方案窘哈。但為什么禁用Cookie就不能得到Session呢?因為Session是用Session ID來確定當前對話所對應的服務器Session亭敢,而Session ID是通過Cookie來傳遞的滚婉,禁用Cookie相當于失去了Session ID,也就得不到Session了帅刀。

假定用戶關(guān)閉Cookie的情況下使用Session让腹,其實現(xiàn)途徑有以下幾種:

  1. 設(shè)置php.ini配置文件中的“session.use_trans_sid = 1”远剩,或者編譯時打開打開了“--enable-trans-sid”選項,讓PHP自動跨頁傳遞Session ID骇窍。
  2. 手動通過URL傳值瓜晤、隱藏表單傳遞Session ID。
  3. 用文件腹纳、數(shù)據(jù)庫等形式保存Session ID痢掠,在跨頁過程中手動調(diào)用。

70. spring mvc 和 struts 的區(qū)別是什么嘲恍?

攔截機制的不同
  • Struts2是類級別的攔截足画,每次請求就會創(chuàng)建一個Action,和Spring整合時Struts2的ActionBean注入作用域是原型模式prototype佃牛,然后通過setter淹辞,getter吧request數(shù)據(jù)注入到屬性。Struts2中吁脱,一個Action對應一個request桑涎,response上下文,在接收參數(shù)時兼贡,可以通過屬性接收攻冷,這說明屬性參數(shù)是讓多個方法共享的。Struts2中Action的一個方法可以對應一個url遍希,而其類屬性卻被所有方法共享等曼,這也就無法用注解或其他方式標識其所屬方法了,只能設(shè)計為多例凿蒜。
  • SpringMVC是方法級別的攔截禁谦,一個方法對應一個Request上下文,所以方法直接基本上是獨立的废封,獨享request州泊,response數(shù)據(jù)。而每個方法同時又何一個url對應漂洋,參數(shù)的傳遞是直接注入到方法中的遥皂,是方法所獨有的。處理結(jié)果通過ModeMap返回給框架刽漂。在Spring整合時演训,SpringMVC的Controller Bean默認單例模式Singleton,所以默認對所有的請求贝咙,只會創(chuàng)建一個Controller样悟,有應為沒有共享的屬性,所以是線程安全的,如果要改變默認的作用域窟她,需要添加@Scope注解修改陈症。
  • Struts2有自己的攔截Interceptor機制,SpringMVC這是用的是獨立的Aop方式礁苗,這樣導致Struts2的配置文件量還是比SpringMVC大爬凑。
底層框架的不同

Struts2采用Filter(StrutsPrepareAndExecuteFilter)實現(xiàn),SpringMVC(DispatcherServlet)則采用Servlet實現(xiàn)试伙。Filter在容器啟動之后即初始化嘁信;服務停止以后墜毀,晚于Servlet疏叨。Servlet在是在調(diào)用時初始化潘靖,先于Filter調(diào)用,服務停止后銷毀蚤蔓。

性能方面

Struts2是類級別的攔截卦溢,每次請求對應實例一個新的Action,需要加載所有的屬性值注入秀又,SpringMVC實現(xiàn)了零配置单寂,由于SpringMVC基于方法的攔截,有加載一次單例模式bean注入吐辙。所以宣决,SpringMVC開發(fā)效率和性能高于Struts2。

配置方面

spring MVC和Spring是無縫的昏苏。從這個項目的管理和安全上也比Struts2高尊沸。

71. 如何避免 sql 注入?

  1. PreparedStatement(簡單又有效的方法)
  2. 使用正則表達式過濾傳入的參數(shù)
  3. 字符串過濾
  4. JSP中調(diào)用該函數(shù)檢查是否包函非法字符
  5. JSP頁面判斷代碼

72. 什么是 XSS 攻擊贤惯,如何避免洼专?

XSS攻擊又稱CSS,全稱Cross Site Script (跨站腳本攻擊),其原理是攻擊者向有XSS漏洞的網(wǎng)站中輸入惡意的 HTML 代碼孵构,當用戶瀏覽該網(wǎng)站時屁商,這段 HTML 代碼會自動執(zhí)行,從而達到攻擊的目的颈墅。XSS 攻擊類似于 SQL 注入攻擊棒假,SQL注入攻擊中以SQL語句作為用戶輸入,從而達到查詢/修改/刪除數(shù)據(jù)的目的精盅,而在xss攻擊中讯检,通過插入惡意腳本渔嚷,實現(xiàn)對用戶游覽器的控制,獲取用戶的一些信息嚷往。 XSS是 Web 程序中常見的漏洞僻族,XSS 屬于被動式且用于客戶端的攻擊方式粘驰。

XSS防范的總體思路是:對輸入(和URL參數(shù))進行過濾屡谐,對輸出進行編碼。

73. 什么是 CSRF 攻擊蝌数,如何避免愕掏?

CSRF(Cross-site request forgery)也被稱為 one-click attack或者 session riding,中文全稱是叫跨站請求偽造顶伞。一般來說饵撑,攻擊者通過偽造用戶的瀏覽器的請求,向訪問一個用戶自己曾經(jīng)認證訪問過的網(wǎng)站發(fā)送出去唆貌,使目標網(wǎng)站接收并誤以為是用戶的真實操作而去執(zhí)行命令滑潘。常用于盜取賬號、轉(zhuǎn)賬锨咙、發(fā)送虛假消息等语卤。攻擊者利用網(wǎng)站對請求的驗證漏洞而實現(xiàn)這樣的攻擊行為,網(wǎng)站能夠確認請求來源于用戶的瀏覽器酪刀,卻不能驗證請求是否源于用戶的真實意愿下的操作行為粹舵。

如何避免:

1. 驗證 HTTP Referer 字段

HTTP頭中的Referer字段記錄了該 HTTP 請求的來源地址。在通常情況下骂倘,訪問一個安全受限頁面的請求來自于同一個網(wǎng)站眼滤,而如果黑客要對其實施 CSRF 攻擊,他一般只能在他自己的網(wǎng)站構(gòu)造請求稠茂。因此柠偶,可以通過驗證Referer值來防御CSRF 攻擊。

2. 使用驗證碼

關(guān)鍵操作頁面加上驗證碼睬关,后臺收到請求后通過判斷驗證碼可以防御CSRF诱担。但這種方法對用戶不太友好。

3. 在請求地址中添加token并驗證

CSRF 攻擊之所以能夠成功电爹,是因為黑客可以完全偽造用戶的請求蔫仙,該請求中所有的用戶驗證信息都是存在于cookie中,因此黑客可以在不知道這些驗證信息的情況下直接利用用戶自己的cookie 來通過安全驗證丐箩。要抵御 CSRF摇邦,關(guān)鍵在于在請求中放入黑客所不能偽造的信息,并且該信息不存在于 cookie 之中屎勘∈┘可以在 HTTP 請求中以參數(shù)的形式加入一個隨機產(chǎn)生的 token,并在服務器端建立一個攔截器來驗證這個 token概漱,如果請求中沒有token或者 token 內(nèi)容不正確丑慎,則認為可能是 CSRF 攻擊而拒絕該請求。這種方法要比檢查 Referer 要安全一些,token 可以在用戶登陸后產(chǎn)生并放于session之中竿裂,然后在每次請求時把token 從 session 中拿出玉吁,與請求中的 token 進行比對,但這種方法的難點在于如何把 token 以參數(shù)的形式加入請求腻异。 對于 GET 請求进副,token 將附在請求地址之后,這樣 URL 就變成 http://url?csrftoken=tokenvalue悔常。 而對于 POST 請求來說影斑,要在 form 的最后加上 <input type="hidden" name="csrftoken" value="tokenvalue"/>,這樣就把token以參數(shù)的形式加入請求了这嚣。

4. 在HTTP 頭中自定義屬性并驗證

這種方法也是使用 token 并進行驗證鸥昏,和上一種方法不同的是,這里并不是把 token 以參數(shù)的形式置于 HTTP 請求之中姐帚,而是把它放到 HTTP 頭中自定義的屬性里吏垮。通過 XMLHttpRequest 這個類,可以一次性給所有該類請求加上 csrftoken 這個 HTTP 頭屬性罐旗,并把 token 值放入其中膳汪。這樣解決了上種方法在請求中加入 token 的不便,同時九秀,通過 XMLHttpRequest 請求的地址不會被記錄到瀏覽器的地址欄遗嗽,也不用擔心 token 會透過 Referer 泄露到其他網(wǎng)站中去。

目錄:2020最新Java面試題及答案匯總(上)
目錄:2020最新Java面試題及答案匯總(下)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鼓蜒,一起剝皮案震驚了整個濱河市痹换,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌都弹,老刑警劉巖娇豫,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異畅厢,居然都是意外死亡冯痢,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門框杜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浦楣,“玉大人,你說我怎么就攤上這事咪辱≌窭停” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵油狂,是天一觀的道長澎迎。 經(jīng)常有香客問我庐杨,道長,這世上最難降的妖魔是什么夹供? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮仁堪,結(jié)果婚禮上哮洽,老公的妹妹穿的比我還像新娘。我一直安慰自己弦聂,他們只是感情好鸟辅,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著莺葫,像睡著了一般匪凉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捺檬,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天再层,我揣著相機與錄音,去河邊找鬼堡纬。 笑死聂受,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的烤镐。 我是一名探鬼主播蛋济,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼炮叶!你這毒婦竟也來了碗旅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤镜悉,失蹤者是張志新(化名)和其女友劉穎祟辟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體积瞒,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡川尖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了茫孔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叮喳。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缰贝,靈堂內(nèi)的尸體忽然破棺而出馍悟,到底是詐尸還是另有隱情,我是刑警寧澤剩晴,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布锣咒,位于F島的核電站侵状,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏毅整。R本人自食惡果不足惜趣兄,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悼嫉。 院中可真熱鬧艇潭,春花似錦、人聲如沸戏蔑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽总棵。三九已至鳍寂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間情龄,已是汗流浹背迄汛。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刃唤,地道東北人隔心。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像尚胞,于是被迫代替她去往敵國和親硬霍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353