अपडेट करें
बस एक अद्यतन के रूप में और अधिक स्पष्ट होने के लिए, ये सर्वलेट्स 2.5 और 3 के बीच मुख्य अंतर हैं (मैं संपूर्ण होने की कोशिश नहीं कर रहा हूं, मैं सिर्फ सबसे दिलचस्प भागों का उल्लेख कर रहा हूं):
सर्वलेट, फ़िल्टर और श्रोता (विकास में आसानी) घोषित करने की टिप्पणियां
सर्वलेट 2.5 में, एक init पैरामीटर के साथ एक सर्वलेट घोषित करने के लिए आपको इसे web.xml में जोड़ना होगा :
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>my.server.side.stuff.MyAwesomeServlet</servlet-class>
<init-param>
<param-name>configFile</param-name>
<param-value>config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/path/to/my/servlet</url-pattern>
</servlet-mapping>
सर्वलेट 3 में, web.xml वैकल्पिक है और आप XML के बजाय एनोटेशन का उपयोग कर सकते हैं। एक ही उदाहरण:
@WebServlet(name="myServlet",
urlPatterns={"/path/to/my/servlet"},
initParams={@InitParam(name="configFile", value="config.xml")})
public class MyAwesomeServlet extends HttpServlet { ... }
फ़िल्टर के लिए, आपको इसे web.xml में सर्वलेट 2.5 में जोड़ना होगा :
<filter>
<filter-name>myFilter</filter-name>
<filter-class>my.server.side.stuff.MyAwesomeServlet</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/path/to/my/filter</url-pattern>
</filter-mapping>
सर्वलेट्स 3 में एनोटेशन का उपयोग करते हुए समतुल्य:
@ServletFilter(name="myFilter", urlPatterns={"/path/to/my/filter"})
public class MyAwesomeFilter implements Filter { ... }
एक श्रोता के लिए (इस मामले में एक ServletContextListener), सर्वलेट्स 2.5 में।
<listener>
<listener-class>my.server.side.stuff.MyAwesomeListener</listener-class>
</listener>
एनोटेशन का उपयोग करने वाला:
@WebServletContextListener
public class MyAwesomeListener implements ServletContextListener { ... }
Web.xml (प्लगबिलिटी) का संशोधन
- सर्वलेट्स 2.5 में सिर्फ एक अखंड web.xml फ़ाइल है।
- सर्वलेट्स 3 में, प्रत्येक "लोड करने योग्य" जार में मेटा- इन डायरेक्टरी निर्दिष्ट करने वाले सर्वलेट्स, फिल्टर्स आदि में एक वेब-टुकड़ा -xml हो सकता है। यह पुस्तकालयों और रूपरेखाओं को अपने स्वयं के सर्वलेट्स या अन्य ऑब्जेक्ट्स को निर्दिष्ट करने की अनुमति देता है।
संदर्भ आरंभीकरण समय (प्लगगैबिलिटी) पर सर्वलेट्स, फिल्टर और श्रोताओं का गतिशील पंजीकरण
सर्वलेट 3 में, एक ServletContextListener
गतिशील सर्वलेट्स, फिल्टर और निम्नलिखित तरीकों का उपयोग कर श्रोताओं को जोड़ा जोड़ सकते हैं SevletContext
: addServlet()
, addFilter()
औरaddListener()
अतुल्यकालिक समर्थन
उदाहरण: कहते हैं कि कुछ सर्वलेट कंटेनर में थ्रेड पूल में पांच धागे होते हैं, और प्रति अनुरोध (एक जटिल SQL क्वेरी की तरह) निष्पादित करने के लिए एक समय लेने वाली प्रक्रिया होती है।
सर्वलेट 2.5 के साथ इस सर्वलेट कंटेनर उपलब्ध धागे से बाहर चलाने होगा अगर यह एक ही समय में पांच अनुरोध और पाँच उपलब्ध धागे प्रक्रिया शुरू कर प्राप्त करता है, क्योंकि सूत्र तक वापस नहीं होगा service()
(या doGet()
, doPost()
आदि) शुरू से ही क्रियान्वित किया जाता है अंत करने के लिए और एक प्रतिक्रिया देता है।
सर्वलेट्स 3.0 के साथ, इस लंबे समय की प्रक्रिया को दूसरे थ्रेड पर service()
भेजा जा सकता है और प्रतिक्रिया भेजने से पहले खत्म कर दिया जाता है (अब प्रतिक्रिया नवीनतम थ्रेड द्वारा भेजी जाएगी)। इस तरह धागा नई प्रतिक्रियाएं प्राप्त करने के लिए स्वतंत्र है।
अतुल्यकालिक समर्थन का एक उदाहरण:
सर्वलेट्स 2.5:
public class MyAwesomeServlet extends HttpSerlvet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) {
// ...
runSlowProcess();
// no async support, thread will be free when runSlowProcess() and
// doGet finish
// ...
}
}
सर्वलेट 3:
@WebServlet(name="myServlet",
urlPatterns={"/mySlowProcess"},
asyncSupported=true) // asyncSupported MUST be specified for
// servlets that support asynchronous
// processing
public class MyAwesomeServlet extends HttpSerlvet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) {
// an AsyncContext is created, now the response will be completed
// not when doGet finalizes its execution, but when
// myAsyncContext.complete() is called.
AsyncContext myAsyncContext = request.startAsync(request, response);
// ...
// myAsyncContext is passed to another thread
delegateExecutionToProcessingThread(myAsyncContext);
// done, now this thread is free to serve another request
}
}
// ... and somewhere in another part of the code:
public class MyProcessingObject {
public void doSlowProcess() {
// ...
runSlowProcess();
myAsyncContext.complete(); // request is now completed.
// ...
}
}
इंटरफ़ेस AsyncContext
में अनुरोध ऑब्जेक्ट, प्रतिक्रिया ऑब्जेक्ट प्राप्त करने और प्रक्रिया समाप्त होने पर उन्हें सूचित करने के लिए श्रोताओं को जोड़ने के तरीके भी हैं।
प्रोग्रामेटिक लॉगिन और लॉगआउट (सुरक्षा संवर्द्धन)
सर्वलेट्स 3 में, इंटरफ़ेस HttpServletRequest
को दो नए तरीके जोड़े गए हैं: login(username, password)
और logout()
।
अधिक जानकारी के लिए, जावा ईई 6 एपीआई पर एक नज़र डालें ।