SORU
28 EKİM 2009, ÇARŞAMBA


Ne Sunucu uygulaması 2,5-3 arasındaki farklar?

Sunucu uygulaması 2.5 yapışır ve büyük farklar 2.5 ile 3 arasında ne olduğunu merak ediyorum J2EE kodu devreye girdi. Güneş resmi dokümanlar ve kişisel deneyimleri işaretçiler takdir ettim.

Eğer kez 3 olmak ile ilgili kendim gitsem daha olursa, sadece söyle. Teşekkürler!

CEVAP
12 AĞUSTOS 2013, PAZARTESİ


GÜNCELLEME

Sadece bir güncelleme olarak ve daha açık olmak için, bu sunucu uygulamalarına 2.5 ve 3 arasındaki temel farklar (yorucu olmaya çalışmıyorum, sadece en ilgi çekici yerlerinden söz ediyorum)

Sunucu uygulamalarına, filtreler ve dinleyiciler Geliştirme (Kolay) ilan açıklamaları

İçinde sunucu uygulamalarını bu eklemek gerekir parametre bir init ile bir sunucu uygulaması ilan için 2.5,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>

Sunucu uygulamalarına 3,web.xmlisteğe bağlı ve XML yerine ek açıklamaları kullanabilirsiniz. Aynı örnek:

@WebServlet(name="myServlet",
    urlPatterns={"/path/to/my/servlet"},
    initParams={@InitParam(name="configFile", value="config.xml")})
public class MyAwesomeServlet extends HttpServlet { ... }

Filtreler için, bu eklemek gerekirweb.xml2.5 sunucu uygulamalarına:

<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>

Eşdeğer sunucu uygulamalarını 3: ek açıklamaları kullanarak

@ServletFilter(name="myFilter", urlPatterns={"/path/to/my/filter"})
public class MyAwesomeFilter implements Filter { ... }

Sunucu uygulamalarına 2.5 bir dinleyici (bu durumda bir ServletCotnextListener) için:

<listener>
    <listener-class>my.server.side.stuff.MyAwesomeListener</listener-class>
</listener>

Aynı kullanarak ek açıklamalar:

@WebServletContextListener
public class MyAwesomeListener implements ServletContextListener { ... }

Yazılım bölümleme of web.xml (Pluggability)

  • Sunucu uygulamalarına 2.5 tek bir monolitik varweb.xmldosya.
  • 3, Her "" bir kavanoz . yüklenebilir sunucu uygulamalarına ^strong>web-fragment.xmlonun içindeMETA-INFdizin sunucu uygulamalarına belirterek, filtreler, vb. Bu kütüphaneler ve çerçeveler kendi sunucu uygulamalarını veya diğer nesneleri belirtmek için izin vermektir.

İçerik başlatma süresi (Pluggability) sunucu uygulamalarına, filtreler ve dinleyiciler dinamik kayıt

ServletContextListener dinamik sunucu uygulamalarına, filtreler ve dinleyiciler aşağıdaki yöntemlerdenSevletContexteklendi kullanarak ekleyebilirsiniz sunucu uygulamalarını 3: addServlet(), addFilter() addListener()

Asenkron desteği

Örnek: bazı sunucu uygulaması konteyner kendi iş parçacığı havuzu iş parçacığı beş vardır, ve zaman alıcı bir işlem isteği (karmaşık bir SQL sorgusu gibi) başına idam edilmesi olduğunu söylüyorlar.

  • İle sunucu uygulamalarına 2.5 bu sunucu uygulaması konteyner olurdu tükendi kullanılabilir iş parçacığı aldığı beş istekleri ile aynı anda ve beş kullanılabilir iş parçacığı başlangıç yaparak süreci, çünkü bu iş olmaz dönene kadar service() (ya da doGet(), doPost(), vb.) baştan sona yürütülür ve bir yanıt verir.

  • Servlet 3.0 ile, uzun süre, bu işlem için başka bir iş parçacığı temsilci ve yanıt (tepki artık son parçacığı tarafından gönderilecektir) göndermeden önce service() bitirebilir. Bu şekilde iplik yeni cevaplar almak için ücretsiz.

Asenkron destek için bir örnek:

Sunucu uygulamalarına 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

        // ...
    }

}

Sunucu uygulamalarına 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.

        // ...

    }

}

25* *arabirimi de isteği, yanıt nesnesi ve dinleyicilerin bir süreci tamamlandığında bildirmek için nesne eklemek için yöntemleri vardır.

Programlı giriş ve çıkış (güvenlik geliştirmeleri)

HttpServletRequest arayüzü iki yeni yöntem eklendi sunucu uygulamalarını 3: login(username, password) logout().

Daha fazla bilgi için, Java EE 6 API bakabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Darren Kitchen

    Darren Kitch

    3 EKİM 2011
  • HER0R

    HER0R

    16 Aralık 2007
  • WoodysGamertag

    WoodysGamert

    17 Aralık 2009