java面試---Java Web

  1. jsp 和 servlet 有什麼區別?
    1.jsp經編譯後就變成了Servlet.
    2.jsp更擅長表現於頁面顯示,servlet更擅長於邏輯控制.
    3.Servlet中沒有內置對象,Jsp中的內置對象都是必須通過HttpServletRequest對象,HttpServletResponse對象以及HttpServlet對象得到.
  2. jsp 有哪些內置對象?作用分別是什麼?
    1).Page指的是JSP被翻譯成Servlet的對象的引用.
    2).pageContext對象可以用來獲得其他8個內置對象,還可以作爲JSP的域範圍對象使用.pageContext中存的值是當前的頁面的作用範圍
    3).request代表的是請求對象,可以用於獲得客戶機的信息,也可以作爲域對象來使用,使用request保存的數據在一次請求範圍內有效。
    4).Session代表的是一次會話,可以用於保存用戶的私有的信息,也可以作爲域對象使用,使用session保存的數據在一次會話範圍有效
    5).Application:代表整個應用範圍,使用這個對象保存的數據在整個web應用中都有效。
    6).Response是響應對象,代表的是從服務器向瀏覽器響應數據.
    7).Out:JSPWriter是用於向頁面輸出內容的對象
    8).Config:指的是ServletConfig用於JSP翻譯成Servlet後 獲得Servlet的配置的對象.
    9).Exception:在頁面中設置isErrorPage=”true”,即可使用,是Throwable的引用.用來獲得頁面的錯誤信息。
  3. 說一下 jsp 的 4 種作用域?
    1).pageContext:頁面域
    2).request:請求域
    3).session:會話域
    4).application: 應用域
  4. session 和 cookie 有什麼區別?
    Cookie是存放在客戶端(瀏覽器),Session是保存在服務端。
    Cookie的安全性不如Session
    Session如果過多,會對服務端產生較大的壓力,不是特別重要的數據,可以考慮使用Cookie存放
  5. 說一下 session 的工作原理?
    當用戶訪問到一個服務器,如果服務器啓用Session,服務器就要爲該用戶創建一個SESSION,在創建這個SESSION的時候,服務器首先檢查這個用戶發來的請求裏是否包含了一個SESSION ID,如果包含了一個SESSION ID則說明之前該用戶已經登陸過併爲此用戶創建過SESSION,那服務器就按照這個SESSION ID把這個SESSION在服務器的內存中查找出來(如果查找不到,就有可能爲他新創建一個),如果客戶端請求裏不包含有SESSION ID,則爲該客戶端創建一個SESSION並生成一個與此SESSION相關的SESSION ID。這個SESSION ID是唯一的、不重複的、不容易找到規律的字符串,這個SESSION ID將被在本次響應中返回到客戶端保存,而保存這個SESSION ID的正是COOKIE,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發送給服務器。
  6. 如果客戶端禁止 cookie 能實現 session 還能用嗎?
    可以有其他機制在COOKIE被禁止時仍然能夠把Session id傳遞迴服務器。
    經常被使用的一種技術叫做URL重寫,就是把Session id直接附加在URL路徑的後面一種是作爲URL路徑的附加信息,表現形式爲:
      http://…。/xxx;jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764;
      另一種是作爲查詢字符串附加在URL後面,表現形式爲:
      http://…。。/xxx?jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
      還有一種就是表單隱藏字段。就是服務器會自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把Session id傳遞迴服務器。
  7. spring mvc 和 struts 的區別是什麼?
    Struts2是類級別的攔截,SpringMVC是方法級別的攔截
    SpringMVC的方法之間基本上獨立的,獨享request response數據,請求數據通過參數獲取;而Struts2搞的就比較亂,雖然方法之間也是獨立的, 但其所有Action變量是共享的
    Struts2需要針對每個request進行封裝;
    Struts2有以自己的interceptor機制,SpringMVC用的是獨立的AOP方式
    SpringMVC的入口是servlet,而Struts2是filter
    SpringMVC開發效率和性能高於Struts2
    SpringMVC和Spring是無縫的
  8. 如何避免 sql 注入?
    1.使用預編譯綁定變量的SQL語句
    2.嚴格加密處理用戶的機密信息
    3.不要隨意開啓生產環境中Webserver的錯誤顯示
    4.使用正則表達式過濾傳入的參數
    5.字符串過濾
    6.檢查是否包函非法字符
  9. 什麼是 XSS 攻擊,如何避免?
    XSS(Cross Site Scripting),即跨站腳本攻擊,是一種常見於web應用程序中的計算機安全漏洞.XSS通過在用戶端注入惡意的可運行腳本,若服務器端對用戶輸入不進行處理,直接將用戶輸入輸出到瀏覽器,然後瀏覽器將會執行用戶注入的腳本。
    預防:
    1、獲取用戶輸入,不用.innerHTML,用innerText。
    2、對用戶輸入進行過濾,如 HTMLEncode 函數實現應該至少進行 & < > " ’ / 等符號轉義成 &amp &lt &gt &quot &#x27 &#x2F;
  10. 什麼是 CSRF 攻擊,如何避免?
    CSRF(Cross-site request forgery)也被稱爲 one-click attack或者 session riding,中文全稱是叫跨站請求僞造。一般來說,攻擊者通過僞造用戶的瀏覽器的請求,向訪問一個用戶自己曾經認證訪問過的網站發送出去,使目標網站接收並誤以爲是用戶的真實操作而去執行命令。常用於盜取賬號、轉賬、發送虛假消息等。攻擊者利用網站對請求的驗證漏洞而實現這樣的攻擊行爲,網站能夠確認請求來源於用戶的瀏覽器,卻不能驗證請求是否源於用戶的真實意願下的操作行爲。
    預防:
    1.驗證 HTTP Referer 字段
    2.使用驗證碼
    3.在請求地址中添加token並驗證
    4.在HTTP 頭中自定義屬性並驗證
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章