在Java中,FilterChain是Servlet中的一個接口,它用于在請求被傳遞給下一個過濾器或servlet之前,對請求進行過濾或修改。
下面是一個使用FilterChain的示例:
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化操作
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
// 在請求被傳遞給下一個過濾器或servlet之前,可以對請求進行過濾或修改
String username = req.getParameter("username");
if (username != null && !username.isEmpty()) {
// 對請求進行修改
req.setAttribute("username", username.toUpperCase());
}
// 將過濾器鏈繼續向下傳遞
chain.doFilter(req, res);
}
@Override
public void destroy() {
// 清理操作
}
}
在上面的示例中,我們實現了一個自定義的過濾器MyFilter,并重寫了它的init、doFilter和destroy方法。
在doFilter方法中,我們首先將ServletRequest和ServletResponse轉換為HttpServletRequest和HttpServletResponse對象,以便使用更多的HTTP相關方法和屬性。
然后,我們可以通過HttpServletRequest對象獲取請求參數,對請求進行過濾或修改。在這個例子中,我們將username的值轉換為大寫,并將其設置為請求的一個屬性。
最后,我們調用FilterChain的doFilter方法,將請求和響應傳遞給下一個過濾器或servlet處理。
注意:在web.xml中配置過濾器時,需要將該過濾器與特定的URL模式或servlet名稱進行綁定,以便過濾器可以在請求到達時被調用。