面試題整理----JavaWeb

1.jsp 和 servlet 有什麼區別?spring

JSP本質上是Servlet的一種簡易形式,JSP會被服務器處理成一個相似於Servlet的Java程序,能夠簡化頁面內容的生成。Servlet和JSP最主要的不一樣點在於,Servlet的應用邏輯是在Java文件中,而且徹底從表示層中的HTML分離開來。而JSP的狀況是Java和HTML能夠組合成一個擴展名爲.jsp的文件。JSP側重於視圖,Servlet更側重於控制邏輯,在MVC架構模式中,JSP適合充當視圖(view)而Servlet適合充當控制器(controller)。sql

2.jsp 有哪些內置對象?做用分別是什麼?數據庫

  JSP有9個內置對象:瀏覽器

  • request:封裝客戶端的請求,其中包含來自GET或POST請求的參數;
  • response:封裝服務器對客戶端的響應;
  • pageContext:經過該對象能夠獲取其餘對象;
  • session:封裝用戶會話的對象;
  • application:封裝服務器運行環境的對象;
  • out:輸出服務器響應的輸出流對象;
  • config:Web應用的配置對象;
  • page:JSP頁面自己(至關於Java程序中的this);
  • exception:封裝頁面拋出異常的對象。

3.說一下 jsp 的 4 種做用域?安全

  • page表明與一個頁面相關的對象和屬性。
  • request表明與Web客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個Web組件;須要在頁面顯示的臨時數據能夠置於此做用域。
  • session表明與某個用戶與服務器創建的一次會話相關的對象和屬性。跟某個用戶相關的數據應該放在用戶本身的session中。
  • application表明與整個Web應用程序相關的對象和屬性,它實質上是跨越整個Web應用程序,包括多個頁面、請求和會話的一個全局做用域。

4.session 和 cookie 有什麼區別?服務器

cookie數據存放在瀏覽器即客戶端,session存在在服務器上cookie

cookie是不安全的,session是安全的session

同一個用戶在訪問一個網站期間,全部的session在任何一個地方均可以訪問到;若是設置了訪問路徑,在同一個網站中不一樣路徑下的cookie互相是訪問不到的.cookie只能是子路徑訪問父路徑設置的cookie架構

5.說一下 session 的工做原理?mvc

Session內容保存在服務器端的,一般是保存在內存中,固然也能夠保存在文件、數據庫等等。客戶端跟服務器端經過SessionId來關聯, SessionId一般以Cookie的形式存儲在客戶端。每次HTTP請求,SessionId都會隨着Cookie被傳遞到服務器端,這樣就能夠經過SessionId取到對應的信息,來判斷這個請求來自於哪一個客戶端/用戶。

6.若是客戶端禁止 cookie 能實現 session 還能用嗎?

不必定,一般狀況下,SessionId均由Cookie負責保存,可是客戶端跟服務器端經過HTTP交互,除了Cookie能夠攜帶信息以外,URL也能夠。不過對用戶不友好,因此基本上沒有互聯網項目會採用這種方案。

7.spring mvc 和 struts 的區別是什麼?

  1、攔截機制不一樣  

  Struts2是類級別的攔截,每次請求就會建立一個Action,和Spring整合時Struts2的ActionBean注入做用域是原型模式prototype,而後經過setter,getter吧request數據注入到屬  性。Struts2中,一個Action對應一個request,response上下文,在接收參數時,能夠經過屬性接收,這說明屬性參數是讓多個方法共享的。Struts2中Action的一個方法能夠對  應一個url,而其類屬性卻被全部方法共享,這也就沒法用註解或其餘方式標識其所屬方法了,只能設計爲多例。 

  SpringMVC是方法級別的攔截,一個方法對應一個Request上下文,因此方法直接基本上是獨立的,獨享request,response數據。而每一個方法同時又何一個url對應,參數的傳  遞是直接注入到方法中的,是方法所獨有的。處理結果經過ModeMap返回給框架。在Spring整合時,SpringMVC的Controller Bean默認單例模式Singleton,因此默認對全部的  請求,只會建立一個Controller,有應爲沒有共享的屬性,因此是線程安全的,若是要改變默認的做用域,須要添加@Scope註解修改。

  Struts2有本身的攔截Interceptor機制,SpringMVC這是用的是獨立的Aop方式,這樣致使Struts2的配置文件量仍是比SpringMVC大。

  2、底層框架不一樣

  Struts2採用Filter(StrutsPrepareAndExecuteFilter)實現,SpringMVC(DispatcherServlet)則採用Servlet實現。Filter在容器啓動以後即初始化;服務中止之後墜毀,晚於   Servlet。Servlet在是在調用時初始化,先於Filter調用,服務中止後銷燬。

  3、性能方面

  Struts2是類級別的攔截,每次請求對應實例一個新的Action,須要加載全部的屬性值注入,SpringMVC實現了零配置,因爲SpringMVC基於方法的攔截,有加載一次單例模式bean注入。因此,SpringMVC開發效率和性能高於Struts2。

8.如何避免 sql 注入?

  SQL Injection 就是利用
  某些數據庫的外部接口將用戶數據插入到實際的數據庫操做語言(SQL)當中,從而達到入
  侵數據庫乃至操做系統的目的。它的產生主要是因爲程序對用戶輸入的數據沒有進行嚴格的
  過濾,致使非法數據庫查詢語句的執行 。

  對 JavaJSP 開發的應用,可使用 PrepareStatement+Bind-variable 來防止 SQL 注入(待擴展

------------待補充-----------歡迎評論補充-------共同探討----

相關文章
相關標籤/搜索