Java Servlet 中過濾器 的必要性
為了確保請求得到正確處理,開發人員通常使用過濾器來準備和後處理請求。這些物件可以執行各種有用的操作,例如輸入驗證、轉換、日誌記錄、壓縮、加密和解密。
Servlet 過濾器的特別之處在於其易於操作性:作為 web.xml 檔案中定義的可插拔實體,刪除或調整過濾器就像從程式碼庫中刪除一個條目一樣簡單。這個簡化的流程意味著更低的維護成本。
過濾器的使用
當資料在業務運營中具有內在重要性時,資料的驗證就變得至關重要。透過伺服器將來自客戶端的資訊儲存到資料庫中,驗證資訊的有效性非常重要,因為無效資料會對系統的功能產生災難性的影響。儘管可以在客戶端新增過濾器,但在客戶端停用 JavaScript 的情況下,不會檢查請求或資料,這使得伺服器端過濾器成為必需。
以下是 Java Servlet 中過濾器的一些主要用途:
記錄所有傳入請求
轉換
資料壓縮
輸入驗證
加密和解密
Java Servlet 中過濾器的優勢
對資源請求進行身份驗證和授權。在轉發使用者的請求之前確認使用者的真實性。
為了將其傳遞給 servlet,格式化請求體或標頭。原始資料需要準備。
客戶端傳送的響應資料將被壓縮。(例如:加密)
包含標頭資訊、cookie 等以修改響應。
輸入檢查。(非常重要)
如何實現一個過濾器?
如果要有效地實現 Filter API(或介面),請確保記住三個關鍵方法——init()、doFilter() 和 destroy()。覆蓋這些方法對於過濾器的正確生命週期管理是必要的。另請注意,在使用 ServletRequest 和 ServletResponse 透過 doFilter() 方法執行 FilterChain 時。
過濾器示例
在此示例中,我們僅提供有關在請求後處理後自動呼叫的過濾器的資訊。
Index.html
示例
<a href="servlet1">click here </a>
Myfilter.java
示例
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.*;
public class MyFilter implements Filter{
public void init(FilterConfig arg0) throws ServletException {}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
PrintWriter out=resp.getWriter();
out.print("filter is invoked before");
chain.doFilter(req, resp);//sends request to next resource
out.print("filter is invoked after");
}
public void destroy() {}
}
HelloServlet.java
示例
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.*;
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print("<br>welcome to servlet<br>");
}
}
Web.xml
示例
<web-app>
<servlet>
<servlet-name>s1</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>s1</servlet-name>
<url-pattern>/servlet1</url-pattern>
</servlet-mapping>
<filter>
<filter-name>f1</filter-name>
<filter-class>MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>f1</filter-name>
<url-pattern>/servlet1</url-pattern>
</filter-mapping>
</web-app>
結論
在 Java Servlet 開發過程中使用過濾器,可以採取措施來保護 Web 應用程式的功能並增強其競爭優勢。這些強大的工具為開發人員提供了許多優勢,例如針對日誌記錄或效能監控等橫切關注點的自定義實現,同時提高可靠性和效率。但是,值得注意的是,應考慮最佳化,以免因過高的開銷而抵消這些好處。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP