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

  • Dylan Dubay

    Dylan Dubay

    10 Temmuz 2013
  • itfigueres

    itfigueres

    12 EKİM 2013
  • Troy Hunt

    Troy Hunt

    29 EYLÜL 2011