如下我是概括的過濾器監聽器知識點圖:html
圖上的知識點均可以在我其餘的文章內找到相應內容。java
若是文章有錯的地方歡迎指正,你們互相交流。習慣在微信看技術文章的同窗,能夠關注微信公衆號:Java3y
監聽器有哪些做用和用法?
Java Web開發中的監聽器(listener)就是application、session、request三個對象建立、銷燬或者往其中添加修改刪除屬性時自動執行代碼的功能組件,以下所示:web
③HttpSessionListener:對Session的建立和銷燬進行監聽。面試
補 充:session的銷燬有兩種狀況:spring
<session- config>/<session-timeout>
標籤配置超時時間);常見的監聽器用途主要包括:網站在線人數技術、監聽用戶的行爲(管理員踢人)。apache
過濾器有哪些做用和用法?
Java Web開發中的過濾器(filter)是從Servlet 2.3規範開始增長的功能,並在Servlet 2.4規範中獲得加強。對Web應用來講,過濾器是一個駐留在服務器端的Web組件,它能夠截取客戶端和服務器之間的請求與響應信息,並對這些信息進行過 濾。當Web容器接受到一個對資源的請求時,它將判斷是否有過濾器與這個資源相關聯。若是有,那麼容器將把請求交給過濾器進行處理。在過濾器中,你能夠改 變請求的內容,或者從新設置請求的報頭信息,而後再將請求發送給目標資源。當目標資源對請求做出響應時候,容器一樣會將響應先轉發給過濾器,再過濾器中, 你能夠對響應的內容進行轉換,而後再將響應發送到客戶端。安全
常見的過濾器用途主要包括:對用戶請求進行統一認證、對用戶的訪問請求進行記錄和審覈、對用戶發送的數據進行過濾或替換、轉換圖象格式、對響應內容進行壓縮以減小傳輸量、對請求或響應進行加解密處理、觸發資源訪問事件、對XML的輸出應用XSLT等。服務器
和過濾器相關的接口主要有:Filter、FilterConfig、FilterChain微信
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異步處理請求。有人可能會質疑,既然都有多線程了,還須要異步處理請求嗎?答案是確定的,由於若是一個任務處 理時間至關長,那麼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