Java中的過濾器和攔截器是Web開發中被廣泛使用的兩種技術。它們的作用都是對請求進行處理和過濾。本文將分別介紹它們的構造。
Java過濾器(Filter)
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 { //過濾操作 chain.doFilter(request, response); } @Override public void destroy() { //銷毀操作 } }
過濾器的構造使用Filter接口,需要實現三個方法:init、doFilter和destroy。init方法在過濾器第一次被創建時執行,可以進行一些初始化操作。doFilter方法是過濾器的核心,對請求進行攔截和處理,在處理完成后需要調用chain.doFilter方法將請求傳遞到下一個過濾器或Servlet。destroy方法在過濾器被銷毀時執行,可以進行一些清理工作。
Java攔截器(Interceptor)
public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //攔截前處理 return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { //攔截后處理 } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { //攔截后清理工作 } }
攔截器的構造使用HandlerInterceptor接口,需要實現三個方法:preHandle、postHandle和afterCompletion。preHandle方法在請求到達Controller前執行,可以進行權限等攔截邏輯。postHandle方法在Controller處理后,返回視圖前執行,可以進行對返回內容的處理。afterCompletion是在視圖渲染完成后執行,可以進行一些清理工作。