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

  • colacas

    colacas

    29 EKİM 2006
  • DavidParody

    DavidParody

    17 EKİM 2009
  • JayzTwoCents

    JayzTwoCents

    26 AĞUSTOS 2012