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

  • BigBoyTV

    BigBoyTV

    25 EYLÜL 2013
  • Call Me Howard

    Call Me Howa

    18 AĞUSTOS 2012
  • William Hyde

    William Hyde

    23 HAZİRAN 2008