निम्न उदाहरण दिखाता है कि हर बार किसी JSP फ़ाइल को एक्सेस करने पर क्लाइंट का IP पता और वर्तमान दिनांक-समय कैसे प्रिंट करें। यह उदाहरण आपको JSP फिल्टर की बुनियादी समझ देगा, लेकिन आप उसी अवधारणा का उपयोग करके अधिक परिष्कृत फिल्टर एप्लिकेशन लिख सकते हैं।
फिल्टर क्लास (LogFilter.java)
// आवश्यक जावा लाइब्रेरी आयात करें
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Filter क्लास लागू करें
public class LogFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
// आरंभीकरण पैरामीटर प्राप्त करें
String testParam = config.getInitParameter("test-param");
// आरंभीकरण पैरामीटर प्रिंट करें
System.out.println("Test Param: " + testParam);
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws java.io.IOException, ServletException {
// क्लाइंट मशीन का IP पता प्राप्त करें
String ipAddress = request.getRemoteAddr();
// IP पता और वर्तमान टाइमस्टैम्प लॉग करें
System.out.println("IP " + ipAddress + ", Time " + new Date().toString());
// रिक्वेस्ट को फिल्टर चेन में आगे पास करें
chain.doFilter(request, response);
}
public void destroy() {
/* फिल्टर इंस्टेंस के वेब कंटेनर द्वारा सेवा से हटाए जाने से पहले कॉल किया जाता है */
}
}
संकलन और तैनाती
- LogFilter.java को सामान्य तरीके से संकलित करें।
- अपनी LogFilter.class फ़ाइल को <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes में रखें।
web.xml में JSP फिल्टर मैपिंग
फिल्टर्स को परिभाषित किया जाता है और फिर एक URL या JSP फ़ाइल नाम पर मैप किया जाता है, ठीक उसी तरह जैसे सर्वलेट को परिभाषित किया जाता है और फिर web.xml फ़ाइल में URL पैटर्न पर मैप किया जाता है। तैनाती वर्णनकर्ता फ़ाइल web.xml में फिल्टर टैग के लिए निम्न प्रविष्टि बनाएं:
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>LogFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Parameter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
उपरोक्त फिल्टर सभी सर्वलेट्स और JSP पर लागू होगा क्योंकि हमने अपनी कॉन्फ़िगरेशन में /* निर्दिष्ट किया है। आप एक विशेष सर्वलेट या JSP पथ निर्दिष्ट कर सकते हैं यदि आप फिल्टर को केवल कुछ सर्वलेट्स या JSP पर लागू करना चाहते हैं।
अब किसी भी सर्वलेट या JSP को कॉल करने का प्रयास करें और आप अपने वेब सर्वर लॉग में जनरेटेड लॉग देखेंगे। आप उपरोक्त लॉग को अलग फ़ाइल में लॉग करने के लिए Log4J लॉगर का उपयोग कर सकते हैं।
फिल्टर जीवनचक्र
- init(): फिल्टर इंस्टेंस बनाए जाने पर एक बार कॉल किया जाता है।
- doFilter(): प्रत्येक रिक्वेस्ट के लिए कॉल किया जाता है जो URL पैटर्न से मेल खाता है।
- destroy(): फिल्टर हटाए जाने पर एक बार कॉल किया जाता है।
उन्नत उपयोग
- रिक्वेस्ट/रिस्पॉन्स रैपर्स: रिक्वेस्ट/रिस्पॉन्स को संशोधित करने के लिए
HttpServletRequestWrapper/HttpServletResponseWrapperका उपयोग करें। - असिंक्रोनस समर्थन: Servlet 3.0+ में
<async-supported>true</async-supported>। - फिल्टर चेन ऑर्डर: web.xml में घोषणा क्रम द्वारा नियंत्रित।