SORU
2 ŞUBAT 2010, Salı


Sunucu her örneği ve sunucu uygulamalarını içinde sunucu her iş parçacığı arasındaki fark?

Sunucu uygulaması sınıfın birden çok örneği vardır? "Sunucu uygulaması her örneği", duyduğuma göre Kimse bunun hakkında biraz bilgi verebilir mi?

CEVAP
2 ŞUBAT 2010, Salı


Sunucu uygulaması konteyner başladığında,:

  1. web.xml; okur
  2. sınıf içinde bildirilen sunucu uygulamalarına bulur; ve
  3. yükler ve başlatır her Sunucu uygulamasısadece bir kez.

Kabaca, bu gibi:

String urlPattern = parseWebXmlAndRetrieveServletUrlPattern();
String servletClass = parseWebXmlAndRetrieveServletClass();
HttpServlet servlet = (HttpServlet) Class.forName(servletClass).newInstance();
servlet.init();
servlets.put(urlPattern, servlet); // Similar to a map interface.

Bu sunucu uygulamalarına hafızada saklanır ve istek URL Sunucu uygulaması url-pattern ilişkili maçları her zaman yeniden. Sunucu uygulaması konteyner kodu benzer yürütür:

for (Entry<String, HttpServlet> entry : servlets.entrySet()) {
    String urlPattern = entry.getKey();
    HttpServlet servlet = entry.getValue();
    if (request.getRequestURL().matches(urlPattern)) {
        servlet.service(request, response);
        break;
    }
}

Onun aç GenericServlet#service() çağırmak HttpServletRequest#getMethod() ile karar verir.

Sen servletcontainer, yeniden kullanıraynı sunucu uygulaması örneğiher istek için. Diğer bir deyişle: sunucu uygulamalarına arasında paylaştırılırher istek. Bu son derece önemli uygulamasında kod aslında basit olan iş parçacığı için güvenli şekilde yazmaya yüzden: yapdeğilistek veya Oturum örnek veri sunucu değişkenleri, yöntem yerel değişkenler kapsamlı atayın. E. g.

public class MyServlet extends HttpServlet {

    private Object thisIsNOTThreadSafe;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Object thisIsThreadSafe;

        thisIsNOTThreadSafe = request.getParameter("foo"); // BAD!! Shared among all requests!
        thisIsThreadSafe = request.getParameter("foo"); // OK, this is thread safe.
    } 
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jkimisyellow

    jkimisyellow

    6 Mayıs 2009
  • Paste Magazine

    Paste Magazi

    28 AĞUSTOS 2008
  • sk8ingis4me

    sk8ingis4me

    16 Mart 2006