सर्वलेट 2.5 और 3 के बीच अंतर क्या हैं?


91

मैं J2EE कोड रोल कर रहा हूं जो सर्वलेट 2.5 का पालन करता है और मैं सोच रहा हूं कि 2.5 और 3. के बीच प्रमुख अंतर क्या हैं। आधिकारिक सन डॉक्स और व्यक्तिगत अनुभवों के संकेत

अगर मुझे इस समय के लिए 3 के साथ खुद से संबंधित नहीं होना चाहिए, तो बस इतना कहो। धन्यवाद!


2
+1 जवाब के लिए बस इंतज़ार कर रहे हैं :)
ATorras

जवाबों:


149

अपडेट करें

बस एक अद्यतन के रूप में और अधिक स्पष्ट होने के लिए, ये सर्वलेट्स 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 एपीआई पर एक नज़र डालें ।


3
यह एक उल्लेख के लायक है कि सर्वलेट 3.0 को दिसंबर 2009 में वापस जारी किया गया था। सवाल और वर्तमान स्वीकार किए जाते हैं जवाब उन लोगों को भविष्यवाणी करते हैं।
eis

1
@ServletFilter@WebFilterऔर @WebServletContextListener@WebListenerआधिकारिक चश्मा में AFAICT।
लापो

21

सर्वलेट 3.0 अभी तक जारी नहीं किया गया है, लेकिन ऐसा लगता है कि यह बहुत करीब है। 3.0 में सबसे महत्वपूर्ण परिवर्तन हैं: प्लगगैबिलिटी, विकास में आसानी, Async सर्वलेट, सुरक्षा। आपके लिए ये महत्वपूर्ण हैं या नहीं, मेरे लिए कहना असंभव है।

इनमें से सबसे महत्वपूर्ण शायद अतुल्यकालिक सर्वलेट्स का समर्थन है। यहाँ एक लेख है जो इस बारे में विस्तार से वर्णन करता है। पूरा स्पेसिफिकेशन यहां डाउनलोड किया जा सकता है


पवित्र बकवास, यह बहुत अच्छा है। Async सामान बहुत अच्छा लग रहा है, जानकारी के लिए धन्यवाद। मैंने अभी कुछ इसी तरह से कोडिंग पूरी की है।
मैक्स ए।

@adi यह 2009 दिसंबर ( jcp.org/aboutJava/communityprocess/final/jsr315 ) में रिलीज़ हुई थी
मौहिज़

4
अद्यतन सर्वर 3.1 युक्ति 2013-05 को जारी किया गया। देखें क्या नया है
बेसिल बोर्के

13

जैसा कि डॉन ने उल्लेख किया है, सुधार और परिवर्धन के मुख्य क्षेत्र हैं:

  • प्लगगैबिलिटी (web.xml का मॉड्यूलरिंग)
  • विकास में आसानी (एनोटेशन, जेनरिक, कॉन्फ़िगरेशन पर कन्वेंशन)
  • Async सर्वलेट समर्थन (धूमकेतु शैली प्रोग्रामिंग, async वेब प्रॉक्सी, async वेब सेवाओं के लिए)
  • सुरक्षा संवर्द्धन (प्रोग्रामेटिक लॉगिन / लॉगआउट)
  • अन्य (HttpOnly कुकी, सत्र ट्रैकिंग, WAR फ़ाइल में EJB)

विवरण के लिए जावाऑन 2008 प्रस्तुति " जावा सर्वलेट 3.0 एपीआई: नया और रोमांचक " क्या है


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.