8.1 सर्वलेट एनोटेशन का परिचय

संस्करण 7 से शुरू होकर, टॉमकैट ने सर्वलेट एपीआई 3.0 वेब सर्वलेट विनिर्देश का समर्थन करना शुरू किया । विशेष रूप से, इसमें एक पैकेज दिखाई दिया, जिसे javax.servlet.annotation. इसमें विभिन्न प्रकार के एनोटेशन होते हैं जिनका उपयोग सर्वलेट क्लास को एनोटेट करने के लिए किया जा सकता है। यदि आप एनोटेशन का उपयोग करते हैं, तो डिप्लॉयमेंट डिस्क्रिप्टर (web.xml) की आवश्यकता नहीं है।

सबसे उपयोगी एनोटेशन की सूची:

टिप्पणी विवरण
1 @WebServlet सर्वलेट घोषित करता है
2 @WebInitParam प्रारंभिक पैरामीटर निर्दिष्ट करता है
3 @WebFilter एक वेब फिल्टर की घोषणा करता है
4 @WebListener वेब श्रोता की घोषणा करता है
5 @ServletSecurity आपको सुरक्षा सेटिंग्स कॉन्फ़िगर करने की अनुमति देता है

उदाहरण:

@WebServlet( urlPatterns = {"/api/*"} )
public class Example extends HttpServlet {
    protected void doGet( HttpServletRequest request, HttpServletResponse response) throws Exception {
         response.setContentType("text/html");
         PrintWriter out = response.getWriter();
         out.println("Hello World!");
    }
}

एक एनोटेशन सर्वलेट घोषित करने के लिए पर्याप्त है और इसे द्वारा दिए गए यूआरएल पर आने वाले सभी अनुरोधों को पूरा करने के लिए मैप करें /api/*

8.2 सर्वलेट मैपिंग की स्थापना

एनोटेशन में @WebServletकई पैरामीटर हैं जो इसके द्वारा वर्णित सर्वलेट के बहुत लचीले कॉन्फ़िगरेशन की अनुमति देते हैं। आइए नजर डालते हैं मुख्य बातों पर:

गुण विवरण
1 name सर्वलेट अद्वितीय नाम (जैसा कि web.xml में है)
2 displayName मानव पठनीय सर्वलेट नाम
3 description सर्वलेट विवरण
4 value मैपिंग के लिए यूआरएल सेट करता है
5 urlPatterns मैप करने के लिए url की सूची निर्दिष्ट करता है (मान के बजाय उपयोग किया जाता है)
6 initParams आपको सर्वलेट के प्रारंभ पैरामीटर सेट करने की अनुमति देता है
7 asyncSupported निर्दिष्ट करता है कि सर्वलेट अतुल्यकालिक रूप से चल सकता है (HTTP/2)
8 loadOnStartup सर्वलेट प्रारंभ प्राथमिकता को नियंत्रित करने के लिए अनुक्रम संख्या
9 smallIcon एक छोटा सर्वलेट आइकन सेट करता है
10 largeIcon एक बड़ा सर्वलेट आइकन सेट करता है

यहाँ कई दिलचस्प बिंदु हैं।

सबसे पहले, ध्यान दें कि valueऔर urlPatternsविनिमेय विशेषताएँ हैं। वे दोनों आपको उन यूआरएल की सूची निर्दिष्ट करने की अनुमति देते हैं जिन्हें सर्वलेट को मैप करना चाहिए।

दूसरा, पैरामीटर asyncSupportedइंगित करता है कि सर्वलेट HTTP/2 प्रोटोकॉल पर एसिंक्रोनस अनुरोधों को सही ढंग से संसाधित करेगा या नहीं।

और तीसरी महत्वपूर्ण विशेषता है initParams, यह आपको पैरामीटर की एक सूची सेट करने की अनुमति देती है जिसे ServletContext में रखा जाएगा।

उदाहरण:

@WebServlet(
        urlPatterns = {"/sendFile", "/uploadFile"},
        loadOnStartup = 1,
        asyncSupported = true,
        initParams = {
            @WebInitParam(name = "saveDir", value = "c:/uploaded"),
            @WebInitParam(name = "allowedTypes", value = "jpg,gif,png")
        }
)
public class ImageUploadServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String saveDir = getInitParameter("saveDir");
        String fileTypes = getInitParameter("allowedTypes");

        PrintWriter writer = response.getWriter();

        writer.println("saveDir = " + saveDir);
        writer.println("fileTypes = " + fileTypes);
    }
}

8.3 फ़िल्टर मैपिंग की स्थापना

जैसा कि ऊपर उल्लेख किया गया है, फ़िल्टर एक उपयोगिता प्रकार के सर्वलेट हैं, और वे सर्वलेट्स की तरह कॉन्फ़िगर किए गए हैं। एनोटेशन में ये विशेषताएँ हैं @WebFilter:

गुण विवरण
1 filterName अद्वितीय नाम फ़िल्टर करें (जैसा कि web.xml में है)
2 displayName मानव पठनीय फ़िल्टर नाम
3 description फ़िल्टर विवरण
4 value / urlPatterns मैप करने के लिए url की सूची सेट करता है
5 dispatcherTypes डिस्पैचर टाइप्स की एक सूची निर्दिष्ट करता है
6 servletNames लागू करने के लिए सर्वलेट्स की एक सूची निर्दिष्ट करता है
7 initParams आपको फ़िल्टर के शुरुआती पैरामीटर सेट करने की अनुमति देता है
8 asyncSupported निर्दिष्ट करता है कि फ़िल्टर अतुल्यकालिक रूप से चल सकता है (HTTP/2)
9 smallIcon एक छोटा फ़िल्टर आइकन सेट करता है
10 largeIcon एक बड़ा फ़िल्टर आइकन सेट करता है

फ़िल्टर का एक उदाहरण जो विशिष्ट सर्वलेट के सभी अनुरोधों को रोकता है :

@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
    // implements Filter's methods here...
}

एकाधिक पैरामीटर दिए गए फ़िल्टर का एक उदाहरण :

@WebFilter(
        urlPatterns = "/uploadFilter",
        initParams = @WebInitParam(name = "fileTypes", value = "doc;xls;zip;txt;jpg;png;gif")
)
public class UploadFilter implements Filter {
    // implements Filter's methods here...
}

RequestDispatcher के लिए दिए गए प्रकार के फ़िल्टर का एक उदाहरण :

@WebFilter(
        urlPatterns = "/admin",
        dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class MyFilter implements Filter {
    // implements Filter's methods here...
}

आप निम्नलिखित व्याख्यानों में फ़िल्टर और सर्वलेट के उद्देश्य के बारे में अधिक जानेंगे।