過濾器監聽器面試題都在這裡

Java3y發表於2018-02-11

以下我是歸納的過濾器監聽器知識點圖:

過濾器監聽器面試題都在這裡

圖上的知識點都可以在我其他的文章內找到相應內容。

如果文章有錯的地方歡迎指正,大家互相交流。習慣在微信看技術文章的同學,可以關注微信公眾號:Java3y

監聽器常見面試題

監聽器有哪些作用和用法?

監聽器有哪些作用和用法?

Java Web開發中的監聽器(listener)就是application、session、request三個物件建立、銷燬或者往其中新增修改刪除屬性時自動執行程式碼的功能元件,如下所示:

  • ①ServletContextListener:對Servlet上下文的建立和銷燬進行監聽。
  • ②ServletContextAttributeListener:監聽Servlet上下文屬性的新增、刪除和替換。
  • ③HttpSessionListener:對Session的建立和銷燬進行監聽。
    • 補 充:session的銷燬有兩種情況:
      • session超時(可以在web.xml中通過<session- config>/<session-timeout>標籤配置超時時間);
      • 通過呼叫session物件的invalidate()方 法使session失效。
  • ④HttpSessionAttributeListener:對Session物件中屬性的新增、刪除和替換進行監聽。
  • ⑤ServletRequestListener:對請求物件的初始化和銷燬進行監聽。
  • ⑥ServletRequestAttributeListener:對請求物件屬性的新增、刪除和替換進行監聽。

常見的監聽器用途主要包括:網站線上人數技術、監聽使用者的行為(管理員踢人)

過濾器常見面試題

過濾器有哪些作用和用法?

過濾器有哪些作用和用法?

Java Web開發中的過濾器(filter)是從Servlet 2.3規範開始增加的功能,並在Servlet 2.4規範中得到增強。對Web應用來說,過濾器是一個駐留在伺服器端的Web元件,它可以擷取客戶端和伺服器之間的請求與響應資訊,並對這些資訊進行過 濾。當Web容器接受到一個對資源的請求時,它將判斷是否有過濾器與這個資源相關聯。如果有,那麼容器將把請求交給過濾器進行處理。在過濾器中,你可以改 變請求的內容,或者重新設定請求的報頭資訊,然後再將請求傳送給目標資源。當目標資源對請求作出響應時候,容器同樣會將響應先轉發給過濾器,再過濾器中, 你可以對響應的內容進行轉換,然後再將響應傳送到客戶端。

常見的過濾器用途主要包括:對使用者請求進行統一認證、對使用者的訪問請求進行記錄和稽核、對使用者傳送的資料進行過濾或替換、轉換圖象格式、對響應內容進行壓縮以減少傳輸量、對請求或響應進行加解密處理、觸發資源訪問事件、對XML的輸出應用XSLT等

和過濾器相關的介面主要有:Filter、FilterConfig、FilterChain

Java Web常見面試題

web.xml 的作用?

web.xml 的作用?

答:用於配置Web應用的相關資訊,如:監聽器(listener)、過濾器(filter)、 Servlet、相關引數、會話超時時間、安全驗證方式、錯誤頁面等。例如:

①配置Spring上下文載入監聽器載入Spring配置檔案:

<context-param>  
   <param-name>contextConfigLocation</param-name>  
  <param-value>classpath:applicationContext.xml</param-value>  
</context-param>  
  
<listener>  
   <listener-class>  
     org.springframework.web.context.ContextLoaderListener  
   </listener-class>  
</listener>  
複製程式碼

②配置Spring的OpenSessionInView過濾器來解決延遲載入和Hibernate會話關閉的矛盾:

<filter>  
  <filter-name>openSessionInView</filter-name>  
  <filter-class>  
     org.springframework.orm.hibernate3.support.OpenSessionInViewFilter  
  </filter-class>  
</filter>  
   
<filter-mapping>  
  <filter-name>openSessionInView</filter-name>  
  <url-pattern>/*</url-pattern>  
</filter-mapping>  
複製程式碼

③配置會話超時時間為10分鐘:

<session-config>  
  <session-timeout>10</session-timeout>  
</session-config>  
複製程式碼

④配置404和Exception的錯誤頁面:


[html] view plaincopy在CODE上檢視程式碼片派生到我的程式碼片 
<error-page>  
  <error-code>404</error-code>  
  <location>/error.jsp</location>  
</error-page>  
   
<error-page>  
  <exception-type>java.lang.Exception</exception-type>  
  <location>/error.jsp</location>  
</error-page>  
複製程式碼

⑤配置安全認證方式:


<security-constraint>  
  <web-resource-collection>  
    <web-resource-name>ProtectedArea</web-resource-name>  
    <url-pattern>/admin/*</url-pattern>  
    <http-method>GET</http-method>  
    <http-method>POST</http-method>  
  </web-resource-collection>  
  <auth-constraint>  
    <role-name>admin</role-name>  
  </auth-constraint>  
</security-constraint>  
   
<login-config>  
  <auth-method>BASIC</auth-method>  
</login-config>  
   
<security-role>  
  <role-name>admin</role-name>  
</security-role>  

複製程式碼

【補 充1】從Servlet 3開始,可以不用在web.xml中部署Servlet(小服務)、Filter(過濾器)、Listener(監聽器)等Web元件,Servlet 3提供了基於註解的部署方式,可以分別使用@WebServlet、@WebFilter、@WebListener三個部署小服務、過濾器、監聽器。

【補充2】如果Web提供了有價值的商業資訊或者是敏感資料,那麼站點的安全性就是必須考慮的問題。安全認證是實現安全性的重要手段,認證就是要解決“Are you who you say you are?”的問題。認證的方式非常多,簡單說來可以分為三類:

A.What you know? --口令

B.What you have? --數字證照(U盾、密保卡)

C.Who you are? -- 指紋識別、虹膜識別

在Tomcat中可以通過建立安全套接字層(Secure Socket Layer, SSL)以及通過基本驗證或表單驗證來實現對安全性的支援。

Servlet 3中的非同步處理指的是什麼?

Servlet 3中的非同步處理指的是什麼?

答: 在Servlet 3中引入了一項新的技術可以讓Servlet非同步處理請求。有人可能會質疑,既然都有多執行緒了,還需要非同步處理請求嗎?答案是肯定的,因為如果一個任務處 理時間相當長,那麼Servlet或Filter會一直佔用著請求處理執行緒直到任務結束,隨著併發使用者的增加,容器將會遭遇執行緒超出的風險,這這種情況下 很多的請求將會被堆積起來而後續的請求可能會遭遇拒絕服務,直到有資源可以處理請求為止。非同步特性可以幫助應用節省容器中的執行緒,特別適合執行時間長而且 使用者需要得到結果的任務,如果使用者不需要得到結果則直接將一個Runnable物件交給Executor(如果不清楚請檢視前文關於多執行緒和執行緒池的部 分)並立即返回即可

開啟非同步處理程式碼:



@WebServlet(urlPatterns = {"/async"}, asyncSupported = true)  
public class AsyncServlet extends HttpServlet {  
    private static final long serialVersionUID = 1L;  
  
    @Override  
    public void doGet(HttpServletRequest req, HttpServletResponse resp)   
            throws ServletException, IOException {  
        // 開啟Tomcat非同步Servlet支援  
        req.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);  
          
        final AsyncContext ctx = req.startAsync();  // 啟動非同步處理的上下文  
        // ctx.setTimeout(30000);  
        ctx.start(new Runnable() {  
  
            @Override  
            public void run() {  
                // 在此處新增非同步處理的程式碼  
              
                ctx.complete();  
            }  
        });  
    }  
}  
複製程式碼

如果文章有錯的地方歡迎指正,大家互相交流。習慣在微信看技術文章的同學,可以關注微信公眾號:Java3y

相關文章