Интернет програмиране с JAVA
Сървлет филтрите са Java класове, които могат да бъдат използвани в Java web програмирането за следните цели :
Видове филтри:
Деклариране на филтри:
Когато уеб контейнера стартира уеб приложението, той създава инстанция на всеки филтър, който е деклариран в дескриптора. Филтрите се изпълняват в реда, в който са декларирани.
Методи на сървлет филтър
Филтърът е Java клас, който реализира интерфейса javax.servlet.Filter.
Интерфейсът javax.servlet.Filter
дефинира методите:
public void doFilter (ServletRequest, ServletResponse, FilterChain)
- Този метод се извиква от контейнера всеки път при обработка на request/response, в който се изисква достъп до ресурс от клиент;public void init(FilterConfig filterConfig)
- Този метод се извиква от уеб контейнера, за да се окаже на филтъра, че е вече активен;public void destroy()
- Този метод се извиква от уеб контейнера, за да се окаже на филтъра, че вече не е активен.Пример:
Servlet филтър, отпечатващ IP адреса на клиенти и текущия час дата:
@WebFilter(urlPatterns = "/CheckBox")
public class LogFilter implements Filter {
public void init(FilterConfig fConfig) throws ServletException {
String testParam = fConfig.getInitParameter("test-param");
System.out.println("Test Param: "+ testParam);
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
String ipAddress = request.getRemoteAddr();
System.out.println("IP "+ipAddress + ", Time " + new Date().toString());
chain.doFilter(request, response);
}
}
Анотацията @WebFilter декларира класа, който го съдържа, като сървлет филтър. Параметърът на анотацията - urlPatterns = “/CheckBox”) оказва името на сървлета, за който ще бъде приложен филтъра. В зависимост от броя и типа параметри на анотацията има различни случаи на използване на филтрите:
@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
...
}
@WebFilter(
urlPatterns = "/uploadFilter",
initParams = @WebInitParam(name = "fileTypes", value =
"doc;xls;zip;txt;jpg;png;gif")
)
public class UploadFilter implements Filter {
...
}
@WebFilter(
urlPatterns = "/admin/*",
filterName = "AdminFilter",
description = "Filter all admin URLs"
)
public class MyFilter implements Filter {
...
}
@WebFilter(
urlPatterns = "/admin",
dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class MyFilter implements Filter {
...
}