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

如下我是概括的過濾器監聽器知識點圖:html

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

若是文章有錯的地方歡迎指正,你們互相交流。習慣在微信看技術文章的同窗,能夠關注微信公衆號:Java3y

監聽器常見面試題

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

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

Java Web開發中的監聽器(listener)就是application、session、request三個對象建立、銷燬或者往其中添加修改刪除屬性時自動執行代碼的功能組件,以下所示:web

  • ①ServletContextListener:對Servlet上下文的建立和銷燬進行監聽。
  • ②ServletContextAttributeListener:監聽Servlet上下文屬性的添加、刪除和替換。
  • ③HttpSessionListener:對Session的建立和銷燬進行監聽。面試

    • 補 充:session的銷燬有兩種狀況:spring

      • session超時(能夠在web.xml中經過<session- config>/<session-timeout>標籤配置超時時間);
      • 經過調用session對象的invalidate()方 法使session失效。
  • ④HttpSessionAttributeListener:對Session對象中屬性的添加、刪除和替換進行監聽。
  • ⑤ServletRequestListener:對請求對象的初始化和銷燬進行監聽。
  • ⑥ServletRequestAttributeListener:對請求對象屬性的添加、刪除和替換進行監聽。

常見的監聽器用途主要包括:網站在線人數技術、監聽用戶的行爲(管理員踢人)apache

過濾器常見面試題

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

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

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、相關參數、會話超時時間、安全驗證方式、錯誤頁面等。例如:session

①配置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
相關文章
相關標籤/搜索