以下我是歸納的過濾器監聽器知識點圖:
圖上的知識點都可以在我其他的文章內找到相應內容。
如果文章有錯的地方歡迎指正,大家互相交流。習慣在微信看技術文章的同學,可以關注微信公眾號:Java3y
監聽器常見面試題
監聽器有哪些作用和用法?
監聽器有哪些作用和用法?
Java Web開發中的監聽器(listener)就是application、session、request三個物件建立、銷燬或者往其中新增修改刪除屬性時自動執行程式碼的功能元件,如下所示:
- ①ServletContextListener:對Servlet上下文的建立和銷燬進行監聽。
- ②ServletContextAttributeListener:監聽Servlet上下文屬性的新增、刪除和替換。
-
③HttpSessionListener:對Session的建立和銷燬進行監聽。
-
補 充:session的銷燬有兩種情況:
- session超時(可以在web.xml中通過
<session- config>/<session-timeout>
標籤配置超時時間); - 通過呼叫session物件的invalidate()方 法使session失效。
- session超時(可以在web.xml中通過
-
- ④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