javaWeb三大核心技術筆記


Servlet

1) 客戶端發送請求至服務器端;
2) 服務器將請求信息發送至 Servlet;
3) Servlet 生成響應內容並將其傳給服務器。響應內容動態生成,通常取決於客戶端的請求;
4) 服務器將響應返回給客戶端。
在 Web 應用程序中,一個 Servlet 在一個時刻可能被多個用戶同時訪問。這時 Web 容器將為每個用戶創建一個線程來執行 Servlet。如果 Servlet 不涉及共享資源的問題,不必關心多線程問題。但如果 Servlet 需要共享資源,需要保證 Servlet 是線程安全的。
最新版本3.1,為了簡化開發流程,Servlet 3.0 引入了注解(annotation),這使得 web 部署描述符 web.xml 不再是必須的選擇。

Filter

Filter實現了javax.servlet.Filter接口,因此一定要實現javax.servlet包的Filter接口的三個方法init()、doFilter()、destroy(),空實現也行。

在啟動服務器時加載。隨你的web應用啟動而啟動的,只初始化一次,只有當你的web應用停止或重新部署的時候才銷毀。

不像Servlet,它不能產生請求或者響應,它只是修改 對某一資源的請求,或者修改對某一資源的響應。或者成為請求的預處理,響應的后處理

Listenner

輸入url,先經過過濾器,然后是servlet。

Servlet,Filter都是針對url之類的,而Listener是針對對象的操作的

Listenner 也是隨web應用的啟動而啟動,只初始化一次,隨web應用的停止而銷毀。主要作用是: 做一些初始化的內容添加工作、設置一些基本的內容、比如一些參數或者是一些固定的對象等等。

 

web.xml 的加載順序是:context-param -> listener -> filter -> servlet 

 

下面是一個日志過濾器的實現

public class LogFilter implements Filter 
{
//FilterConfig可用於訪問Filter的配置信息
private FilterConfig config;
//實現初始化方法
public void init(FilterConfig config)
{
this.config = config; 
}
//實現銷毀方法
public void destroy()
{
this.config = null; 
}
//執行過濾的核心方法
public void doFilter(ServletRequest request,ServletResponse response, FilterChain chain)throws IOException,ServletException
{
//---------下面代碼用於對用戶請求執行預處理---------
//獲取ServletContext對象,用於記錄日志
ServletContext context = this.config.getServletContext(); 
long before = System.currentTimeMillis();
System.out.println("開始過濾...");
//將請求轉換成HttpServletRequest請求
HttpServletRequest hrequest = (HttpServletRequest)request;
//記錄日志
context.log("Filter已經截獲到用戶的請求地址: " + hrequest.getServletPath());
//Filter只是鏈式處理,請求依然放行到目的地址
chain.doFilter(request, response); 
//---------下面代碼用於對服務器響應執行后處理---------
long after = System.currentTimeMillis();
//記錄日志
context.log("過濾結束");
//再次記錄日志
context.log("請求被定位到" + hrequest.getRequestURI() + "所花的時間為: " + (after - before)); 
}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM