1. 程式人生 > >Java面試題-Struts、Servlet(持續更新)

Java面試題-Struts、Servlet(持續更新)

什麼是Struts2 ?

       Struts2 是一款優秀MVC框架
  MVC:是一種思想,是一種模式,將軟體分為 Model模型、View檢視、Controller控制器 。MVC由來是web開發 JavaEE軟體三層結構 : web層(表現層)、業務邏輯層、資料持久層 (sun提供JavaEE開發規範)
  JavaEE開發更強調三層結構, web層開發注重MVC struts2 就是 web層開發框架,符合MVC模式
  struts1 、webwork 、jsf 、SpringMVC 都是MVC
##Struts2和Struts1 關係
  沒有關係, Struts2 全新框架,引入WebWork很多技術和思想,Struts2 保留Struts1 類似開發流程,Struts2 核心 webwork
##filter和servlet的比較?
  servlet


  是一種執行伺服器端的java應用程式,具有獨立於平臺和協議的特性,並且可以動態的生成web頁面,它工作在客戶端請求與伺服器響應的中間層。
  filter
  是一個可以複用的程式碼片段,可以用來轉換HTTP請求、響應和頭資訊。Filter不像Servlet,它不能產生一個請求或者響應,它只是修改對某一資源的請求,或者修改從某一的響應。

   生命週期

       servlet的生命週期始於它被裝入web伺服器的記憶體時,並在web伺服器終止或重新裝入servlet時結束。servlet一旦被裝入web伺服器,一般不會從web伺服器記憶體中刪除,直至web伺服器關閉或重新開始。

  1. 裝入:啟動伺服器時載入Servlet的例項;
  2. 初始化:web伺服器啟動時或web伺服器接收到請求時,或者兩者之間的某個時刻啟動;
  3. 初始化工作有init()方法負責執行完成;
  4. 呼叫:從第一次到以後的多次訪問,都是隻呼叫doGet()或doPost()方法;
  5. 銷燬:停止伺服器時呼叫destroy()方法,銷燬例項。

  filter(一定要實現javax.servlet包的Filter介面的三個方法init()、doFilter()、destroy(),空實現也行)

  1. 啟動伺服器時載入過濾器的例項,並呼叫init()方法來初始化例項;
  2. 每一次請求時都只調用方法doFilter()進行處理;
  3. 停止伺服器時呼叫destroy()方法,銷燬例項。

職責

servlet
  建立並返回一個包含基於客戶請求性質的動態內容的完整的html頁面;
  建立可嵌入到現有的html頁面中的一部分html頁面(html片段);
  讀取客戶端發來的隱藏資料;
  讀取客戶端發來的顯示資料;
  與其他伺服器資源(包括資料庫和java的應用程式)進行通訊;
  通過狀態程式碼和響應頭向客戶端傳送隱藏資料。
filter
  filter能夠在一個請求到達servlet之前預處理使用者請求,也可以在離開servlet時處理http響應:
  在執行servlet之前,首先執行filter程式,併為之做一些預處理工作;
  根據程式需要修改請求和響應;
  在servlet被呼叫之後截獲servlet的執行

區別

       servlet 流程是短的,url傳來之後,就對其進行處理,之後返回或轉向到某一自己指定的頁面。它主要用來在 業務處理之前進行控制。
  filter 流程是線性的,url傳來之後,檢查之後,可保持原來的流程繼續向下執行,被下一個filter, servlet接收等,而servlet 處理之後,不會繼續向下傳遞。filter功能可用來保持流程繼續按照原來的方式進行下去,或者主導流程,而servlet的功能主要用來主導流程。
  filter可用來進行字元編碼的過濾,檢測使用者是否登陸的過濾,禁止頁面快取等